From 178c486a4a0429dead8e0fdbea5b776145bf3823 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Wed, 24 Apr 2013 21:09:38 +0100 Subject: [PATCH] Put Android plugins and Java SE plugins in separate modules. --- .../net/sf/briar/android/AndroidModule.java | 48 +++++++++++++- .../net/sf/briar/android/BriarService.java | 2 +- .../sf/briar/api/plugins/PluginManager.java | 5 +- .../sf/briar/plugins/JavaSePluginsModule.java | 63 +++++++++++++++++++ .../sf/briar/plugins/PluginManagerImpl.java | 3 +- .../net/sf/briar/plugins/PluginsModule.java | 62 ------------------ .../briar/plugins/PluginManagerImplTest.java | 2 +- 7 files changed, 115 insertions(+), 70 deletions(-) create mode 100644 briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java diff --git a/briar-android/src/net/sf/briar/android/AndroidModule.java b/briar-android/src/net/sf/briar/android/AndroidModule.java index f97e6276ec..37e6c4385d 100644 --- a/briar-android/src/net/sf/briar/android/AndroidModule.java +++ b/briar-android/src/net/sf/briar/android/AndroidModule.java @@ -1,14 +1,30 @@ package net.sf.briar.android; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import net.sf.briar.api.android.AndroidExecutor; import net.sf.briar.api.android.BundleEncrypter; import net.sf.briar.api.android.DatabaseUiExecutor; import net.sf.briar.api.android.ReferenceManager; +import net.sf.briar.api.crypto.CryptoComponent; +import net.sf.briar.api.lifecycle.ShutdownManager; +import net.sf.briar.api.plugins.PluginExecutor; +import net.sf.briar.api.plugins.duplex.DuplexPluginConfig; +import net.sf.briar.api.plugins.duplex.DuplexPluginFactory; +import net.sf.briar.api.plugins.simplex.SimplexPluginConfig; +import net.sf.briar.api.plugins.simplex.SimplexPluginFactory; +import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory; +import net.sf.briar.plugins.tcp.LanTcpPluginFactory; +import net.sf.briar.plugins.tcp.WanTcpPluginFactory; +import android.content.Context; import com.google.inject.AbstractModule; +import com.google.inject.Provides; import com.google.inject.Singleton; public class AndroidModule extends AbstractModule { @@ -17,7 +33,7 @@ public class AndroidModule extends AbstractModule { protected void configure() { bind(AndroidExecutor.class).to(AndroidExecutorImpl.class); bind(BundleEncrypter.class).to(BundleEncrypterImpl.class).in( - Singleton.class); + Singleton.class); bind(ReferenceManager.class).to(ReferenceManagerImpl.class).in( Singleton.class); // Use a single thread so DB accesses from the UI don't overlap, with @@ -25,4 +41,34 @@ public class AndroidModule extends AbstractModule { bind(Executor.class).annotatedWith(DatabaseUiExecutor.class).toInstance( Executors.newSingleThreadExecutor()); } + + @Provides + SimplexPluginConfig getSimplexPluginConfig( + @PluginExecutor ExecutorService pluginExecutor) { + return new SimplexPluginConfig() { + public Collection<SimplexPluginFactory> getFactories() { + return Collections.emptyList(); + } + }; + } + + @Provides + DuplexPluginConfig getDuplexPluginConfig( + @PluginExecutor ExecutorService pluginExecutor, + AndroidExecutor androidExecutor, Context appContext, + CryptoComponent crypto, ShutdownManager shutdownManager) { + DuplexPluginFactory droidtooth = new DroidtoothPluginFactory( + pluginExecutor, androidExecutor, appContext, + crypto.getSecureRandom()); + DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor); + DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor, + shutdownManager); + final Collection<DuplexPluginFactory> factories = + Arrays.asList(droidtooth, lan, wan); + return new DuplexPluginConfig() { + public Collection<DuplexPluginFactory> getFactories() { + return factories; + } + }; + } } diff --git a/briar-android/src/net/sf/briar/android/BriarService.java b/briar-android/src/net/sf/briar/android/BriarService.java index afaa6584ee..85339923cc 100644 --- a/briar-android/src/net/sf/briar/android/BriarService.java +++ b/briar-android/src/net/sf/briar/android/BriarService.java @@ -103,7 +103,7 @@ public class BriarService extends RoboService { } keyManager.start(); if(LOG.isLoggable(INFO)) LOG.info("Key manager started"); - int pluginsStarted = pluginManager.start(this); + int pluginsStarted = pluginManager.start(); if(LOG.isLoggable(INFO)) LOG.info(pluginsStarted + " plugins started"); startupLatch.countDown(); diff --git a/briar-api/src/net/sf/briar/api/plugins/PluginManager.java b/briar-api/src/net/sf/briar/api/plugins/PluginManager.java index 61c7678a21..297340661e 100644 --- a/briar-api/src/net/sf/briar/api/plugins/PluginManager.java +++ b/briar-api/src/net/sf/briar/api/plugins/PluginManager.java @@ -3,7 +3,6 @@ package net.sf.briar.api.plugins; import java.util.Collection; import net.sf.briar.api.plugins.duplex.DuplexPlugin; -import android.content.Context; /** * Responsible for starting transport plugins at startup, stopping them at @@ -14,9 +13,9 @@ public interface PluginManager { /** * Starts the plugins and returns the number of plugins successfully * started. This method must not be called until the database has been - * opened. The appContext argument is null on non-Android platforms. + * opened. */ - int start(Context appContext); + int start(); /** * Stops the plugins and returns the number of plugins successfully stopped. diff --git a/briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java b/briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java new file mode 100644 index 0000000000..894f99df46 --- /dev/null +++ b/briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java @@ -0,0 +1,63 @@ +package net.sf.briar.plugins; + +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.ExecutorService; + +import net.sf.briar.api.crypto.CryptoComponent; +import net.sf.briar.api.lifecycle.ShutdownManager; +import net.sf.briar.api.plugins.PluginExecutor; +import net.sf.briar.api.plugins.duplex.DuplexPluginConfig; +import net.sf.briar.api.plugins.duplex.DuplexPluginFactory; +import net.sf.briar.api.plugins.simplex.SimplexPluginConfig; +import net.sf.briar.api.plugins.simplex.SimplexPluginFactory; +import net.sf.briar.api.reliability.ReliabilityLayerFactory; +import net.sf.briar.plugins.bluetooth.BluetoothPluginFactory; +import net.sf.briar.plugins.file.RemovableDrivePluginFactory; +import net.sf.briar.plugins.modem.ModemPluginFactory; +import net.sf.briar.plugins.tcp.LanTcpPluginFactory; +import net.sf.briar.plugins.tcp.WanTcpPluginFactory; + +import com.google.inject.AbstractModule; +import com.google.inject.Provides; + +public class JavaSePluginsModule extends AbstractModule { + + @Override + public void configure() {} + + @Provides + SimplexPluginConfig getSimplexPluginConfig( + @PluginExecutor ExecutorService pluginExecutor) { + SimplexPluginFactory removable = + new RemovableDrivePluginFactory(pluginExecutor); + final Collection<SimplexPluginFactory> factories = + Arrays.asList(removable); + return new SimplexPluginConfig() { + public Collection<SimplexPluginFactory> getFactories() { + return factories; + } + }; + } + + @Provides + DuplexPluginConfig getDuplexPluginConfig( + @PluginExecutor ExecutorService pluginExecutor, + CryptoComponent crypto, ReliabilityLayerFactory reliabilityFactory, + ShutdownManager shutdownManager) { + DuplexPluginFactory bluetooth = new BluetoothPluginFactory( + pluginExecutor, crypto.getSecureRandom()); + DuplexPluginFactory modem = new ModemPluginFactory(pluginExecutor, + reliabilityFactory); + DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor); + DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor, + shutdownManager); + final Collection<DuplexPluginFactory> factories = + Arrays.asList(bluetooth, modem, lan, wan); + return new DuplexPluginConfig() { + public Collection<DuplexPluginFactory> getFactories() { + return factories; + } + }; + } +} diff --git a/briar-core/src/net/sf/briar/plugins/PluginManagerImpl.java b/briar-core/src/net/sf/briar/plugins/PluginManagerImpl.java index e7d6f070ae..fcc486c4fc 100644 --- a/briar-core/src/net/sf/briar/plugins/PluginManagerImpl.java +++ b/briar-core/src/net/sf/briar/plugins/PluginManagerImpl.java @@ -38,7 +38,6 @@ import net.sf.briar.api.plugins.simplex.SimplexTransportReader; import net.sf.briar.api.plugins.simplex.SimplexTransportWriter; import net.sf.briar.api.transport.ConnectionDispatcher; import net.sf.briar.api.ui.UiCallback; -import android.content.Context; import com.google.inject.Inject; @@ -77,7 +76,7 @@ class PluginManagerImpl implements PluginManager { duplexPlugins = new ArrayList<DuplexPlugin>(); } - public synchronized int start(Context appContext) { + public synchronized int start() { Set<TransportId> ids = new HashSet<TransportId>(); // Instantiate and start the simplex plugins if(LOG.isLoggable(INFO)) LOG.info("Starting simplex plugins"); diff --git a/briar-core/src/net/sf/briar/plugins/PluginsModule.java b/briar-core/src/net/sf/briar/plugins/PluginsModule.java index 63c3ee0bb3..3653e6bb2b 100644 --- a/briar-core/src/net/sf/briar/plugins/PluginsModule.java +++ b/briar-core/src/net/sf/briar/plugins/PluginsModule.java @@ -1,31 +1,12 @@ package net.sf.briar.plugins; -import java.util.ArrayList; -import java.util.Collection; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import net.sf.briar.api.android.AndroidExecutor; -import net.sf.briar.api.crypto.CryptoComponent; -import net.sf.briar.api.lifecycle.ShutdownManager; import net.sf.briar.api.plugins.PluginExecutor; import net.sf.briar.api.plugins.PluginManager; -import net.sf.briar.api.plugins.duplex.DuplexPluginConfig; -import net.sf.briar.api.plugins.duplex.DuplexPluginFactory; -import net.sf.briar.api.plugins.simplex.SimplexPluginConfig; -import net.sf.briar.api.plugins.simplex.SimplexPluginFactory; -import net.sf.briar.api.reliability.ReliabilityLayerFactory; -import net.sf.briar.plugins.bluetooth.BluetoothPluginFactory; -import net.sf.briar.plugins.droidtooth.DroidtoothPluginFactory; -import net.sf.briar.plugins.file.RemovableDrivePluginFactory; -import net.sf.briar.plugins.modem.ModemPluginFactory; -import net.sf.briar.plugins.tcp.LanTcpPluginFactory; -import net.sf.briar.plugins.tcp.WanTcpPluginFactory; -import net.sf.briar.util.OsUtils; -import android.content.Context; import com.google.inject.AbstractModule; -import com.google.inject.Provides; import com.google.inject.Singleton; public class PluginsModule extends AbstractModule { @@ -40,47 +21,4 @@ public class PluginsModule extends AbstractModule { PluginManagerImpl.class).in(Singleton.class); bind(Poller.class).to(PollerImpl.class); } - - @Provides - SimplexPluginConfig getSimplexPluginConfig( - @PluginExecutor ExecutorService pluginExecutor) { - final Collection<SimplexPluginFactory> factories = - new ArrayList<SimplexPluginFactory>(); - if(!OsUtils.isAndroid()) { - // No simplex plugins for Android - } else { - factories.add(new RemovableDrivePluginFactory(pluginExecutor)); - } - return new SimplexPluginConfig() { - public Collection<SimplexPluginFactory> getFactories() { - return factories; - } - }; - } - - @Provides - DuplexPluginConfig getDuplexPluginConfig( - @PluginExecutor ExecutorService pluginExecutor, - AndroidExecutor androidExecutor, Context appContext, - ReliabilityLayerFactory reliabilityFactory, - ShutdownManager shutdownManager, CryptoComponent crypto) { - final Collection<DuplexPluginFactory> factories = - new ArrayList<DuplexPluginFactory>(); - if(OsUtils.isAndroid()) { - factories.add(new DroidtoothPluginFactory(pluginExecutor, - androidExecutor, appContext, crypto.getSecureRandom())); - } else { - factories.add(new BluetoothPluginFactory(pluginExecutor, - crypto.getSecureRandom())); - factories.add(new ModemPluginFactory(pluginExecutor, - reliabilityFactory)); - } - factories.add(new LanTcpPluginFactory(pluginExecutor)); - factories.add(new WanTcpPluginFactory(pluginExecutor, shutdownManager)); - return new DuplexPluginConfig() { - public Collection<DuplexPluginFactory> getFactories() { - return factories; - } - }; - } } diff --git a/briar-tests/src/net/sf/briar/plugins/PluginManagerImplTest.java b/briar-tests/src/net/sf/briar/plugins/PluginManagerImplTest.java index 5b4ee5b55a..ed25414216 100644 --- a/briar-tests/src/net/sf/briar/plugins/PluginManagerImplTest.java +++ b/briar-tests/src/net/sf/briar/plugins/PluginManagerImplTest.java @@ -126,7 +126,7 @@ public class PluginManagerImplTest extends BriarTestCase { androidExecutor, simplexPluginConfig, duplexPluginConfig, db, poller, dispatcher, uiCallback); // Two plugins should be started and stopped - assertEquals(2, p.start(null)); + assertEquals(2, p.start()); assertEquals(2, p.stop()); context.assertIsSatisfied(); } -- GitLab