From ea05a5c703cf815e8a3ab41af8ab5cc79fef0737 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 13 Nov 2018 17:40:06 +0000 Subject: [PATCH] Singletons that call registration methods must be eager. --- .../bramble/BrambleAndroidEagerSingletons.java | 11 +++++++++++ .../briarproject/bramble/BrambleAndroidModule.java | 4 ++++ .../bramble/battery/AndroidBatteryModule.java | 6 ++++++ .../bramble/network/AndroidNetworkModule.java | 6 ++++++ .../briar/android/BriarTestComponentApplication.java | 2 ++ .../briarproject/briar/android/AndroidComponent.java | 6 ++++-- .../org/briarproject/briar/android/AppModule.java | 4 ++++ .../briar/android/BriarApplicationImpl.java | 2 ++ .../briar/android/TestBriarApplication.java | 2 ++ 9 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidEagerSingletons.java diff --git a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidEagerSingletons.java b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidEagerSingletons.java new file mode 100644 index 000000000..d162eea09 --- /dev/null +++ b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidEagerSingletons.java @@ -0,0 +1,11 @@ +package org.briarproject.bramble; + +import org.briarproject.bramble.battery.AndroidBatteryModule; +import org.briarproject.bramble.network.AndroidNetworkModule; + +public interface BrambleAndroidEagerSingletons { + + void inject(AndroidBatteryModule.EagerSingletons init); + + void inject(AndroidNetworkModule.EagerSingletons init); +} diff --git a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java index 470634fa1..beed8b65b 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java @@ -15,4 +15,8 @@ import dagger.Module; }) public class BrambleAndroidModule { + public static void initEagerSingletons(BrambleAndroidEagerSingletons c) { + c.inject(new AndroidBatteryModule.EagerSingletons()); + c.inject(new AndroidNetworkModule.EagerSingletons()); + } } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/battery/AndroidBatteryModule.java b/bramble-android/src/main/java/org/briarproject/bramble/battery/AndroidBatteryModule.java index 65895dde0..d82e595b6 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/battery/AndroidBatteryModule.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/battery/AndroidBatteryModule.java @@ -3,6 +3,7 @@ package org.briarproject.bramble.battery; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -11,6 +12,11 @@ import dagger.Provides; @Module public class AndroidBatteryModule { + public static class EagerSingletons { + @Inject + BatteryManager batteryManager; + } + @Provides @Singleton BatteryManager provideBatteryManager(LifecycleManager lifecycleManager, diff --git a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkModule.java b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkModule.java index b381b7a23..e5bb8ffc0 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkModule.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkModule.java @@ -3,6 +3,7 @@ package org.briarproject.bramble.network; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.network.NetworkManager; +import javax.inject.Inject; import javax.inject.Singleton; import dagger.Module; @@ -11,6 +12,11 @@ import dagger.Provides; @Module public class AndroidNetworkModule { + public static class EagerSingletons { + @Inject + NetworkManager networkManager; + } + @Provides @Singleton NetworkManager provideNetworkManager(LifecycleManager lifecycleManager, diff --git a/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java b/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java index 156620b1d..c6481bad6 100644 --- a/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java +++ b/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android; +import org.briarproject.bramble.BrambleAndroidModule; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.briar.BriarCoreModule; @@ -12,6 +13,7 @@ public class BriarTestComponentApplication extends BriarApplicationImpl { // We need to load the eager singletons directly after making the // dependency graphs BrambleCoreModule.initEagerSingletons(component); + BrambleAndroidModule.initEagerSingletons(component); BriarCoreModule.initEagerSingletons(component); AndroidEagerSingletons.initEagerSingletons(component); return component; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java index 60b736a6b..2b1216288 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java @@ -2,6 +2,7 @@ package org.briarproject.briar.android; import android.arch.lifecycle.ViewModelProvider; +import org.briarproject.bramble.BrambleAndroidEagerSingletons; import org.briarproject.bramble.BrambleAndroidModule; import org.briarproject.bramble.BrambleCoreEagerSingletons; import org.briarproject.bramble.BrambleCoreModule; @@ -39,11 +40,11 @@ import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.BlogPostFactory; import org.briarproject.briar.api.blog.BlogSharingManager; import org.briarproject.briar.api.client.MessageTracker; +import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.feed.FeedManager; import org.briarproject.briar.api.forum.ForumManager; import org.briarproject.briar.api.forum.ForumSharingManager; import org.briarproject.briar.api.introduction.IntroductionManager; -import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessageFactory; import org.briarproject.briar.api.privategroup.GroupMessageFactory; @@ -68,7 +69,8 @@ import dagger.Component; AppModule.class }) public interface AndroidComponent - extends BrambleCoreEagerSingletons, BriarCoreEagerSingletons { + extends BrambleCoreEagerSingletons, BrambleAndroidEagerSingletons, + BriarCoreEagerSingletons { // Exposed objects @CryptoExecutor diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index dcc747a24..d19d6d7ea 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -66,10 +66,14 @@ public class AppModule { @Inject AndroidNotificationManager androidNotificationManager; @Inject + ScreenFilterMonitor screenFilterMonitor; + @Inject NetworkUsageLogger networkUsageLogger; @Inject DozeWatchdog dozeWatchdog; @Inject + LockManager lockManager; + @Inject RecentEmoji recentEmoji; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java index 554bc1755..1a79bc4c2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java @@ -15,6 +15,7 @@ import com.vanniktech.emoji.google.GoogleEmojiProvider; import org.acra.ACRA; import org.acra.ReportingInteractionMode; import org.acra.annotation.ReportsCrashes; +import org.briarproject.bramble.BrambleAndroidModule; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.briar.BriarCoreModule; import org.briarproject.briar.R; @@ -124,6 +125,7 @@ public class BriarApplicationImpl extends Application // We need to load the eager singletons directly after making the // dependency graphs BrambleCoreModule.initEagerSingletons(androidComponent); + BrambleAndroidModule.initEagerSingletons(androidComponent); BriarCoreModule.initEagerSingletons(androidComponent); AndroidEagerSingletons.initEagerSingletons(androidComponent); return androidComponent; diff --git a/briar-android/src/test/java/org/briarproject/briar/android/TestBriarApplication.java b/briar-android/src/test/java/org/briarproject/briar/android/TestBriarApplication.java index 2c0cb2a38..8897136cc 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/TestBriarApplication.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/TestBriarApplication.java @@ -7,6 +7,7 @@ import android.preference.PreferenceManager; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.google.GoogleEmojiProvider; +import org.briarproject.bramble.BrambleAndroidModule; import org.briarproject.bramble.BrambleCoreModule; import org.briarproject.briar.BriarCoreModule; @@ -42,6 +43,7 @@ public class TestBriarApplication extends Application // We need to load the eager singletons directly after making the // dependency graphs BrambleCoreModule.initEagerSingletons(applicationComponent); + BrambleAndroidModule.initEagerSingletons(applicationComponent); BriarCoreModule.initEagerSingletons(applicationComponent); AndroidEagerSingletons.initEagerSingletons(applicationComponent); EmojiManager.install(new GoogleEmojiProvider());