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