| package com.android.customization.testing |
| |
| import android.app.Activity |
| import android.content.Context |
| import androidx.fragment.app.FragmentActivity |
| import com.android.customization.model.theme.OverlayManagerCompat |
| import com.android.customization.model.theme.ThemeBundleProvider |
| import com.android.customization.model.theme.ThemeManager |
| import com.android.customization.module.CustomizationInjector |
| import com.android.customization.module.CustomizationPreferences |
| import com.android.customization.module.ThemesUserEventLogger |
| import com.android.customization.picker.clock.data.repository.ClockRegistryProvider |
| import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository |
| import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor |
| import com.android.customization.picker.clock.ui.view.ClockViewFactory |
| import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel |
| import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel |
| import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel |
| import com.android.customization.picker.color.data.repository.ColorPickerRepositoryImpl |
| import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor |
| import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel |
| 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 |
| import com.android.systemui.shared.clocks.ClockRegistry |
| import com.android.systemui.shared.customization.data.content.CustomizationProviderClient |
| import com.android.systemui.shared.customization.data.content.CustomizationProviderClientImpl |
| import com.android.wallpaper.config.BaseFlags |
| import com.android.wallpaper.model.WallpaperColorsViewModel |
| import com.android.wallpaper.module.DrawableLayerResolver |
| import com.android.wallpaper.module.PackageStatusNotifier |
| import com.android.wallpaper.module.UserEventLogger |
| import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer |
| import com.android.wallpaper.testing.TestInjector |
| import kotlinx.coroutines.Dispatchers |
| import kotlinx.coroutines.GlobalScope |
| |
| /** Test implementation of the dependency injector. */ |
| class TestCustomizationInjector : TestInjector(), CustomizationInjector { |
| private var customizationPreferences: CustomizationPreferences? = null |
| private var themeManager: ThemeManager? = null |
| private var packageStatusNotifier: PackageStatusNotifier? = null |
| private var drawableLayerResolver: DrawableLayerResolver? = null |
| private var userEventLogger: UserEventLogger? = null |
| private var keyguardQuickAffordancePickerInteractor: KeyguardQuickAffordancePickerInteractor? = |
| null |
| private var flags: BaseFlags? = null |
| private var customizationProviderClient: CustomizationProviderClient? = null |
| private var keyguardQuickAffordanceSnapshotRestorer: KeyguardQuickAffordanceSnapshotRestorer? = |
| null |
| private var clockRegistry: ClockRegistry? = null |
| private var clockPickerInteractor: ClockPickerInteractor? = null |
| private var clockSectionViewModel: ClockSectionViewModel? = null |
| private var clockViewFactory: ClockViewFactory? = null |
| private var colorPickerInteractor: ColorPickerInteractor? = null |
| private var colorPickerViewModelFactory: ColorPickerViewModel.Factory? = null |
| private var clockCarouselViewModel: ClockCarouselViewModel? = null |
| private var clockSettingsViewModelFactory: ClockSettingsViewModel.Factory? = null |
| |
| override fun getCustomizationPreferences(context: Context): CustomizationPreferences { |
| return customizationPreferences |
| ?: TestDefaultCustomizationPreferences(context).also { customizationPreferences = it } |
| } |
| |
| override fun getThemeManager( |
| provider: ThemeBundleProvider, |
| activity: FragmentActivity, |
| overlayManagerCompat: OverlayManagerCompat, |
| logger: ThemesUserEventLogger |
| ): ThemeManager { |
| return themeManager |
| ?: TestThemeManager(provider, activity, overlayManagerCompat, logger).also { |
| themeManager = it |
| } |
| } |
| |
| override fun getPackageStatusNotifier(context: Context): PackageStatusNotifier { |
| return packageStatusNotifier |
| ?: TestPackageStatusNotifier().also { |
| packageStatusNotifier = TestPackageStatusNotifier() |
| } |
| } |
| |
| override fun getDrawableLayerResolver(): DrawableLayerResolver { |
| return drawableLayerResolver |
| ?: TestDrawableLayerResolver().also { drawableLayerResolver = it } |
| } |
| |
| override fun getUserEventLogger(context: Context): UserEventLogger { |
| return userEventLogger ?: TestThemesUserEventLogger().also { userEventLogger = it } |
| } |
| |
| override fun getKeyguardQuickAffordancePickerInteractor( |
| context: Context |
| ): KeyguardQuickAffordancePickerInteractor { |
| return keyguardQuickAffordancePickerInteractor |
| ?: createCustomizationProviderClient(context).also { |
| keyguardQuickAffordancePickerInteractor = it |
| } |
| } |
| |
| private fun createCustomizationProviderClient( |
| context: Context |
| ): KeyguardQuickAffordancePickerInteractor { |
| val client: CustomizationProviderClient = |
| CustomizationProviderClientImpl(context, Dispatchers.IO) |
| return KeyguardQuickAffordancePickerInteractor( |
| KeyguardQuickAffordancePickerRepository(client, Dispatchers.IO), |
| client |
| ) { getKeyguardQuickAffordanceSnapshotRestorer(context) } |
| } |
| |
| override fun getFlags(): BaseFlags { |
| return flags ?: object : BaseFlags() {}.also { flags = it } |
| } |
| |
| override fun getSnapshotRestorers(context: Context): Map<Int, SnapshotRestorer> { |
| val restorers: MutableMap<Int, SnapshotRestorer> = HashMap() |
| restorers[KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER] = |
| getKeyguardQuickAffordanceSnapshotRestorer(context) |
| return restorers |
| } |
| |
| /** Returns the [CustomizationProviderClient]. */ |
| private fun getKeyguardQuickAffordancePickerProviderClient( |
| context: Context |
| ): CustomizationProviderClient { |
| return customizationProviderClient |
| ?: CustomizationProviderClientImpl(context, Dispatchers.IO).also { |
| customizationProviderClient = it |
| } |
| } |
| |
| private fun getKeyguardQuickAffordanceSnapshotRestorer( |
| context: Context |
| ): KeyguardQuickAffordanceSnapshotRestorer { |
| return keyguardQuickAffordanceSnapshotRestorer |
| ?: KeyguardQuickAffordanceSnapshotRestorer( |
| getKeyguardQuickAffordancePickerInteractor(context), |
| getKeyguardQuickAffordancePickerProviderClient(context) |
| ) |
| .also { keyguardQuickAffordanceSnapshotRestorer = it } |
| } |
| |
| override fun getClockRegistry(context: Context): ClockRegistry { |
| return clockRegistry |
| ?: ClockRegistryProvider(context, GlobalScope, Dispatchers.Main, Dispatchers.IO) |
| .get() |
| .also { clockRegistry = it } |
| } |
| |
| override fun getClockPickerInteractor(context: Context): ClockPickerInteractor { |
| return clockPickerInteractor |
| ?: ClockPickerInteractor(FakeClockPickerRepository()).also { |
| clockPickerInteractor = it |
| } |
| } |
| |
| override fun getClockSectionViewModel(context: Context): ClockSectionViewModel { |
| return clockSectionViewModel |
| ?: ClockSectionViewModel(getClockPickerInteractor(context)).also { |
| clockSectionViewModel = it |
| } |
| } |
| |
| override fun getColorPickerInteractor( |
| context: Context, |
| wallpaperColorsViewModel: WallpaperColorsViewModel, |
| ): ColorPickerInteractor { |
| return colorPickerInteractor |
| ?: ColorPickerInteractor(ColorPickerRepositoryImpl(context, wallpaperColorsViewModel)) |
| .also { colorPickerInteractor = it } |
| } |
| |
| override fun getColorPickerViewModelFactory( |
| context: Context, |
| wallpaperColorsViewModel: WallpaperColorsViewModel, |
| ): ColorPickerViewModel.Factory { |
| return colorPickerViewModelFactory |
| ?: ColorPickerViewModel.Factory( |
| context, |
| getColorPickerInteractor(context, wallpaperColorsViewModel), |
| ) |
| .also { colorPickerViewModelFactory = it } |
| } |
| |
| override fun getClockCarouselViewModel(context: Context): ClockCarouselViewModel { |
| return clockCarouselViewModel |
| ?: ClockCarouselViewModel(getClockPickerInteractor(context)).also { |
| clockCarouselViewModel = it |
| } |
| } |
| |
| override fun getClockViewFactory(activity: Activity): ClockViewFactory { |
| return clockViewFactory |
| ?: ClockViewFactory(activity, getClockRegistry(activity)).also { clockViewFactory = it } |
| } |
| |
| override fun getClockSettingsViewModelFactory( |
| context: Context, |
| ): ClockSettingsViewModel.Factory { |
| return clockSettingsViewModelFactory |
| ?: ClockSettingsViewModel.Factory( |
| context, |
| getClockPickerInteractor(context), |
| ) |
| .also { clockSettingsViewModelFactory = it } |
| } |
| |
| companion object { |
| private const val KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER = 1 |
| } |
| } |