diff options
| author | George Zacharia <george.zcharia@gmail.com> | 2023-07-02 14:33:47 +0530 |
|---|---|---|
| committer | George Zacharia <george.zcharia@gmail.com> | 2023-07-02 14:33:47 +0530 |
| commit | 913b11dfd2b52e445c773838c766f0d4f8ba0d05 (patch) | |
| tree | adb07f584833593bad6fca5495927c276ceef531 /src/com/android/customization/model/mode | |
| parent | b2d9a4961b3804f79c151630421d480846fd0176 (diff) | |
| parent | cc6f666d7c0bc3b6927f6e9e3c7e46123be6263d (diff) | |
Merge tag 'android-13.0.0_r52' of https://android.googlesource.com/platform/packages/apps/ThemePicker into HEADHEADt13.0
Android 13.0.0 Release 52 (TQ3A.230605.012)
Change-Id: I2cea11fa2f1f02fbd3c9d21cfc1697a79d42a5b7
Diffstat (limited to 'src/com/android/customization/model/mode')
| -rw-r--r-- | src/com/android/customization/model/mode/DarkModeSectionController.java | 8 | ||||
| -rw-r--r-- | src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt | 101 |
2 files changed, 108 insertions, 1 deletions
diff --git a/src/com/android/customization/model/mode/DarkModeSectionController.java b/src/com/android/customization/model/mode/DarkModeSectionController.java index f56b7092..ebeaa567 100644 --- a/src/com/android/customization/model/mode/DarkModeSectionController.java +++ b/src/com/android/customization/model/mode/DarkModeSectionController.java @@ -59,12 +59,17 @@ public class DarkModeSectionController implements private Context mContext; private DarkModeSectionView mDarkModeSectionView; + private final DarkModeSnapshotRestorer mSnapshotRestorer; - public DarkModeSectionController(Context context, Lifecycle lifecycle) { + public DarkModeSectionController( + Context context, + Lifecycle lifecycle, + DarkModeSnapshotRestorer snapshotRestorer) { mContext = context; mLifecycle = lifecycle; mPowerManager = context.getSystemService(PowerManager.class); mLifecycle.addObserver(this); + mSnapshotRestorer = snapshotRestorer; } @OnLifecycleEvent(Lifecycle.Event.ON_START) @@ -132,6 +137,7 @@ public class DarkModeSectionController implements mDarkModeSectionView.announceForAccessibility( context.getString(R.string.mode_changed)); uiModeManager.setNightModeActivated(viewActivated); + mSnapshotRestorer.store(viewActivated); }, /* delayMillis= */ shortDelay); } diff --git a/src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt b/src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt new file mode 100644 index 00000000..93bd0bfd --- /dev/null +++ b/src/com/android/customization/model/mode/DarkModeSnapshotRestorer.kt @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +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 kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.withContext + +class DarkModeSnapshotRestorer : SnapshotRestorer { + + private val backgroundDispatcher: CoroutineDispatcher + private val isActive: () -> Boolean + private val setActive: suspend (Boolean) -> Unit + + private var store: SnapshotStore = SnapshotStore.NOOP + + constructor( + context: Context, + manager: UiModeManager, + backgroundDispatcher: CoroutineDispatcher, + ) : this( + backgroundDispatcher = backgroundDispatcher, + isActive = { + context.applicationContext.resources.configuration.uiMode and + Configuration.UI_MODE_NIGHT_YES != 0 + }, + setActive = { isActive -> manager.setNightModeActivated(isActive) }, + ) + + @VisibleForTesting + constructor( + backgroundDispatcher: CoroutineDispatcher, + isActive: () -> Boolean, + setActive: suspend (Boolean) -> Unit, + ) { + this.backgroundDispatcher = backgroundDispatcher + this.isActive = isActive + this.setActive = setActive + } + + override suspend fun setUpSnapshotRestorer(store: SnapshotStore): RestorableSnapshot { + this.store = store + return snapshot( + isActivated = isActive(), + ) + } + + override suspend fun restoreToSnapshot(snapshot: RestorableSnapshot) { + val isActivated = snapshot.args[KEY]?.toBoolean() == true + withContext(backgroundDispatcher) { setActive(isActivated) } + } + + fun store( + isActivated: Boolean, + ) { + store.store( + snapshot( + isActivated = isActivated, + ), + ) + } + + private fun snapshot( + isActivated: Boolean, + ): RestorableSnapshot { + return RestorableSnapshot( + args = + buildMap { + put( + KEY, + isActivated.toString(), + ) + } + ) + } + + companion object { + private const val KEY = "is_activated" + } +} |
