mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Put Android plugins and Java SE plugins in separate modules.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
63
briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java
Normal file
63
briar-core/src/net/sf/briar/plugins/JavaSePluginsModule.java
Normal file
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user