Skip to content
Snippets Groups Projects
Commit 178c486a authored by akwizgran's avatar akwizgran
Browse files

Put Android plugins and Java SE plugins in separate modules.

parent 9c61e4e0
No related branches found
No related tags found
No related merge requests found
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;
}
};
}
}
......@@ -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();
......
......@@ -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.
......
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;
}
};
}
}
......@@ -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");
......
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;
}
};
}
}
......@@ -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();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment