diff --git a/briar-android/res/layout/activity_password.xml b/briar-android/res/layout/activity_password.xml index 5a306a79c..76ce7c127 100644 --- a/briar-android/res/layout/activity_password.xml +++ b/briar-android/res/layout/activity_password.xml @@ -44,6 +44,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignTop="@id/btn_sign_in" + android:layout_alignBottom="@id/btn_sign_in" + android:gravity="center" android:visibility="invisible" /> getDatabase(DatabaseConfig config, - FileUtils fileUtils) { - return new H2Database(config, fileUtils, new SystemClock()); + Database getDatabase(DatabaseConfig config) { + return new H2Database(config, new SystemClock()); } @Provides @Singleton diff --git a/briar-core/src/org/briarproject/db/H2Database.java b/briar-core/src/org/briarproject/db/H2Database.java index 11d0df595..de8997334 100644 --- a/briar-core/src/org/briarproject/db/H2Database.java +++ b/briar-core/src/org/briarproject/db/H2Database.java @@ -1,5 +1,10 @@ package org.briarproject.db; +import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.db.DbException; +import org.briarproject.api.system.Clock; +import org.briarproject.util.StringUtils; + import java.io.File; import java.io.IOException; import java.sql.Connection; @@ -10,12 +15,6 @@ import java.util.Properties; import javax.inject.Inject; -import org.briarproject.api.db.DatabaseConfig; -import org.briarproject.api.db.DbException; -import org.briarproject.api.system.Clock; -import org.briarproject.api.system.FileUtils; -import org.briarproject.util.StringUtils; - /** Contains all the H2-specific code for the database. */ class H2Database extends JdbcDatabase { @@ -25,14 +24,12 @@ class H2Database extends JdbcDatabase { private static final String SECRET_TYPE = "BINARY(32)"; private final DatabaseConfig config; - private final FileUtils fileUtils; private final String url; @Inject - H2Database(DatabaseConfig config, FileUtils fileUtils, Clock clock) { + H2Database(DatabaseConfig config, Clock clock) { super(HASH_TYPE, BINARY_TYPE, COUNTER_TYPE, SECRET_TYPE, clock); this.config = config; - this.fileUtils = fileUtils; String path = new File(config.getDatabaseDirectory(), "db").getAbsolutePath(); // FIXME: Remove WRITE_DELAY=0 after implementing BTPv2? url = "jdbc:h2:split:" + path + ";CIPHER=AES;MULTI_THREADED=1" @@ -58,15 +55,10 @@ class H2Database extends JdbcDatabase { public long getFreeSpace() throws DbException { File dir = config.getDatabaseDirectory(); long maxSize = config.getMaxSize(); - try { - long free = fileUtils.getFreeSpace(dir); - long used = getDiskSpace(dir); - long quota = maxSize - used; - long min = Math.min(free, quota); - return min; - } catch (IOException e) { - throw new DbException(e); - } + long free = dir.getFreeSpace(); + long used = getDiskSpace(dir); + long quota = maxSize - used; + return Math.min(free, quota); } private long getDiskSpace(File f) { diff --git a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java index 9f32a535f..3b11ebee5 100644 --- a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java +++ b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java @@ -1,7 +1,10 @@ package org.briarproject.plugins.file; -import static java.util.logging.Level.WARNING; -import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH; +import org.briarproject.api.ContactId; +import org.briarproject.api.plugins.TransportConnectionReader; +import org.briarproject.api.plugins.TransportConnectionWriter; +import org.briarproject.api.plugins.simplex.SimplexPlugin; +import org.briarproject.api.plugins.simplex.SimplexPluginCallback; import java.io.File; import java.io.FileInputStream; @@ -13,12 +16,8 @@ import java.util.Locale; import java.util.concurrent.Executor; import java.util.logging.Logger; -import org.briarproject.api.ContactId; -import org.briarproject.api.plugins.TransportConnectionReader; -import org.briarproject.api.plugins.TransportConnectionWriter; -import org.briarproject.api.plugins.simplex.SimplexPlugin; -import org.briarproject.api.plugins.simplex.SimplexPluginCallback; -import org.briarproject.api.system.FileUtils; +import static java.util.logging.Level.WARNING; +import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH; public abstract class FilePlugin implements SimplexPlugin { @@ -26,7 +25,6 @@ public abstract class FilePlugin implements SimplexPlugin { Logger.getLogger(FilePlugin.class.getName()); protected final Executor ioExecutor; - protected final FileUtils fileUtils; protected final SimplexPluginCallback callback; protected final int maxLatency; @@ -37,10 +35,9 @@ public abstract class FilePlugin implements SimplexPlugin { protected abstract void writerFinished(File f); protected abstract void readerFinished(File f); - protected FilePlugin(Executor ioExecutor, FileUtils fileUtils, - SimplexPluginCallback callback, int maxLatency) { + protected FilePlugin(Executor ioExecutor, SimplexPluginCallback callback, + int maxLatency) { this.ioExecutor = ioExecutor; - this.fileUtils = fileUtils; this.callback = callback; this.maxLatency = maxLatency; } @@ -84,7 +81,7 @@ public abstract class FilePlugin implements SimplexPlugin { if (dir == null || !dir.exists() || !dir.isDirectory()) return null; File f = new File(dir, filename); try { - long capacity = fileUtils.getFreeSpace(dir); + long capacity = dir.getFreeSpace(); if (capacity < MIN_STREAM_LENGTH) return null; OutputStream out = new FileOutputStream(f); return new FileTransportWriter(f, out, capacity, this); diff --git a/briar-core/src/org/briarproject/system/FileUtilsImpl.java b/briar-core/src/org/briarproject/system/FileUtilsImpl.java deleted file mode 100644 index 923f35c9a..000000000 --- a/briar-core/src/org/briarproject/system/FileUtilsImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.briarproject.system; - -import org.briarproject.api.system.FileUtils; - -import java.io.File; -import java.io.IOException; - -public class FileUtilsImpl implements FileUtils { - - public long getTotalSpace(File f) throws IOException { - return f.getTotalSpace(); // Requires Java 1.6 - } - - public long getFreeSpace(File f) throws IOException { - return f.getUsableSpace(); // Requires Java 1.6 - } - - public void deleteFileOrDir(File f) { - if (f.isFile()) - f.delete(); - else if (f.isDirectory()) - for (File child : f.listFiles()) - deleteFileOrDir(child); - } -} diff --git a/briar-core/src/org/briarproject/util/FileUtils.java b/briar-core/src/org/briarproject/util/FileUtils.java new file mode 100644 index 000000000..109841317 --- /dev/null +++ b/briar-core/src/org/briarproject/util/FileUtils.java @@ -0,0 +1,15 @@ +package org.briarproject.util; + +import java.io.File; + +public class FileUtils { + + public static void deleteFileOrDir(File f) { + if (f.isFile()) { + f.delete(); + } else if (f.isDirectory()) { + for (File child : f.listFiles()) deleteFileOrDir(child); + f.delete(); + } + } +} diff --git a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java b/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java index 58be0ce51..92f2d6717 100644 --- a/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java +++ b/briar-desktop/src/org/briarproject/plugins/DesktopPluginsModule.java @@ -1,8 +1,6 @@ package org.briarproject.plugins; -import java.util.Arrays; -import java.util.Collection; -import java.util.concurrent.Executor; +import com.google.inject.Provides; import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.lifecycle.IoExecutor; @@ -12,24 +10,26 @@ import org.briarproject.api.plugins.duplex.DuplexPluginFactory; import org.briarproject.api.plugins.simplex.SimplexPluginConfig; import org.briarproject.api.plugins.simplex.SimplexPluginFactory; import org.briarproject.api.reliability.ReliabilityLayerFactory; -import org.briarproject.api.system.FileUtils; import org.briarproject.plugins.bluetooth.BluetoothPluginFactory; import org.briarproject.plugins.file.RemovableDrivePluginFactory; import org.briarproject.plugins.modem.ModemPluginFactory; import org.briarproject.plugins.tcp.LanTcpPluginFactory; import org.briarproject.plugins.tcp.WanTcpPluginFactory; -import com.google.inject.Provides; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.Executor; public class DesktopPluginsModule extends PluginsModule { @Provides - SimplexPluginConfig getSimplexPluginConfig(@IoExecutor Executor ioExecutor, - FileUtils fileUtils) { + SimplexPluginConfig getSimplexPluginConfig( + @IoExecutor Executor ioExecutor) { SimplexPluginFactory removable = - new RemovableDrivePluginFactory(ioExecutor, fileUtils); + new RemovableDrivePluginFactory(ioExecutor); final Collection factories = - Arrays.asList(removable); + Collections.singletonList(removable); return new SimplexPluginConfig() { public Collection getFactories() { return factories; diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java index 1a620ce1b..1042ad77b 100644 --- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java +++ b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java @@ -1,6 +1,8 @@ package org.briarproject.plugins.file; -import static java.util.logging.Level.WARNING; +import org.briarproject.api.ContactId; +import org.briarproject.api.TransportId; +import org.briarproject.api.plugins.simplex.SimplexPluginCallback; import java.io.File; import java.io.IOException; @@ -11,10 +13,7 @@ import java.util.List; import java.util.concurrent.Executor; import java.util.logging.Logger; -import org.briarproject.api.ContactId; -import org.briarproject.api.TransportId; -import org.briarproject.api.plugins.simplex.SimplexPluginCallback; -import org.briarproject.api.system.FileUtils; +import static java.util.logging.Level.WARNING; class RemovableDrivePlugin extends FilePlugin implements RemovableDriveMonitor.Callback { @@ -27,10 +26,10 @@ implements RemovableDriveMonitor.Callback { private final RemovableDriveFinder finder; private final RemovableDriveMonitor monitor; - RemovableDrivePlugin(Executor ioExecutor, FileUtils fileUtils, - SimplexPluginCallback callback, RemovableDriveFinder finder, - RemovableDriveMonitor monitor, int maxLatency) { - super(ioExecutor, fileUtils, callback, maxLatency); + RemovableDrivePlugin(Executor ioExecutor, SimplexPluginCallback callback, + RemovableDriveFinder finder, RemovableDriveMonitor monitor, + int maxLatency) { + super(ioExecutor, callback, maxLatency); this.finder = finder; this.monitor = monitor; } diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java index cc817061d..f4ed1e348 100644 --- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java +++ b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePluginFactory.java @@ -1,14 +1,13 @@ package org.briarproject.plugins.file; -import java.util.concurrent.Executor; - import org.briarproject.api.TransportId; import org.briarproject.api.plugins.simplex.SimplexPlugin; import org.briarproject.api.plugins.simplex.SimplexPluginCallback; import org.briarproject.api.plugins.simplex.SimplexPluginFactory; -import org.briarproject.api.system.FileUtils; import org.briarproject.util.OsUtils; +import java.util.concurrent.Executor; + public class RemovableDrivePluginFactory implements SimplexPluginFactory { // Maximum latency 14 days (Royal Mail or lackadaisical carrier pigeon) @@ -16,12 +15,9 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory { private static final int POLLING_INTERVAL = 10 * 1000; // 10 seconds private final Executor ioExecutor; - private final FileUtils fileUtils; - public RemovableDrivePluginFactory(Executor ioExecutor, - FileUtils fileUtils) { + public RemovableDrivePluginFactory(Executor ioExecutor) { this.ioExecutor = ioExecutor; - this.fileUtils = fileUtils; } public TransportId getId() { @@ -49,7 +45,7 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory { } else { return null; } - return new RemovableDrivePlugin(ioExecutor, fileUtils, callback, - finder, monitor, MAX_LATENCY); + return new RemovableDrivePlugin(ioExecutor, callback, finder, monitor, + MAX_LATENCY); } } diff --git a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java index e605fe950..3ed1a7540 100644 --- a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java +++ b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java @@ -1,13 +1,12 @@ package org.briarproject.system; +import com.google.inject.AbstractModule; + import org.briarproject.api.system.Clock; -import org.briarproject.api.system.FileUtils; import org.briarproject.api.system.SeedProvider; import org.briarproject.api.system.Timer; import org.briarproject.util.OsUtils; -import com.google.inject.AbstractModule; - public class DesktopSystemModule extends AbstractModule { protected void configure() { @@ -15,6 +14,5 @@ public class DesktopSystemModule extends AbstractModule { bind(Timer.class).to(SystemTimer.class); if (OsUtils.isLinux()) bind(SeedProvider.class).to(LinuxSeedProvider.class); - bind(FileUtils.class).to(FileUtilsImpl.class); } } diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/briar-tests/src/org/briarproject/TestDatabaseModule.java index c04b3ba51..429f6a9de 100644 --- a/briar-tests/src/org/briarproject/TestDatabaseModule.java +++ b/briar-tests/src/org/briarproject/TestDatabaseModule.java @@ -3,8 +3,6 @@ package org.briarproject; import com.google.inject.AbstractModule; import org.briarproject.api.db.DatabaseConfig; -import org.briarproject.api.system.FileUtils; -import org.briarproject.system.FileUtilsImpl; import java.io.File; @@ -26,6 +24,5 @@ public class TestDatabaseModule extends AbstractModule { protected void configure() { bind(DatabaseConfig.class).toInstance(config); - bind(FileUtils.class).to(FileUtilsImpl.class); } } diff --git a/briar-tests/src/org/briarproject/TestUtils.java b/briar-tests/src/org/briarproject/TestUtils.java index aeae21eeb..f48b39fc2 100644 --- a/briar-tests/src/org/briarproject/TestUtils.java +++ b/briar-tests/src/org/briarproject/TestUtils.java @@ -1,11 +1,9 @@ package org.briarproject; import org.briarproject.api.UniqueId; +import org.briarproject.util.FileUtils; import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; @@ -15,27 +13,13 @@ public class TestUtils { new AtomicInteger((int) (Math.random() * 1000 * 1000)); private static final Random random = new Random(); - public static void delete(File f) { - if (f.isDirectory()) for (File child : f.listFiles()) delete(child); - f.delete(); - } - - public static void createFile(File f, String s) throws IOException { - f.getParentFile().mkdirs(); - PrintStream out = new PrintStream(new FileOutputStream(f)); - out.print(s); - out.flush(); - out.close(); - } - public static File getTestDirectory() { int name = nextTestDir.getAndIncrement(); - File testDir = new File("test.tmp/" + name); - return testDir; + return new File("test.tmp/" + name); } public static void deleteTestDirectory(File testDir) { - delete(testDir); + FileUtils.deleteFileOrDir(testDir); testDir.getParentFile().delete(); // Delete if empty } diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java index ea698960f..4da4e362d 100644 --- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java +++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java @@ -19,7 +19,6 @@ import org.briarproject.api.messaging.Message; import org.briarproject.api.messaging.MessageId; import org.briarproject.api.transport.Endpoint; import org.briarproject.api.transport.TemporarySecret; -import org.briarproject.system.FileUtilsImpl; import org.briarproject.system.SystemClock; import org.junit.After; import org.junit.Before; @@ -1611,7 +1610,7 @@ public class H2DatabaseTest extends BriarTestCase { private Database open(boolean resume) throws Exception { Database db = new H2Database(new TestDatabaseConfig(testDir, - MAX_SIZE), new FileUtilsImpl(), new SystemClock()); + MAX_SIZE), new SystemClock()); if (!resume) TestUtils.deleteTestDirectory(testDir); db.open(); return db; diff --git a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java index 0ba391422..58cce58ac 100644 --- a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java +++ b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java @@ -5,10 +5,8 @@ import org.briarproject.TestUtils; import org.briarproject.api.ContactId; import org.briarproject.api.plugins.TransportConnectionWriter; import org.briarproject.api.plugins.simplex.SimplexPluginCallback; -import org.briarproject.api.system.FileUtils; import org.briarproject.plugins.ImmediateExecutor; import org.briarproject.plugins.file.RemovableDriveMonitor.Callback; -import org.briarproject.system.FileUtilsImpl; import org.jmock.Expectations; import org.jmock.Mockery; import org.junit.After; @@ -34,7 +32,6 @@ public class RemovableDrivePluginTest extends BriarTestCase { private final File testDir = TestUtils.getTestDirectory(); private final ContactId contactId = new ContactId(234); - private final FileUtils fileUtils = new FileUtilsImpl(); @Before public void setUp() { @@ -61,7 +58,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); assertNull(plugin.createWriter(contactId)); @@ -96,7 +93,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); assertNull(plugin.createWriter(contactId)); @@ -133,7 +130,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); assertNull(plugin.createWriter(contactId)); @@ -172,7 +169,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); assertNull(plugin.createWriter(contactId)); @@ -211,7 +208,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); assertNotNull(plugin.createWriter(contactId)); @@ -254,7 +251,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); TransportConnectionWriter writer = plugin.createWriter(contactId); @@ -293,7 +290,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); plugin.start(); plugin.driveInserted(testDir); @@ -313,7 +310,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { context.mock(RemovableDriveMonitor.class); RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor, - fileUtils, callback, finder, monitor, 0); + callback, finder, monitor, 0); assertFalse(plugin.isPossibleConnectionFilename("abcdefg.dat")); assertFalse(plugin.isPossibleConnectionFilename("abcdefghi.dat")); @@ -341,8 +338,7 @@ public class RemovableDrivePluginTest extends BriarTestCase { }}); RemovableDrivePlugin plugin = new RemovableDrivePlugin( - new ImmediateExecutor(), fileUtils, callback, finder, monitor, - 0); + new ImmediateExecutor(), callback, finder, monitor, 0); plugin.start(); File f = new File(testDir, "abcdefgh.dat");