Make logger injectable (1/3)
Test: Manually tested logger works as expected
Bug: 305069232
Change-Id: I4e83837498c23d45b66f77dfc7ecbeb037decdb7
diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt
index 10bbd7a..6072f39 100644
--- a/src/com/android/customization/module/ThemePickerInjector.kt
+++ b/src/com/android/customization/module/ThemePickerInjector.kt
@@ -37,7 +37,6 @@
import com.android.customization.model.themedicon.domain.interactor.ThemedIconInteractor
import com.android.customization.model.themedicon.domain.interactor.ThemedIconSnapshotRestorer
import com.android.customization.module.logging.ThemesUserEventLogger
-import com.android.customization.module.logging.ThemesUserEventLoggerImpl
import com.android.customization.picker.clock.data.repository.ClockPickerRepositoryImpl
import com.android.customization.picker.clock.data.repository.ClockRegistryProvider
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
@@ -72,7 +71,6 @@
import com.android.wallpaper.module.CustomizationSections
import com.android.wallpaper.module.FragmentFactory
import com.android.wallpaper.module.WallpaperPicker2Injector
-import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.picker.CustomizationPickerActivity
import com.android.wallpaper.picker.customization.data.content.WallpaperClientImpl
import com.android.wallpaper.picker.customization.data.repository.WallpaperColorsRepository
@@ -92,9 +90,9 @@
@MainDispatcher private val mainScope: CoroutineScope,
@MainDispatcher private val mainDispatcher: CoroutineDispatcher,
@BackgroundDispatcher private val bgDispatcher: CoroutineDispatcher,
-) : WallpaperPicker2Injector(mainScope, bgDispatcher), CustomizationInjector {
+ private val userEventLogger: ThemesUserEventLogger,
+) : WallpaperPicker2Injector(mainScope, bgDispatcher, userEventLogger), CustomizationInjector {
private var customizationSections: CustomizationSections? = null
- private var userEventLogger: UserEventLogger? = null
private var wallpaperInteractor: WallpaperInteractor? = null
private var keyguardQuickAffordancePickerInteractor: KeyguardQuickAffordancePickerInteractor? =
null
@@ -166,10 +164,7 @@
@Synchronized
override fun getUserEventLogger(context: Context): ThemesUserEventLogger {
- return userEventLogger as? ThemesUserEventLogger
- ?: ThemesUserEventLoggerImpl(getPreferences(context.applicationContext)).also {
- userEventLogger = it
- }
+ return userEventLogger
}
override fun getFragmentFactory(): FragmentFactory? {
diff --git a/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt b/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt
index 78b5ca7..8998dee 100644
--- a/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt
+++ b/src/com/android/customization/module/logging/ThemesUserEventLoggerImpl.kt
@@ -31,10 +31,16 @@
import com.android.wallpaper.module.logging.UserEventLogger.SetWallpaperEntryPoint
import com.android.wallpaper.module.logging.UserEventLogger.WallpaperDestination
import com.android.wallpaper.util.LaunchSourceUtils
+import javax.inject.Inject
+import javax.inject.Singleton
/** StatsLog-backed implementation of [ThemesUserEventLogger]. */
-class ThemesUserEventLoggerImpl(private val preferences: WallpaperPreferences) :
- ThemesUserEventLogger {
+@Singleton
+class ThemesUserEventLoggerImpl
+@Inject
+constructor(
+ private val preferences: WallpaperPreferences,
+) : ThemesUserEventLogger {
override fun logSnapshot() {
SysUiStatsLogger(StyleEnums.SNAPSHOT)
diff --git a/src_override/com/android/wallpaper/module/AppModule.kt b/src_override/com/android/wallpaper/module/AppModule.kt
index 95da101..187b00b 100644
--- a/src_override/com/android/wallpaper/module/AppModule.kt
+++ b/src_override/com/android/wallpaper/module/AppModule.kt
@@ -19,6 +19,9 @@
import com.android.customization.module.CustomizationInjector
import com.android.customization.module.DefaultCustomizationPreferences
import com.android.customization.module.ThemePickerInjector
+import com.android.customization.module.logging.ThemesUserEventLogger
+import com.android.customization.module.logging.ThemesUserEventLoggerImpl
+import com.android.wallpaper.module.logging.UserEventLogger
import dagger.Binds
import dagger.Module
import dagger.Provides
@@ -32,6 +35,14 @@
abstract class AppModule {
@Binds @Singleton abstract fun bindInjector(impl: ThemePickerInjector): CustomizationInjector
+ @Binds
+ @Singleton
+ abstract fun bindUserEventLogger(impl: ThemesUserEventLoggerImpl): UserEventLogger
+
+ @Binds
+ @Singleton
+ abstract fun bindThemesUserEventLogger(impl: ThemesUserEventLoggerImpl): ThemesUserEventLogger
+
companion object {
@Provides
@Singleton
diff --git a/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt b/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt
index a8989c5..e1f4178 100644
--- a/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt
+++ b/tests/common/src/com/android/customization/module/logging/TestThemesUserEventLogger.kt
@@ -18,9 +18,13 @@
import com.android.customization.model.grid.GridOption
import com.android.customization.module.logging.ThemesUserEventLogger.ColorSource
import com.android.wallpaper.module.logging.TestUserEventLogger
+import javax.inject.Inject
+import javax.inject.Singleton
/** Test implementation of [ThemesUserEventLogger]. */
-class TestThemesUserEventLogger : TestUserEventLogger(), ThemesUserEventLogger {
+@Singleton
+class TestThemesUserEventLogger @Inject constructor() :
+ TestUserEventLogger(), ThemesUserEventLogger {
override fun logThemeColorApplied(@ColorSource source: Int, variant: Int, seedColor: Int) {}
diff --git a/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt b/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt
index e08209d..d1d9af8 100644
--- a/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt
+++ b/tests/common/src/com/android/customization/testing/TestCustomizationInjector.kt
@@ -5,7 +5,6 @@
import androidx.activity.ComponentActivity
import com.android.customization.module.CustomizationInjector
import com.android.customization.module.CustomizationPreferences
-import com.android.customization.module.logging.TestThemesUserEventLogger
import com.android.customization.module.logging.ThemesUserEventLogger
import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor
import com.android.customization.picker.clock.ui.view.ClockViewFactory
@@ -25,10 +24,10 @@
@Singleton
open class TestCustomizationInjector
@Inject
-constructor(private val customPrefs: TestDefaultCustomizationPreferences) :
- TestInjector(), CustomizationInjector {
- private var themesUserEventLogger: ThemesUserEventLogger? = null
-
+constructor(
+ private val customPrefs: TestDefaultCustomizationPreferences,
+ private val themesUserEventLogger: ThemesUserEventLogger
+) : TestInjector(themesUserEventLogger), CustomizationInjector {
/////////////////
// CustomizationInjector implementations
/////////////////
@@ -95,6 +94,5 @@
override fun getUserEventLogger(context: Context): UserEventLogger {
return themesUserEventLogger
- ?: TestThemesUserEventLogger().also { themesUserEventLogger = it }
}
}
diff --git a/tests/module/src/com/android/customization/TestModule.kt b/tests/module/src/com/android/customization/TestModule.kt
index d35c89a..79a91c3 100644
--- a/tests/module/src/com/android/customization/TestModule.kt
+++ b/tests/module/src/com/android/customization/TestModule.kt
@@ -2,11 +2,15 @@
import com.android.customization.module.CustomizationInjector
import com.android.customization.module.CustomizationPreferences
+import com.android.customization.module.logging.TestThemesUserEventLogger
+import com.android.customization.module.logging.ThemesUserEventLogger
import com.android.customization.testing.TestCustomizationInjector
import com.android.customization.testing.TestDefaultCustomizationPreferences
import com.android.wallpaper.module.AppModule
import com.android.wallpaper.module.Injector
import com.android.wallpaper.module.WallpaperPreferences
+import com.android.wallpaper.module.logging.TestUserEventLogger
+import com.android.wallpaper.module.logging.UserEventLogger
import com.android.wallpaper.testing.TestInjector
import com.android.wallpaper.testing.TestWallpaperPreferences
import dagger.Binds
@@ -22,6 +26,12 @@
@Binds @Singleton abstract fun bindInjector(impl: TestCustomizationInjector): Injector
+ @Binds @Singleton abstract fun bindUserEventLogger(impl: TestUserEventLogger): UserEventLogger
+
+ @Binds
+ @Singleton
+ abstract fun bindThemesUserEventLogger(impl: TestThemesUserEventLogger): ThemesUserEventLogger
+
@Binds
@Singleton
abstract fun bindWallpaperPrefs(impl: TestDefaultCustomizationPreferences): WallpaperPreferences
diff --git a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
index 43b872e..a9da1c3 100644
--- a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
+++ b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
@@ -21,6 +21,7 @@
import android.content.Intent
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SmallTest
+import com.android.customization.module.logging.TestThemesUserEventLogger
import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordanceSnapshotRestorer
@@ -64,6 +65,8 @@
@RunWith(RobolectricTestRunner::class)
class KeyguardQuickAffordancePickerViewModelTest {
+ private val logger = TestThemesUserEventLogger()
+
private lateinit var underTest: KeyguardQuickAffordancePickerViewModel
private lateinit var context: Context
@@ -74,7 +77,7 @@
@Before
fun setUp() {
- InjectorProvider.setInjector(TestInjector())
+ InjectorProvider.setInjector(TestInjector(logger))
context = ApplicationProvider.getApplicationContext()
val testDispatcher = StandardTestDispatcher()
testScope = TestScope(testDispatcher)