Loading src/com/android/customization/model/mode/DarkModeSectionController.java +5 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static android.Manifest.permission.MODIFY_DAY_NIGHT_MODE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGED; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -43,6 +42,7 @@ import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.customization.picker.mode.DarkModeSectionView; import com.android.themepicker.R; import com.android.wallpaper.model.CustomizationSectionController; import com.android.wallpaper.system.UiModeManagerWrapper; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; Loading @@ -61,18 +61,21 @@ public class DarkModeSectionController implements private Context mContext; private DarkModeSectionView mDarkModeSectionView; private final DarkModeSnapshotRestorer mSnapshotRestorer; private final UiModeManagerWrapper mUiModeManager; private final ThemesUserEventLogger mThemesUserEventLogger; public DarkModeSectionController( Context context, Lifecycle lifecycle, DarkModeSnapshotRestorer snapshotRestorer, UiModeManagerWrapper uiModeManager, ThemesUserEventLogger themesUserEventLogger) { mContext = context; mLifecycle = lifecycle; mPowerManager = context.getSystemService(PowerManager.class); mLifecycle.addObserver(this); mSnapshotRestorer = snapshotRestorer; mUiModeManager = uiModeManager; mThemesUserEventLogger = themesUserEventLogger; } Loading Loading @@ -134,13 +137,12 @@ public class DarkModeSectionController implements disableToast.show(); return; } UiModeManager uiModeManager = context.getSystemService(UiModeManager.class); int shortDelay = context.getResources().getInteger(android.R.integer.config_shortAnimTime); new Handler(Looper.getMainLooper()).postDelayed( () -> { mDarkModeSectionView.announceForAccessibility( context.getString(R.string.mode_changed)); uiModeManager.setNightModeActivated(viewActivated); mUiModeManager.setNightModeActivated(viewActivated); mThemesUserEventLogger.logDarkThemeApplied(viewActivated); mSnapshotRestorer.store(viewActivated); }, Loading src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt +2 −2 Original line number Diff line number Diff line Loading @@ -17,13 +17,13 @@ package com.android.customization.model.mode import android.app.UiModeManager import android.content.Context import android.content.res.Configuration import androidx.annotation.VisibleForTesting import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer import com.android.wallpaper.picker.undo.domain.interactor.SnapshotStore import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot import com.android.wallpaper.system.UiModeManagerWrapper import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext Loading @@ -37,7 +37,7 @@ class DarkModeSnapshotRestorer : SnapshotRestorer { constructor( context: Context, manager: UiModeManager, manager: UiModeManagerWrapper, backgroundDispatcher: CoroutineDispatcher, ) : this( backgroundDispatcher = backgroundDispatcher, Loading src/com/android/customization/module/ThemePickerInjector.kt +10 −16 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.customization.module import android.app.Activity import android.app.UiModeManager import android.app.WallpaperColors import android.app.WallpaperManager import android.content.Context Loading Loading @@ -144,7 +143,7 @@ constructor( wallpaperColorsRepository = getWallpaperColorsRepository(), ), getKeyguardQuickAffordancePickerViewModelFactory(appContext), getColorContrastSectionViewModelFactory(appContext), getColorContrastSectionViewModelFactory(), getNotificationSectionViewModelFactory(appContext), getFlags(), getClockCarouselViewModelFactory( Loading Loading @@ -236,27 +235,22 @@ constructor( .also { wallpaperInteractor = it } } private fun getColorContrastSectionInteractorImpl( context: Context ): ColorContrastSectionInteractor { private fun getColorContrastSectionInteractorImpl(): ColorContrastSectionInteractor { return ColorContrastSectionInteractor( ColorContrastSectionRepository(context, bgDispatcher), ColorContrastSectionRepository(uiModeManager, bgDispatcher), ) } fun getColorContrastSectionInteractor(context: Context): ColorContrastSectionInteractor { fun getColorContrastSectionInteractor(): ColorContrastSectionInteractor { return colorContrastSectionInteractor ?: getColorContrastSectionInteractorImpl(context).also { colorContrastSectionInteractor = it } ?: getColorContrastSectionInteractorImpl().also { colorContrastSectionInteractor = it } } fun getColorContrastSectionViewModelFactory( context: Context ): ColorContrastSectionViewModel.Factory { fun getColorContrastSectionViewModelFactory(): ColorContrastSectionViewModel.Factory { return colorContrastSectionViewModelFactory ?: ColorContrastSectionViewModel.Factory(getColorContrastSectionInteractor(context)) .also { colorContrastSectionViewModelFactory = it } ?: ColorContrastSectionViewModel.Factory(getColorContrastSectionInteractor()).also { colorContrastSectionViewModelFactory = it } } override fun getKeyguardQuickAffordancePickerInteractor( Loading Loading @@ -495,7 +489,7 @@ constructor( return darkModeSnapshotRestorer ?: DarkModeSnapshotRestorer( context = appContext, manager = appContext.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager, manager = uiModeManager, backgroundDispatcher = bgDispatcher, ) .also { darkModeSnapshotRestorer = it } Loading src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt +1 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,7 @@ class ColorPickerFragment : AppbarFragment() { context, lifecycle, injector.getDarkModeSnapshotRestorer(requireContext()), injector.uiModeManager, injector.getUserEventLogger(), ) .createView(requireContext()) Loading src/com/android/customization/picker/settings/data/repository/ColorContrastSectionRepository.kt +7 −10 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ package com.android.customization.picker.settings.data.repository import android.app.UiModeManager import android.content.Context import android.content.Context.UI_MODE_SERVICE import com.android.wallpaper.system.UiModeManagerWrapper import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.asExecutor Loading @@ -26,13 +25,11 @@ import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow open class ColorContrastSectionRepository( private val context: Context, class ColorContrastSectionRepository( uiModeManager: UiModeManagerWrapper, private val bgDispatcher: CoroutineDispatcher ) { var uiModeManager = context.applicationContext.getSystemService(UI_MODE_SERVICE) as UiModeManager? open var contrast: Flow<Float> = callbackFlow { var contrast: Flow<Float> = callbackFlow { val executor: Executor = bgDispatcher.asExecutor() val listener = UiModeManager.ContrastChangeListener { contrast -> Loading @@ -41,13 +38,13 @@ open class ColorContrastSectionRepository( } // Emit the current contrast value immediately uiModeManager?.contrast?.let { currentContrast -> trySend(currentContrast) } uiModeManager.getContrast()?.let { currentContrast -> trySend(currentContrast) } uiModeManager?.addContrastChangeListener(executor, listener) uiModeManager.addContrastChangeListener(executor, listener) awaitClose { // Unregister the listener when the flow collection is cancelled or no longer in use uiModeManager?.removeContrastChangeListener(listener) uiModeManager.removeContrastChangeListener(listener) } } } Loading
src/com/android/customization/model/mode/DarkModeSectionController.java +5 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static android.Manifest.permission.MODIFY_DAY_NIGHT_MODE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGED; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading @@ -43,6 +42,7 @@ import com.android.customization.module.logging.ThemesUserEventLogger; import com.android.customization.picker.mode.DarkModeSectionView; import com.android.themepicker.R; import com.android.wallpaper.model.CustomizationSectionController; import com.android.wallpaper.system.UiModeManagerWrapper; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; Loading @@ -61,18 +61,21 @@ public class DarkModeSectionController implements private Context mContext; private DarkModeSectionView mDarkModeSectionView; private final DarkModeSnapshotRestorer mSnapshotRestorer; private final UiModeManagerWrapper mUiModeManager; private final ThemesUserEventLogger mThemesUserEventLogger; public DarkModeSectionController( Context context, Lifecycle lifecycle, DarkModeSnapshotRestorer snapshotRestorer, UiModeManagerWrapper uiModeManager, ThemesUserEventLogger themesUserEventLogger) { mContext = context; mLifecycle = lifecycle; mPowerManager = context.getSystemService(PowerManager.class); mLifecycle.addObserver(this); mSnapshotRestorer = snapshotRestorer; mUiModeManager = uiModeManager; mThemesUserEventLogger = themesUserEventLogger; } Loading Loading @@ -134,13 +137,12 @@ public class DarkModeSectionController implements disableToast.show(); return; } UiModeManager uiModeManager = context.getSystemService(UiModeManager.class); int shortDelay = context.getResources().getInteger(android.R.integer.config_shortAnimTime); new Handler(Looper.getMainLooper()).postDelayed( () -> { mDarkModeSectionView.announceForAccessibility( context.getString(R.string.mode_changed)); uiModeManager.setNightModeActivated(viewActivated); mUiModeManager.setNightModeActivated(viewActivated); mThemesUserEventLogger.logDarkThemeApplied(viewActivated); mSnapshotRestorer.store(viewActivated); }, Loading
src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt +2 −2 Original line number Diff line number Diff line Loading @@ -17,13 +17,13 @@ package com.android.customization.model.mode import android.app.UiModeManager import android.content.Context import android.content.res.Configuration import androidx.annotation.VisibleForTesting import com.android.wallpaper.picker.undo.domain.interactor.SnapshotRestorer import com.android.wallpaper.picker.undo.domain.interactor.SnapshotStore import com.android.wallpaper.picker.undo.shared.model.RestorableSnapshot import com.android.wallpaper.system.UiModeManagerWrapper import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext Loading @@ -37,7 +37,7 @@ class DarkModeSnapshotRestorer : SnapshotRestorer { constructor( context: Context, manager: UiModeManager, manager: UiModeManagerWrapper, backgroundDispatcher: CoroutineDispatcher, ) : this( backgroundDispatcher = backgroundDispatcher, Loading
src/com/android/customization/module/ThemePickerInjector.kt +10 −16 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.customization.module import android.app.Activity import android.app.UiModeManager import android.app.WallpaperColors import android.app.WallpaperManager import android.content.Context Loading Loading @@ -144,7 +143,7 @@ constructor( wallpaperColorsRepository = getWallpaperColorsRepository(), ), getKeyguardQuickAffordancePickerViewModelFactory(appContext), getColorContrastSectionViewModelFactory(appContext), getColorContrastSectionViewModelFactory(), getNotificationSectionViewModelFactory(appContext), getFlags(), getClockCarouselViewModelFactory( Loading Loading @@ -236,27 +235,22 @@ constructor( .also { wallpaperInteractor = it } } private fun getColorContrastSectionInteractorImpl( context: Context ): ColorContrastSectionInteractor { private fun getColorContrastSectionInteractorImpl(): ColorContrastSectionInteractor { return ColorContrastSectionInteractor( ColorContrastSectionRepository(context, bgDispatcher), ColorContrastSectionRepository(uiModeManager, bgDispatcher), ) } fun getColorContrastSectionInteractor(context: Context): ColorContrastSectionInteractor { fun getColorContrastSectionInteractor(): ColorContrastSectionInteractor { return colorContrastSectionInteractor ?: getColorContrastSectionInteractorImpl(context).also { colorContrastSectionInteractor = it } ?: getColorContrastSectionInteractorImpl().also { colorContrastSectionInteractor = it } } fun getColorContrastSectionViewModelFactory( context: Context ): ColorContrastSectionViewModel.Factory { fun getColorContrastSectionViewModelFactory(): ColorContrastSectionViewModel.Factory { return colorContrastSectionViewModelFactory ?: ColorContrastSectionViewModel.Factory(getColorContrastSectionInteractor(context)) .also { colorContrastSectionViewModelFactory = it } ?: ColorContrastSectionViewModel.Factory(getColorContrastSectionInteractor()).also { colorContrastSectionViewModelFactory = it } } override fun getKeyguardQuickAffordancePickerInteractor( Loading Loading @@ -495,7 +489,7 @@ constructor( return darkModeSnapshotRestorer ?: DarkModeSnapshotRestorer( context = appContext, manager = appContext.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager, manager = uiModeManager, backgroundDispatcher = bgDispatcher, ) .also { darkModeSnapshotRestorer = it } Loading
src/com/android/customization/picker/color/ui/fragment/ColorPickerFragment.kt +1 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,7 @@ class ColorPickerFragment : AppbarFragment() { context, lifecycle, injector.getDarkModeSnapshotRestorer(requireContext()), injector.uiModeManager, injector.getUserEventLogger(), ) .createView(requireContext()) Loading
src/com/android/customization/picker/settings/data/repository/ColorContrastSectionRepository.kt +7 −10 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ package com.android.customization.picker.settings.data.repository import android.app.UiModeManager import android.content.Context import android.content.Context.UI_MODE_SERVICE import com.android.wallpaper.system.UiModeManagerWrapper import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.asExecutor Loading @@ -26,13 +25,11 @@ import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow open class ColorContrastSectionRepository( private val context: Context, class ColorContrastSectionRepository( uiModeManager: UiModeManagerWrapper, private val bgDispatcher: CoroutineDispatcher ) { var uiModeManager = context.applicationContext.getSystemService(UI_MODE_SERVICE) as UiModeManager? open var contrast: Flow<Float> = callbackFlow { var contrast: Flow<Float> = callbackFlow { val executor: Executor = bgDispatcher.asExecutor() val listener = UiModeManager.ContrastChangeListener { contrast -> Loading @@ -41,13 +38,13 @@ open class ColorContrastSectionRepository( } // Emit the current contrast value immediately uiModeManager?.contrast?.let { currentContrast -> trySend(currentContrast) } uiModeManager.getContrast()?.let { currentContrast -> trySend(currentContrast) } uiModeManager?.addContrastChangeListener(executor, listener) uiModeManager.addContrastChangeListener(executor, listener) awaitClose { // Unregister the listener when the flow collection is cancelled or no longer in use uiModeManager?.removeContrastChangeListener(listener) uiModeManager.removeContrastChangeListener(listener) } } }