diff --git a/briar-android/src/org/briarproject/android/AndroidComponent.java b/briar-android/src/org/briarproject/android/AndroidComponent.java index 5be1919a35e652132ec666ee2d90860cfc17ee75..27f156e9156d49da3c5d903f3be995669bd05588 100644 --- a/briar-android/src/org/briarproject/android/AndroidComponent.java +++ b/briar-android/src/org/briarproject/android/AndroidComponent.java @@ -1,5 +1,6 @@ package org.briarproject.android; +import org.briarproject.CoreComponent; import org.briarproject.android.contact.ContactListFragment; import org.briarproject.android.contact.ConversationActivity; import org.briarproject.android.forum.AvailableForumsActivity; @@ -14,38 +15,12 @@ import org.briarproject.android.identity.CreateIdentityActivity; import org.briarproject.android.invitation.AddContactActivity; import org.briarproject.android.panic.PanicPreferencesActivity; import org.briarproject.android.panic.PanicResponderActivity; -import org.briarproject.clients.ClientsModule; -import org.briarproject.contact.ContactModule; -import org.briarproject.crypto.CryptoModule; -import org.briarproject.data.DataModule; -import org.briarproject.db.DatabaseModule; -import org.briarproject.event.EventModule; -import org.briarproject.forum.ForumModule; -import org.briarproject.identity.IdentityModule; -import org.briarproject.invitation.InvitationModule; -import org.briarproject.lifecycle.LifecycleModule; -import org.briarproject.messaging.MessagingModule; -import org.briarproject.plugins.AndroidPluginsModule; -import org.briarproject.properties.PropertiesModule; -import org.briarproject.reliability.ReliabilityModule; -import org.briarproject.settings.SettingsModule; -import org.briarproject.sync.SyncModule; -import org.briarproject.system.AndroidSystemModule; -import org.briarproject.transport.TransportModule; - -import javax.inject.Singleton; import dagger.Component; -@Singleton +@ApplicationScope @Component( - modules = {AppModule.class, AndroidModule.class, DatabaseModule.class, - CryptoModule.class, LifecycleModule.class, - ReliabilityModule.class, MessagingModule.class, - InvitationModule.class, ForumModule.class, IdentityModule.class, - EventModule.class, DataModule.class, ContactModule.class, - AndroidSystemModule.class, AndroidPluginsModule.class, - PropertiesModule.class, TransportModule.class, SyncModule.class, - SettingsModule.class, ClientsModule.class}) + dependencies = {CoreComponent.class}, + modules = {AppModule.class, AndroidModule.class}) public interface AndroidComponent { void inject(SplashScreenActivity activity); void inject(SetupActivity activity); diff --git a/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java b/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java new file mode 100644 index 0000000000000000000000000000000000000000..b14a785933480e26bb38de7cc3940a595b358249 --- /dev/null +++ b/briar-android/src/org/briarproject/android/AndroidEagerSingletons.java @@ -0,0 +1,8 @@ +package org.briarproject.android; + +public class AndroidEagerSingletons { + + public static void initEagerSingletons(AndroidComponent c) { + c.inject(new AndroidModule.EagerSingletons()); + } +} diff --git a/briar-android/src/org/briarproject/android/AndroidModule.java b/briar-android/src/org/briarproject/android/AndroidModule.java index 9343a31e82017fa39a9b3f2a32774ce119645a63..53ea73f15ba22322e31391eef9ea3f3366aa5ad4 100644 --- a/briar-android/src/org/briarproject/android/AndroidModule.java +++ b/briar-android/src/org/briarproject/android/AndroidModule.java @@ -1,138 +1,37 @@ package org.briarproject.android; -import android.app.Application; - -import org.briarproject.api.android.AndroidExecutor; import org.briarproject.api.android.AndroidNotificationManager; import org.briarproject.api.android.ReferenceManager; -import org.briarproject.api.contact.ContactManager; -import org.briarproject.api.crypto.SecretKey; -import org.briarproject.api.db.DatabaseConfig; import org.briarproject.api.event.EventBus; import org.briarproject.api.lifecycle.LifecycleManager; -import org.briarproject.api.messaging.MessagingManager; -import org.briarproject.api.plugins.PluginManager; -import org.briarproject.api.properties.TransportPropertyManager; -import org.briarproject.api.sync.ValidationManager; -import org.briarproject.api.transport.KeyManager; -import org.briarproject.api.ui.UiCallback; -import org.briarproject.messaging.PrivateMessageValidator; -import org.briarproject.properties.TransportPropertyValidator; - -import java.io.File; import javax.inject.Inject; -import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static android.content.Context.MODE_PRIVATE; - @Module public class AndroidModule { static class EagerSingletons { - // Load all relevant eager singletons and their references - @Inject - KeyManager keyManager; - @Inject - ValidationManager validationManager; - @Inject - PluginManager pluginManager; @Inject AndroidNotificationManager androidNotificationManager; - @Inject - TransportPropertyManager transportPropertyManager; - @Inject - MessagingManager messagingManager; - @Inject - PrivateMessageValidator privateMessageValidator; - @Inject - TransportPropertyValidator transportPropertyValidator; - - - } - - static void injectEager(AndroidComponent c) { - c.inject(new EagerSingletons()); - } - - private final UiCallback uiCallback; - - public AndroidModule() { - // Use a dummy UI callback - uiCallback = new UiCallback() { - - public int showChoice(String[] options, String... message) { - throw new UnsupportedOperationException(); - } - - public boolean showConfirmationMessage(String... message) { - throw new UnsupportedOperationException(); - } - - public void showMessage(String... message) { - throw new UnsupportedOperationException(); - } - }; - } - - @Provides - UiCallback provideUICallback() { - return uiCallback; } @Provides - @Singleton + @ApplicationScope ReferenceManager provideReferenceManager() { return new ReferenceManagerImpl(); } @Provides - @Singleton - AndroidExecutor provideAndroidExecutor( - AndroidExecutorImpl androidExecutor) { - return androidExecutor; - } - - @Provides - @Singleton - DatabaseConfig provideDatabaseConfig(final Application app) { - final File dir = app.getApplicationContext().getDir("db", MODE_PRIVATE); - return new DatabaseConfig() { - - private volatile SecretKey key = null; - - public boolean databaseExists() { - return dir.isDirectory() && dir.listFiles().length > 0; - } - - public File getDatabaseDirectory() { - return dir; - } - - public void setEncryptionKey(SecretKey key) { - this.key = key; - } - - public SecretKey getEncryptionKey() { - return key; - } - - public long getMaxSize() { - return Long.MAX_VALUE; - } - }; - } - - @Provides - @Singleton + @ApplicationScope AndroidNotificationManager provideAndroidNotificationManager( LifecycleManager lifecycleManager, EventBus eventBus, AndroidNotificationManagerImpl notificationManager) { lifecycleManager.register(notificationManager); eventBus.addListener(notificationManager); + return notificationManager; } diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java index 8a0561f4d2bf1ec5bab72c997e9d5828c2b717a7..64ae4e90e3fad024ff2c4dcfda1a011879b2aa64 100644 --- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java @@ -12,7 +12,7 @@ import android.support.v4.app.TaskStackBuilder; import org.briarproject.R; import org.briarproject.android.contact.ConversationActivity; import org.briarproject.android.forum.ForumActivity; -import org.briarproject.api.android.AndroidExecutor; +import org.briarproject.api.android.PlatformExecutor; import org.briarproject.api.android.AndroidNotificationManager; import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.db.DbException; @@ -65,7 +65,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, private final SettingsManager settingsManager; private final MessagingManager messagingManager; private final ForumManager forumManager; - private final AndroidExecutor androidExecutor; + private final PlatformExecutor platformExecutor; private final Context appContext; // The following must only be accessed on the main UI thread @@ -82,13 +82,13 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, @Inject public AndroidNotificationManagerImpl(@DatabaseExecutor Executor dbExecutor, SettingsManager settingsManager, MessagingManager messagingManager, - ForumManager forumManager, AndroidExecutor androidExecutor, + ForumManager forumManager, PlatformExecutor platformExecutor, Application app) { this.dbExecutor = dbExecutor; this.settingsManager = settingsManager; this.messagingManager = messagingManager; this.forumManager = forumManager; - this.androidExecutor = androidExecutor; + this.platformExecutor = platformExecutor; appContext = app.getApplicationContext(); } @@ -118,7 +118,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } private void clearNotifications() { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { clearPrivateMessageNotification(); clearForumPostNotification(); @@ -155,7 +155,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void showPrivateMessageNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { Integer count = contactCounts.get(g); if (count == null) contactCounts.put(g, 1); @@ -168,7 +168,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void clearPrivateMessageNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { Integer count = contactCounts.remove(g); if (count == null) return; // Already cleared @@ -239,7 +239,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void showForumPostNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { Integer count = forumCounts.get(g); if (count == null) forumCounts.put(g, 1); @@ -252,7 +252,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void clearForumPostNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { Integer count = forumCounts.remove(g); if (count == null) return; // Already cleared @@ -311,7 +311,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void blockNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { visibleGroup = g; } @@ -319,7 +319,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, } public void unblockNotification(final GroupId g) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { if (g.equals(visibleGroup)) visibleGroup = null; } diff --git a/briar-android/src/org/briarproject/android/AppModule.java b/briar-android/src/org/briarproject/android/AppModule.java index d3779d1a1a7a71dd73e5383bcfec451366746089..b48d752e3497c589f802a091c0980e50de4fd02b 100644 --- a/briar-android/src/org/briarproject/android/AppModule.java +++ b/briar-android/src/org/briarproject/android/AppModule.java @@ -1,9 +1,6 @@ package org.briarproject.android; import android.app.Application; -import android.content.Context; - -import javax.inject.Singleton; import dagger.Module; import dagger.Provides; @@ -18,7 +15,7 @@ public class AppModule { } @Provides - @Singleton + @ApplicationScope Application providesApplication() { return application; } diff --git a/briar-android/src/org/briarproject/android/ApplicationScope.java b/briar-android/src/org/briarproject/android/ApplicationScope.java new file mode 100644 index 0000000000000000000000000000000000000000..ad1fb2a4aa65911e19087fcf2550bd52b468d187 --- /dev/null +++ b/briar-android/src/org/briarproject/android/ApplicationScope.java @@ -0,0 +1,11 @@ +package org.briarproject.android; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Scope; + +@Scope +@Retention(RetentionPolicy.RUNTIME) +public @interface ApplicationScope { +} diff --git a/briar-android/src/org/briarproject/android/BriarApplication.java b/briar-android/src/org/briarproject/android/BriarApplication.java index ac670b9efabc03b0aee52b32b9d265449d22a4b7..6a01e57fb8bffb31ebabb4f71f2cf0eaa50c26a7 100644 --- a/briar-android/src/org/briarproject/android/BriarApplication.java +++ b/briar-android/src/org/briarproject/android/BriarApplication.java @@ -6,6 +6,13 @@ import java.util.logging.Logger; import android.app.Application; import android.content.Context; +import org.briarproject.CoreComponent; +import org.briarproject.CoreEagerSingletons; +import org.briarproject.DaggerCoreComponent; +import org.briarproject.plugins.PluginsModuleExtension; +import org.briarproject.system.PlatformModuleExtension; +import org.briarproject.system.SystemModuleExtension; + public class BriarApplication extends Application { private static final Logger LOG = @@ -23,14 +30,21 @@ public class BriarApplication extends Application { CrashHandler newHandler = new CrashHandler(ctx, oldHandler); Thread.setDefaultUncaughtExceptionHandler(newHandler); + CoreComponent coreComponent = DaggerCoreComponent.builder() + .systemModule(new SystemModuleExtension(this)) + .platformModule(new PlatformModuleExtension(this)) + .pluginsModule(new PluginsModuleExtension(this)) + .build(); + applicationComponent = DaggerAndroidComponent.builder() .appModule(new AppModule(this)) - .androidModule(new AndroidModule()) + .coreComponent(coreComponent) .build(); - // We need to load the eager singletons directly after making the - // dependency graph - AndroidModule.injectEager(applicationComponent); + // We need to load the eager singletons directly after making the + // dependency graphs + CoreEagerSingletons.initEagerSingletons(coreComponent); + AndroidEagerSingletons.initEagerSingletons(applicationComponent); } public AndroidComponent getApplicationComponent() { diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java index 3d88616f3fa17b92d98cc19e057d4fa6c69e2f07..2a2bd6522fda283a4d2d230c599c656a0d53eab9 100644 --- a/briar-android/src/org/briarproject/android/BriarService.java +++ b/briar-android/src/org/briarproject/android/BriarService.java @@ -12,7 +12,7 @@ import android.os.IBinder; import android.support.v4.app.NotificationCompat; import org.briarproject.R; -import org.briarproject.api.android.AndroidExecutor; +import org.briarproject.api.android.PlatformExecutor; import org.briarproject.api.db.DatabaseConfig; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.lifecycle.LifecycleManager.StartResult; @@ -48,7 +48,7 @@ public class BriarService extends Service { // Fields that are accessed from background threads must be volatile @Inject protected volatile LifecycleManager lifecycleManager; - @Inject protected volatile AndroidExecutor androidExecutor; + @Inject protected volatile PlatformExecutor platformExecutor; private volatile boolean started = false; @Override @@ -106,7 +106,7 @@ public class BriarService extends Service { } private void showStartupFailureNotification(final StartResult result) { - androidExecutor.execute(new Runnable() { + platformExecutor.execute(new Runnable() { public void run() { NotificationCompat.Builder b = new NotificationCompat.Builder(BriarService.this); diff --git a/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java index 678725df869cfcd4ac8abd20abced9b6b3e43524..9b6f5319f930a75e72f49ff3c045a8edfa2e1a98 100644 --- a/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java +++ b/briar-android/src/org/briarproject/plugins/AndroidPluginsModule.java @@ -4,14 +4,12 @@ import android.app.Application; import android.content.Context; -import org.briarproject.api.android.AndroidExecutor; +import org.briarproject.api.android.PlatformExecutor; import org.briarproject.api.event.EventBus; import org.briarproject.api.lifecycle.IoExecutor; import org.briarproject.api.plugins.BackoffFactory; import org.briarproject.api.plugins.duplex.DuplexPluginConfig; import org.briarproject.api.plugins.duplex.DuplexPluginFactory; -import org.briarproject.api.plugins.simplex.SimplexPluginConfig; -import org.briarproject.api.plugins.simplex.SimplexPluginFactory; import org.briarproject.api.system.LocationUtils; import org.briarproject.plugins.droidtooth.DroidtoothPluginFactory; import org.briarproject.plugins.tcp.AndroidLanTcpPluginFactory; @@ -20,32 +18,22 @@ import org.briarproject.plugins.tor.TorPluginFactory; import java.security.SecureRandom; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.concurrent.Executor; import dagger.Module; import dagger.Provides; @Module -public class AndroidPluginsModule extends PluginsModule { +public class AndroidPluginsModule { @Provides - SimplexPluginConfig getSimplexPluginConfig() { - return new SimplexPluginConfig() { - public Collection<SimplexPluginFactory> getFactories() { - return Collections.emptyList(); - } - }; - } - - @Provides - DuplexPluginConfig getDuplexPluginConfig(@IoExecutor Executor ioExecutor, - AndroidExecutor androidExecutor, Application app, + DuplexPluginConfig provideDuplexPluginConfig(@IoExecutor Executor ioExecutor, + PlatformExecutor platformExecutor, Application app, SecureRandom random, BackoffFactory backoffFactory, LocationUtils locationUtils, EventBus eventBus) { Context appContext = app.getApplicationContext(); DuplexPluginFactory bluetooth = new DroidtoothPluginFactory(ioExecutor, - androidExecutor, appContext, random, backoffFactory); + platformExecutor, appContext, random, backoffFactory); DuplexPluginFactory tor = new TorPluginFactory(ioExecutor, appContext, locationUtils, eventBus); DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(ioExecutor, diff --git a/briar-android/src/org/briarproject/plugins/PluginsModuleExtension.java b/briar-android/src/org/briarproject/plugins/PluginsModuleExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..b2b408f8d6f44c1f0c43200511b8e3f872051280 --- /dev/null +++ b/briar-android/src/org/briarproject/plugins/PluginsModuleExtension.java @@ -0,0 +1,50 @@ +package org.briarproject.plugins; + +import android.app.Application; +import android.content.Context; + +import org.briarproject.api.android.PlatformExecutor; +import org.briarproject.api.event.EventBus; +import org.briarproject.api.lifecycle.IoExecutor; +import org.briarproject.api.plugins.BackoffFactory; +import org.briarproject.api.plugins.duplex.DuplexPluginConfig; +import org.briarproject.api.plugins.duplex.DuplexPluginFactory; +import org.briarproject.api.system.LocationUtils; +import org.briarproject.plugins.droidtooth.DroidtoothPluginFactory; +import org.briarproject.plugins.tcp.AndroidLanTcpPluginFactory; +import org.briarproject.plugins.tor.TorPluginFactory; + +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.Executor; + +public class PluginsModuleExtension extends PluginsModule { + + private final Application app; + + public PluginsModuleExtension(Application app) { + this.app = app; + } + + @Override + public DuplexPluginConfig provideDuplexPluginConfig( + @IoExecutor Executor ioExecutor, PlatformExecutor platformExecutor, + SecureRandom random, BackoffFactory backoffFactory, + LocationUtils locationUtils, EventBus eventBus) { + Context appContext = app.getApplicationContext(); + DuplexPluginFactory bluetooth = new DroidtoothPluginFactory(ioExecutor, + platformExecutor, appContext, random, backoffFactory); + DuplexPluginFactory tor = new TorPluginFactory(ioExecutor, appContext, + locationUtils, eventBus); + DuplexPluginFactory lan = new AndroidLanTcpPluginFactory(ioExecutor, + backoffFactory, appContext); + final Collection<DuplexPluginFactory> factories = + Arrays.asList(bluetooth, tor, lan); + return new DuplexPluginConfig() { + public Collection<DuplexPluginFactory> getFactories() { + return factories; + } + }; + } +} diff --git a/briar-android/src/org/briarproject/android/AndroidExecutorImpl.java b/briar-android/src/org/briarproject/system/AndroidExecutorImpl.java similarity index 85% rename from briar-android/src/org/briarproject/android/AndroidExecutorImpl.java rename to briar-android/src/org/briarproject/system/AndroidExecutorImpl.java index e46e7193bad9dfc7fc0ab75d7d3af109ed109897..b119fb8c7babd63ab09f258517486b7988836775 100644 --- a/briar-android/src/org/briarproject/android/AndroidExecutorImpl.java +++ b/briar-android/src/org/briarproject/system/AndroidExecutorImpl.java @@ -1,4 +1,4 @@ -package org.briarproject.android; +package org.briarproject.system; import android.app.Application; import android.content.Context; @@ -6,7 +6,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; -import org.briarproject.api.android.AndroidExecutor; +import org.briarproject.api.android.PlatformExecutor; import java.util.concurrent.Callable; import java.util.concurrent.Future; @@ -14,11 +14,10 @@ import java.util.concurrent.FutureTask; import javax.inject.Inject; -class AndroidExecutorImpl implements AndroidExecutor { +class AndroidExecutorImpl implements PlatformExecutor { private final Handler handler; - @Inject AndroidExecutorImpl(Application app) { Context ctx = app.getApplicationContext(); handler = new FutureTaskHandler(ctx.getMainLooper()); diff --git a/briar-android/src/org/briarproject/system/PlatformModuleExtension.java b/briar-android/src/org/briarproject/system/PlatformModuleExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..dc2ae6a4ac61fc66c24ba56af98e1daed614865c --- /dev/null +++ b/briar-android/src/org/briarproject/system/PlatformModuleExtension.java @@ -0,0 +1,78 @@ +package org.briarproject.system; + +import android.app.Application; +import android.content.Context; + +import org.briarproject.PlatformModule; +import org.briarproject.android.ApplicationScope; +import org.briarproject.api.android.PlatformExecutor; +import org.briarproject.api.crypto.SecretKey; +import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.ui.UiCallback; + +import java.io.File; + +public class PlatformModuleExtension extends PlatformModule { + + private final UiCallback uiCallback; + private final Application app; + + public PlatformModuleExtension(Application app) { + this.app = app; + // Use a dummy UI callback + uiCallback = new UiCallback() { + + public int showChoice(String[] options, String... message) { + throw new UnsupportedOperationException(); + } + + public boolean showConfirmationMessage(String... message) { + throw new UnsupportedOperationException(); + } + + public void showMessage(String... message) { + throw new UnsupportedOperationException(); + } + }; + } + + @Override + public UiCallback provideUICallback() { + return uiCallback; + } + + @Override + @ApplicationScope + public DatabaseConfig provideDatabaseConfig() { + final File dir = app.getApplicationContext().getDir("db", Context.MODE_PRIVATE); + return new DatabaseConfig() { + + private volatile SecretKey key = null; + + public boolean databaseExists() { + return dir.isDirectory() && dir.listFiles().length > 0; + } + + public File getDatabaseDirectory() { + return dir; + } + + public void setEncryptionKey(SecretKey key) { + this.key = key; + } + + public SecretKey getEncryptionKey() { + return key; + } + + public long getMaxSize() { + return Long.MAX_VALUE; + } + }; + } + + @Override + public PlatformExecutor providePlatformExecutor() { + return new AndroidExecutorImpl(app); + } +} diff --git a/briar-android/src/org/briarproject/system/SystemModuleExtension.java b/briar-android/src/org/briarproject/system/SystemModuleExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..72ea338b4442a44f0327bc1e943aaa6e42c6e39e --- /dev/null +++ b/briar-android/src/org/briarproject/system/SystemModuleExtension.java @@ -0,0 +1,32 @@ +package org.briarproject.system; + + +import android.app.Application; + +import org.briarproject.api.system.Clock; +import org.briarproject.api.system.LocationUtils; +import org.briarproject.api.system.SeedProvider; +import org.briarproject.api.system.Timer; + +import dagger.Module; +import dagger.Provides; + +public class SystemModuleExtension extends SystemModule { + + private final Application app; + + public SystemModuleExtension(final Application app) { + this.app = app; + } + + @Override + public SeedProvider provideSeedProvider() { + return new AndroidSeedProvider(app); + } + + @Override + public LocationUtils provideLocationUtils() { + return new AndroidLocationUtils(app); + } + +} diff --git a/briar-api/src/org/briarproject/api/android/AndroidExecutor.java b/briar-api/src/org/briarproject/api/android/PlatformExecutor.java similarity index 92% rename from briar-api/src/org/briarproject/api/android/AndroidExecutor.java rename to briar-api/src/org/briarproject/api/android/PlatformExecutor.java index 635702d0154d9a1ffe85ee8644c85dbd47071dba..4cd309374f6dbe3724c05eb939cde7044ea246fb 100644 --- a/briar-api/src/org/briarproject/api/android/AndroidExecutor.java +++ b/briar-api/src/org/briarproject/api/android/PlatformExecutor.java @@ -7,7 +7,7 @@ import java.util.concurrent.Future; * Enables background threads to make Android API calls that must be made from * a thread with a message queue. */ -public interface AndroidExecutor { +public interface PlatformExecutor { /** * Runs the given task on the main UI thread and returns a Future for diff --git a/briar-core/src/org/briarproject/CoreComponent.java b/briar-core/src/org/briarproject/CoreComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..9f7c41df040b7f9a0303f469f4c9262e7c072dac --- /dev/null +++ b/briar-core/src/org/briarproject/CoreComponent.java @@ -0,0 +1,103 @@ +package org.briarproject; + +import org.briarproject.api.android.PlatformExecutor; +import org.briarproject.api.android.ReferenceManager; +import org.briarproject.api.contact.ContactManager; +import org.briarproject.api.crypto.CryptoComponent; +import org.briarproject.api.crypto.CryptoExecutor; +import org.briarproject.api.crypto.PasswordStrengthEstimator; +import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.db.DatabaseExecutor; +import org.briarproject.api.event.EventBus; +import org.briarproject.api.forum.ForumManager; +import org.briarproject.api.forum.ForumPostFactory; +import org.briarproject.api.forum.ForumSharingManager; +import org.briarproject.api.identity.AuthorFactory; +import org.briarproject.api.identity.IdentityManager; +import org.briarproject.api.invitation.InvitationTaskFactory; +import org.briarproject.api.lifecycle.IoExecutor; +import org.briarproject.api.lifecycle.LifecycleManager; +import org.briarproject.api.messaging.MessagingManager; +import org.briarproject.api.messaging.PrivateMessageFactory; +import org.briarproject.api.plugins.ConnectionRegistry; +import org.briarproject.api.plugins.PluginManager; +import org.briarproject.api.properties.TransportPropertyManager; +import org.briarproject.api.settings.SettingsManager; +import org.briarproject.api.sync.ValidationManager; +import org.briarproject.api.transport.KeyManager; +import org.briarproject.clients.ClientsModule; +import org.briarproject.contact.ContactModule; +import org.briarproject.crypto.CryptoModule; +import org.briarproject.data.DataModule; +import org.briarproject.db.DatabaseModule; +import org.briarproject.event.EventModule; +import org.briarproject.forum.ForumModule; +import org.briarproject.identity.IdentityModule; +import org.briarproject.invitation.InvitationModule; +import org.briarproject.lifecycle.LifecycleModule; +import org.briarproject.messaging.MessagingModule; +import org.briarproject.messaging.PrivateMessageValidator; +import org.briarproject.plugins.PluginsModule; +import org.briarproject.properties.PropertiesModule; +import org.briarproject.properties.TransportPropertyValidator; +import org.briarproject.reliability.ReliabilityModule; +import org.briarproject.settings.SettingsModule; +import org.briarproject.sync.SyncModule; +import org.briarproject.system.SystemModule; +import org.briarproject.transport.TransportModule; + +import java.util.concurrent.Executor; + +import javax.inject.Singleton; + +import dagger.Component; + +@Singleton +@Component(modules = {DatabaseModule.class, + CryptoModule.class, LifecycleModule.class, PlatformModule.class, + ReliabilityModule.class, MessagingModule.class, + InvitationModule.class, ForumModule.class, IdentityModule.class, + EventModule.class, DataModule.class, ContactModule.class, + PropertiesModule.class, TransportModule.class, SyncModule.class, + SettingsModule.class, ClientsModule.class, SystemModule.class, + PluginsModule.class}) +public interface CoreComponent { + @IoExecutor + Executor ioExecutor(); + ContactManager contactManager(); + @CryptoExecutor Executor cryptoExecutor(); + DatabaseConfig databaseConfig(); + PasswordStrengthEstimator passwordStrengthEstimator(); + CryptoComponent cryptoComponent(); + @DatabaseExecutor Executor dbExecutor(); + LifecycleManager lifecycleManager(); + AuthorFactory authFactory(); + EventBus eventBus(); + KeyManager keyManager(); + ValidationManager validationManager(); + ForumManager forumManager(); + IdentityManager identityManager(); + PluginManager pluginManager(); + SettingsManager settingsManater(); + InvitationTaskFactory invitationTaskFactory(); + MessagingManager messagingManager(); + TransportPropertyManager transportPropertyManager(); + ConnectionRegistry connectionRegistry(); + ForumSharingManager forumSharingManager(); + PrivateMessageFactory privateMessageFactory(); + ForumPostFactory forumPostFactory(); + PrivateMessageValidator privateMessageValidator(); + TransportPropertyValidator transportPropertyValidator(); + PlatformExecutor platformExecutor(); + // Eager singletons + void inject(ContactModule.EagerSingletons init); + void inject(CryptoModule.EagerSingletons init); + void inject(DatabaseModule.EagerSingletons init); + void inject(ForumModule.EagerSingletons init); + void inject(LifecycleModule.EagerSingletons init); + void inject(MessagingModule.EagerSingletons init); + void inject(PluginsModule.EagerSingletons init); + void inject(PropertiesModule.EagerSingletons init); + void inject(SyncModule.EagerSingletons init); + void inject(TransportModule.EagerSingletons init); +} diff --git a/briar-core/src/org/briarproject/CoreEagerSingletons.java b/briar-core/src/org/briarproject/CoreEagerSingletons.java new file mode 100644 index 0000000000000000000000000000000000000000..8637f710651054d6abb9dd1683d06f7fd8da584a --- /dev/null +++ b/briar-core/src/org/briarproject/CoreEagerSingletons.java @@ -0,0 +1,28 @@ +package org.briarproject; + +import org.briarproject.contact.ContactModule; +import org.briarproject.crypto.CryptoModule; +import org.briarproject.db.DatabaseModule; +import org.briarproject.forum.ForumModule; +import org.briarproject.lifecycle.LifecycleModule; +import org.briarproject.messaging.MessagingModule; +import org.briarproject.plugins.PluginsModule; +import org.briarproject.properties.PropertiesModule; +import org.briarproject.sync.SyncModule; +import org.briarproject.transport.TransportModule; + +public class CoreEagerSingletons { + + public static void initEagerSingletons(CoreComponent c) { + c.inject(new ContactModule.EagerSingletons()); + c.inject(new CryptoModule.EagerSingletons()); + c.inject(new DatabaseModule.EagerSingletons()); + c.inject(new ForumModule.EagerSingletons()); + c.inject(new LifecycleModule.EagerSingletons()); + c.inject(new MessagingModule.EagerSingletons()); + c.inject(new PluginsModule.EagerSingletons()); + c.inject(new PropertiesModule.EagerSingletons()); + c.inject(new SyncModule.EagerSingletons()); + c.inject(new TransportModule.EagerSingletons()); + } +} diff --git a/briar-core/src/org/briarproject/PlatformModule.java b/briar-core/src/org/briarproject/PlatformModule.java new file mode 100644 index 0000000000000000000000000000000000000000..c4242048a57a09ad477b3f0fc628e2e7d1419e58 --- /dev/null +++ b/briar-core/src/org/briarproject/PlatformModule.java @@ -0,0 +1,36 @@ +package org.briarproject; + +import org.briarproject.api.android.PlatformExecutor; +import org.briarproject.api.db.DatabaseConfig; +import org.briarproject.api.ui.UiCallback; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * This class contains methods that MUST(!) be overridden in platform specific + * modules that use the core. + */ +@Module +public class PlatformModule { + + @Provides + @Singleton + public DatabaseConfig provideDatabaseConfig() { + return null; + } + + @Provides + public UiCallback provideUICallback() { + return null; + } + + + @Provides + public PlatformExecutor providePlatformExecutor() { + return null; + } + +} diff --git a/briar-core/src/org/briarproject/contact/ContactModule.java b/briar-core/src/org/briarproject/contact/ContactModule.java index e4927a74f27a5010418914d586ee75a2839829c3..bd8e2d3afa05b27aedc9cf3117468995f9fbcf01 100644 --- a/briar-core/src/org/briarproject/contact/ContactModule.java +++ b/briar-core/src/org/briarproject/contact/ContactModule.java @@ -3,9 +3,8 @@ package org.briarproject.contact; import org.briarproject.api.contact.ContactManager; import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.lifecycle.LifecycleManager; -import org.briarproject.identity.IdentityModule; -import org.briarproject.lifecycle.LifecycleModule; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -14,6 +13,10 @@ import dagger.Provides; @Module public class ContactModule { + public static class EagerSingletons { + @Inject ContactManager contactManager; + } + @Provides @Singleton ContactManager getContactManager(LifecycleManager lifecycleManager, diff --git a/briar-core/src/org/briarproject/crypto/CryptoModule.java b/briar-core/src/org/briarproject/crypto/CryptoModule.java index c8b1d4845fc2602b277c918fd27b3a48d7aed238..aa9744483778fe0a5a7cefdad78bb9cfb1a6f76e 100644 --- a/briar-core/src/org/briarproject/crypto/CryptoModule.java +++ b/briar-core/src/org/briarproject/crypto/CryptoModule.java @@ -7,7 +7,6 @@ import org.briarproject.api.crypto.StreamDecrypterFactory; import org.briarproject.api.crypto.StreamEncrypterFactory; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.system.SeedProvider; -import org.briarproject.lifecycle.LifecycleModule; import java.security.SecureRandom; import java.util.concurrent.BlockingQueue; @@ -17,6 +16,7 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; +import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; @@ -28,6 +28,11 @@ import static java.util.concurrent.TimeUnit.SECONDS; @Module public class CryptoModule { + public static class EagerSingletons { + @Inject + @CryptoExecutor Executor cryptoExecutor; + } + /** * The maximum number of executor threads. */ diff --git a/briar-core/src/org/briarproject/db/DatabaseModule.java b/briar-core/src/org/briarproject/db/DatabaseModule.java index c177c9ae4b528774de226da471da8b92a7d4ac84..7f590ddd521821f759fff466804e2e6bb6b0e691 100644 --- a/briar-core/src/org/briarproject/db/DatabaseModule.java +++ b/briar-core/src/org/briarproject/db/DatabaseModule.java @@ -7,9 +7,6 @@ import org.briarproject.api.event.EventBus; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.lifecycle.ShutdownManager; import org.briarproject.api.system.Clock; -import org.briarproject.data.DataModule; -import org.briarproject.event.EventModule; -import org.briarproject.lifecycle.LifecycleModule; import java.security.SecureRandom; import java.sql.Connection; @@ -21,7 +18,6 @@ import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import javax.inject.Inject; -import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; @@ -32,6 +28,11 @@ import static java.util.concurrent.TimeUnit.SECONDS; @Module public class DatabaseModule { + public static class EagerSingletons { + @Inject + @DatabaseExecutor ExecutorService executorService; + } + private final ExecutorService databaseExecutor; public DatabaseModule() { diff --git a/briar-core/src/org/briarproject/forum/ForumModule.java b/briar-core/src/org/briarproject/forum/ForumModule.java index cbe2c7f19c39d50e018ffdbd73c58833c9d0339a..8442edeb7d7e6ba5615e1a05b887592a1c3e37fe 100644 --- a/briar-core/src/org/briarproject/forum/ForumModule.java +++ b/briar-core/src/org/briarproject/forum/ForumModule.java @@ -4,25 +4,17 @@ import org.briarproject.api.clients.ClientHelper; import org.briarproject.api.contact.ContactManager; import org.briarproject.api.crypto.CryptoComponent; import org.briarproject.api.data.BdfReaderFactory; -import org.briarproject.api.data.BdfWriterFactory; import org.briarproject.api.data.MetadataEncoder; import org.briarproject.api.data.MetadataParser; -import org.briarproject.api.data.ObjectReader; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.forum.ForumManager; import org.briarproject.api.forum.ForumPostFactory; import org.briarproject.api.forum.ForumSharingManager; -import org.briarproject.api.identity.Author; import org.briarproject.api.identity.AuthorFactory; -import org.briarproject.api.sync.MessageFactory; import org.briarproject.api.sync.ValidationManager; import org.briarproject.api.system.Clock; -import org.briarproject.contact.ContactModule; -import org.briarproject.crypto.CryptoModule; -import org.briarproject.data.DataModule; -import org.briarproject.db.DatabaseModule; -import org.briarproject.sync.SyncModule; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -31,6 +23,15 @@ import dagger.Provides; @Module public class ForumModule { + public static class EagerSingletons { + @Inject + ForumListValidator forumListValidator; + @Inject + ForumPostValidator forumPostValidator; + @Inject + ForumSharingManager forumSharingManager; + } + @Provides @Singleton ForumManager provideForumManager(DatabaseComponent db, diff --git a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java b/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java index c6218f273035d0ed36d4120f7ac7ece38671a9de..7b98244eb405d4e30dc32a4fe1de56e01251d8a6 100644 --- a/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java +++ b/briar-core/src/org/briarproject/lifecycle/LifecycleModule.java @@ -9,6 +9,7 @@ import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; +import javax.inject.Inject; import javax.inject.Singleton; import org.briarproject.api.db.DatabaseComponent; @@ -17,7 +18,6 @@ import org.briarproject.api.lifecycle.IoExecutor; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.lifecycle.ShutdownManager; import org.briarproject.api.system.Clock; -import org.briarproject.event.EventModule; import dagger.Module; import dagger.Provides; @@ -25,6 +25,11 @@ import dagger.Provides; @Module public class LifecycleModule { + public static class EagerSingletons { + @Inject + @IoExecutor Executor executor; + } + private final ExecutorService ioExecutor; public LifecycleModule() { diff --git a/briar-core/src/org/briarproject/messaging/MessagingModule.java b/briar-core/src/org/briarproject/messaging/MessagingModule.java index 6f0921d828da38b35b5036384ab709a19f08b8f7..b943a6921d87c689ed83ac44dbf36424e9338207 100644 --- a/briar-core/src/org/briarproject/messaging/MessagingModule.java +++ b/briar-core/src/org/briarproject/messaging/MessagingModule.java @@ -2,18 +2,13 @@ package org.briarproject.messaging; import org.briarproject.api.clients.ClientHelper; import org.briarproject.api.contact.ContactManager; -import org.briarproject.api.data.BdfReaderFactory; -import org.briarproject.api.data.BdfWriterFactory; import org.briarproject.api.data.MetadataEncoder; import org.briarproject.api.messaging.MessagingManager; import org.briarproject.api.messaging.PrivateMessageFactory; -import org.briarproject.api.sync.MessageFactory; import org.briarproject.api.sync.ValidationManager; import org.briarproject.api.system.Clock; -import org.briarproject.contact.ContactModule; -import org.briarproject.data.DataModule; -import org.briarproject.sync.SyncModule; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -24,13 +19,17 @@ import static org.briarproject.messaging.MessagingManagerImpl.CLIENT_ID; @Module public class MessagingModule { + public static class EagerSingletons { + @Inject MessagingManager messagingManager; + @Inject PrivateMessageValidator privateMessageValidator; + } + @Provides PrivateMessageFactory providePrivateMessageFactory( ClientHelper clientHelper) { return new PrivateMessageFactoryImpl(clientHelper); } - @Provides @Singleton PrivateMessageValidator getValidator(ValidationManager validationManager, diff --git a/briar-core/src/org/briarproject/plugins/PluginsModule.java b/briar-core/src/org/briarproject/plugins/PluginsModule.java index 6b750c2149846f20d5aa577c56942bf687b064b5..0d523c34895ec2ccc1a08cfd8561fb9fea0f8fc3 100644 --- a/briar-core/src/org/briarproject/plugins/PluginsModule.java +++ b/briar-core/src/org/briarproject/plugins/PluginsModule.java @@ -1,7 +1,9 @@ package org.briarproject.plugins; +import javax.inject.Inject; import javax.inject.Singleton; +import org.briarproject.api.android.PlatformExecutor; import org.briarproject.api.event.EventBus; import org.briarproject.api.lifecycle.IoExecutor; import org.briarproject.api.lifecycle.LifecycleManager; @@ -9,13 +11,19 @@ import org.briarproject.api.plugins.BackoffFactory; import org.briarproject.api.plugins.ConnectionManager; import org.briarproject.api.plugins.ConnectionRegistry; import org.briarproject.api.plugins.PluginManager; +import org.briarproject.api.plugins.duplex.DuplexPluginConfig; +import org.briarproject.api.plugins.simplex.SimplexPluginConfig; +import org.briarproject.api.plugins.simplex.SimplexPluginFactory; import org.briarproject.api.sync.SyncSessionFactory; +import org.briarproject.api.system.LocationUtils; import org.briarproject.api.system.Timer; import org.briarproject.api.transport.KeyManager; import org.briarproject.api.transport.StreamReaderFactory; import org.briarproject.api.transport.StreamWriterFactory; import java.security.SecureRandom; +import java.util.Collection; +import java.util.Collections; import java.util.concurrent.Executor; import dagger.Module; @@ -25,6 +33,11 @@ import dagger.Provides; @Module public class PluginsModule { + public static class EagerSingletons { + @Inject + PluginManager pluginManager; + } + @Provides BackoffFactory provideBackoffFactory() { return new BackoffFactoryImpl(); @@ -62,4 +75,21 @@ public class PluginsModule { lifecycleManager.register(pluginManager); return pluginManager; } + + @Provides + SimplexPluginConfig provideSimplexPluginConfig() { + return new SimplexPluginConfig() { + public Collection<SimplexPluginFactory> getFactories() { + return Collections.emptyList(); + } + }; + } + + @Provides + public DuplexPluginConfig provideDuplexPluginConfig(@IoExecutor Executor ioExecutor, + PlatformExecutor platformExecutor, /*Application app,*/ + SecureRandom random, BackoffFactory backoffFactory, + LocationUtils locationUtils, EventBus eventBus) { + return null; + } } diff --git a/briar-core/src/org/briarproject/properties/PropertiesModule.java b/briar-core/src/org/briarproject/properties/PropertiesModule.java index e008146d23ba9ee1ea5365487cc4c5e241458ce5..e9f2fcf5801726e72acd6ea8c815be42c68cf738 100644 --- a/briar-core/src/org/briarproject/properties/PropertiesModule.java +++ b/briar-core/src/org/briarproject/properties/PropertiesModule.java @@ -2,15 +2,12 @@ package org.briarproject.properties; import org.briarproject.api.clients.ClientHelper; import org.briarproject.api.contact.ContactManager; -import org.briarproject.api.data.BdfReaderFactory; import org.briarproject.api.data.MetadataEncoder; import org.briarproject.api.properties.TransportPropertyManager; import org.briarproject.api.sync.ValidationManager; import org.briarproject.api.system.Clock; -import org.briarproject.contact.ContactModule; -import org.briarproject.data.DataModule; -import org.briarproject.sync.SyncModule; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -21,6 +18,11 @@ import static org.briarproject.properties.TransportPropertyManagerImpl.CLIENT_ID @Module public class PropertiesModule { + public static class EagerSingletons { + @Inject TransportPropertyValidator transportPropertyValidator; + @Inject TransportPropertyManager transportPropertyManager; + } + @Provides @Singleton TransportPropertyValidator getValidator(ValidationManager validationManager, diff --git a/briar-core/src/org/briarproject/sync/SyncModule.java b/briar-core/src/org/briarproject/sync/SyncModule.java index 6c286f8af4cb6a449de48b93122491b468a1d152..15d13ce66fc0174e188bc0bcd7ce2386cb90ef11 100644 --- a/briar-core/src/org/briarproject/sync/SyncModule.java +++ b/briar-core/src/org/briarproject/sync/SyncModule.java @@ -1,13 +1,9 @@ package org.briarproject.sync; import org.briarproject.api.crypto.CryptoComponent; -import org.briarproject.api.data.BdfWriterFactory; -import org.briarproject.api.data.ObjectReader; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.event.EventBus; -import org.briarproject.api.identity.Author; -import org.briarproject.api.identity.AuthorFactory; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.sync.GroupFactory; import org.briarproject.api.sync.MessageFactory; @@ -16,10 +12,6 @@ import org.briarproject.api.sync.PacketWriterFactory; import org.briarproject.api.sync.SyncSessionFactory; import org.briarproject.api.sync.ValidationManager; import org.briarproject.api.system.Clock; -import org.briarproject.crypto.CryptoModule; -import org.briarproject.db.DatabaseModule; -import org.briarproject.event.EventModule; -import org.briarproject.lifecycle.LifecycleModule; import java.util.concurrent.Executor; @@ -32,6 +24,10 @@ import dagger.Provides; @Module public class SyncModule { + public static class EagerSingletons { + @Inject ValidationManager validationManager; + } + @Provides GroupFactory provideGroupFactory(CryptoComponent crypto) { return new GroupFactoryImpl(crypto); diff --git a/briar-android/src/org/briarproject/system/AndroidSystemModule.java b/briar-core/src/org/briarproject/system/SystemModule.java similarity index 61% rename from briar-android/src/org/briarproject/system/AndroidSystemModule.java rename to briar-core/src/org/briarproject/system/SystemModule.java index 2cd79468cc1b923c799dc02cfdaa0e29690ba488..8a2304e2eacada63cb616384a89caab3f43c5c88 100644 --- a/briar-android/src/org/briarproject/system/AndroidSystemModule.java +++ b/briar-core/src/org/briarproject/system/SystemModule.java @@ -1,8 +1,5 @@ package org.briarproject.system; - -import android.app.Application; - import org.briarproject.api.system.Clock; import org.briarproject.api.system.LocationUtils; import org.briarproject.api.system.SeedProvider; @@ -12,8 +9,7 @@ import dagger.Module; import dagger.Provides; @Module -public class AndroidSystemModule { - +public class SystemModule { @Provides Clock provideClock() { return new SystemClock(); @@ -25,13 +21,12 @@ public class AndroidSystemModule { } @Provides - SeedProvider provideSeedProvider(final Application app) { - return new AndroidSeedProvider(app); + public SeedProvider provideSeedProvider() { + return null; } @Provides - LocationUtils provideLocationUtils(final Application app) { - return new AndroidLocationUtils(app); + public LocationUtils provideLocationUtils() { + return null; } - } diff --git a/briar-core/src/org/briarproject/transport/TransportModule.java b/briar-core/src/org/briarproject/transport/TransportModule.java index 5a4ae89367449a46a113d2fcad02b344dc24cc06..d5819fbfcbe19f94b376f51dbac8db4fb4fd3d2b 100644 --- a/briar-core/src/org/briarproject/transport/TransportModule.java +++ b/briar-core/src/org/briarproject/transport/TransportModule.java @@ -7,9 +7,8 @@ import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.transport.KeyManager; import org.briarproject.api.transport.StreamReaderFactory; import org.briarproject.api.transport.StreamWriterFactory; -import org.briarproject.event.EventModule; -import org.briarproject.lifecycle.LifecycleModule; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -18,6 +17,10 @@ import dagger.Provides; @Module public class TransportModule { + public static class EagerSingletons { + @Inject KeyManager keyManager; + } + @Provides StreamReaderFactory provideStreamReaderFactory( StreamDecrypterFactory streamDecrypterFactory) {