mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 21:59:54 +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;
|
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.Executor;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
import net.sf.briar.api.android.AndroidExecutor;
|
import net.sf.briar.api.android.AndroidExecutor;
|
||||||
import net.sf.briar.api.android.BundleEncrypter;
|
import net.sf.briar.api.android.BundleEncrypter;
|
||||||
import net.sf.briar.api.android.DatabaseUiExecutor;
|
import net.sf.briar.api.android.DatabaseUiExecutor;
|
||||||
import net.sf.briar.api.android.ReferenceManager;
|
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.AbstractModule;
|
||||||
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
public class AndroidModule extends AbstractModule {
|
public class AndroidModule extends AbstractModule {
|
||||||
@@ -17,7 +33,7 @@ public class AndroidModule extends AbstractModule {
|
|||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(AndroidExecutor.class).to(AndroidExecutorImpl.class);
|
bind(AndroidExecutor.class).to(AndroidExecutorImpl.class);
|
||||||
bind(BundleEncrypter.class).to(BundleEncrypterImpl.class).in(
|
bind(BundleEncrypter.class).to(BundleEncrypterImpl.class).in(
|
||||||
Singleton.class);
|
Singleton.class);
|
||||||
bind(ReferenceManager.class).to(ReferenceManagerImpl.class).in(
|
bind(ReferenceManager.class).to(ReferenceManagerImpl.class).in(
|
||||||
Singleton.class);
|
Singleton.class);
|
||||||
// Use a single thread so DB accesses from the UI don't overlap, with
|
// 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(
|
bind(Executor.class).annotatedWith(DatabaseUiExecutor.class).toInstance(
|
||||||
Executors.newSingleThreadExecutor());
|
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();
|
keyManager.start();
|
||||||
if(LOG.isLoggable(INFO)) LOG.info("Key manager started");
|
if(LOG.isLoggable(INFO)) LOG.info("Key manager started");
|
||||||
int pluginsStarted = pluginManager.start(this);
|
int pluginsStarted = pluginManager.start();
|
||||||
if(LOG.isLoggable(INFO))
|
if(LOG.isLoggable(INFO))
|
||||||
LOG.info(pluginsStarted + " plugins started");
|
LOG.info(pluginsStarted + " plugins started");
|
||||||
startupLatch.countDown();
|
startupLatch.countDown();
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package net.sf.briar.api.plugins;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Responsible for starting transport plugins at startup, stopping them at
|
* 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
|
* Starts the plugins and returns the number of plugins successfully
|
||||||
* started. This method must not be called until the database has been
|
* 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.
|
* 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.plugins.simplex.SimplexTransportWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionDispatcher;
|
import net.sf.briar.api.transport.ConnectionDispatcher;
|
||||||
import net.sf.briar.api.ui.UiCallback;
|
import net.sf.briar.api.ui.UiCallback;
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
@@ -77,7 +76,7 @@ class PluginManagerImpl implements PluginManager {
|
|||||||
duplexPlugins = new ArrayList<DuplexPlugin>();
|
duplexPlugins = new ArrayList<DuplexPlugin>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized int start(Context appContext) {
|
public synchronized int start() {
|
||||||
Set<TransportId> ids = new HashSet<TransportId>();
|
Set<TransportId> ids = new HashSet<TransportId>();
|
||||||
// Instantiate and start the simplex plugins
|
// Instantiate and start the simplex plugins
|
||||||
if(LOG.isLoggable(INFO)) LOG.info("Starting simplex plugins");
|
if(LOG.isLoggable(INFO)) LOG.info("Starting simplex plugins");
|
||||||
|
|||||||
@@ -1,31 +1,12 @@
|
|||||||
package net.sf.briar.plugins;
|
package net.sf.briar.plugins;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
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.PluginExecutor;
|
||||||
import net.sf.briar.api.plugins.PluginManager;
|
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.AbstractModule;
|
||||||
import com.google.inject.Provides;
|
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
public class PluginsModule extends AbstractModule {
|
public class PluginsModule extends AbstractModule {
|
||||||
@@ -40,47 +21,4 @@ public class PluginsModule extends AbstractModule {
|
|||||||
PluginManagerImpl.class).in(Singleton.class);
|
PluginManagerImpl.class).in(Singleton.class);
|
||||||
bind(Poller.class).to(PollerImpl.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,
|
androidExecutor, simplexPluginConfig, duplexPluginConfig, db,
|
||||||
poller, dispatcher, uiCallback);
|
poller, dispatcher, uiCallback);
|
||||||
// Two plugins should be started and stopped
|
// Two plugins should be started and stopped
|
||||||
assertEquals(2, p.start(null));
|
assertEquals(2, p.start());
|
||||||
assertEquals(2, p.stop());
|
assertEquals(2, p.stop());
|
||||||
context.assertIsSatisfied();
|
context.assertIsSatisfied();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user