Merge "Fix repetitive clock color options when onResume" into main
diff --git a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java
index 6c738c7..be7da04 100644
--- a/src/com/android/customization/model/themedicon/ThemedIconSectionController.java
+++ b/src/com/android/customization/model/themedicon/ThemedIconSectionController.java
@@ -29,6 +29,7 @@
 import com.android.wallpaper.R;
 import com.android.wallpaper.model.CustomizationSectionController;
 
+// TODO (b/311712452): Refactor CustomizationSectionController to use recommended arch UI components
 /** The {@link CustomizationSectionController} for themed icon section. */
 public class ThemedIconSectionController implements
         CustomizationSectionController<ThemedIconSectionView> {
diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
index 6080194..3eca624 100644
--- a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
+++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractor.kt
@@ -64,7 +64,7 @@
     }
 
     /** Unselects all affordances from the slot with the given ID. */
-    suspend fun unselectAll(slotId: String) {
+    suspend fun unselectAllFromSlot(slotId: String) {
         client.deleteAllSelections(
             slotId = slotId,
         )
@@ -72,6 +72,11 @@
         snapshotRestorer.get().storeSnapshot()
     }
 
+    /** Unselects all affordances from all slots. */
+    suspend fun unselectAll() {
+        client.querySlots().forEach { client.deleteAllSelections(it.id) }
+    }
+
     /** Returns a [Drawable] for the given resource ID, from the system UI package. */
     suspend fun getAffordanceIcon(
         @DrawableRes iconResourceId: Int,
diff --git a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt
index 3c7928c..fee0cb5 100644
--- a/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt
+++ b/src/com/android/customization/picker/quickaffordance/domain/interactor/KeyguardQuickAffordanceSnapshotRestorer.kt
@@ -42,9 +42,14 @@
     }
 
     override suspend fun restoreToSnapshot(snapshot: RestorableSnapshot) {
+        // reset all current selections
+        interactor.unselectAll()
+
+        val allSelections = checkNotNull(snapshot.args[KEY_SELECTIONS])
+        if (allSelections.isEmpty()) return
+
         val selections: List<Pair<String, String>> =
-            checkNotNull(snapshot.args[KEY_SELECTIONS]).split(SELECTION_SEPARATOR).map { selection
-                ->
+            allSelections.split(SELECTION_SEPARATOR).map { selection ->
                 val (slotId, affordanceId) = selection.split(SLOT_AFFORDANCE_SEPARATOR)
                 slotId to affordanceId
             }
diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
index 42aced9..260c0d3 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
@@ -217,7 +217,9 @@
                             if (!isSelected) {
                                 {
                                     viewModelScope.launch {
-                                        quickAffordanceInteractor.unselectAll(selectedSlotId)
+                                        quickAffordanceInteractor.unselectAllFromSlot(
+                                            selectedSlotId
+                                        )
                                         logger.logShortcutApplied(
                                             shortcut = "none",
                                             shortcutSlotId = selectedSlotId,
diff --git a/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java b/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java
index 3e03a41..f83da8c 100644
--- a/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java
+++ b/src/com/android/customization/picker/themedicon/ThemedIconSectionView.java
@@ -40,18 +40,16 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
         mSwitchView = findViewById(R.id.themed_icon_toggle);
-        setOnClickListener(v -> mSwitchView.toggle());
-        mSwitchView.setOnCheckedChangeListener((buttonView, isChecked) -> viewActivated(isChecked));
+        setOnClickListener(v -> {
+            mSwitchView.toggle();
+            if (mSectionViewListener != null) {
+                mSectionViewListener.onViewActivated(getContext(), mSwitchView.isChecked());
+            }
+        });
     }
 
     /** Gets the switch view. */
     public Switch getSwitch() {
         return mSwitchView;
     }
-
-    private void viewActivated(boolean isChecked) {
-        if (mSectionViewListener != null) {
-            mSectionViewListener.onViewActivated(getContext(), isChecked);
-        }
-    }
 }
diff --git a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
index bf53f61..4b4790a 100644
--- a/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
+++ b/tests/robotests/src/com/android/customization/model/picker/quickaffordance/domain/interactor/KeyguardQuickAffordancePickerInteractorTest.kt
@@ -132,7 +132,7 @@
                 affordanceId = FakeCustomizationProviderClient.AFFORDANCE_3,
             )
 
-            underTest.unselectAll(
+            underTest.unselectAllFromSlot(
                 slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END,
             )