Merge "Fix discard changes when flex clock customization" into main
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
index a5f5d22..f3325a6 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
@@ -166,7 +166,7 @@
                     } else {
                         fun() {
                             overridingClock.value = this
-                            overrideClockFontAxisMap.value = null
+                            overrideClockFontAxisMap.value = emptyMap()
                         }
                     }
                 },
@@ -174,8 +174,7 @@
     }
 
     // Clock Font Axis Editor
-    private val overrideClockFontAxisMap = MutableStateFlow<Map<String, Float>?>(null)
-    private val isFontAxisMapEdited = overrideClockFontAxisMap.map { it != null }
+    private val overrideClockFontAxisMap = MutableStateFlow<Map<String, Float>>(emptyMap())
     val selectedClockFontAxes =
         previewingClock
             .map { clock -> clock.fontAxes }
@@ -184,21 +183,31 @@
         selectedClockFontAxes
             .filterNotNull()
             .map { fontAxes -> fontAxes.associate { it.key to it.currentValue } }
-            .stateIn(viewModelScope, SharingStarted.Eagerly, null)
+            .shareIn(viewModelScope, SharingStarted.WhileSubscribed(), 1)
+    private val isFontAxisMapEdited =
+        combine(overrideClockFontAxisMap, selectedClockFontAxisMap) {
+            overrideClockFontAxisMap,
+            selectedClockFontAxisMap ->
+            !overrideClockFontAxisMap.all { (key, value) -> selectedClockFontAxisMap[key] == value }
+        }
     val previewingClockFontAxisMap =
         combine(overrideClockFontAxisMap, selectedClockFontAxisMap.filterNotNull()) {
                 overrideAxisMap,
                 selectedAxisMap ->
-                overrideAxisMap?.let {
-                    val mutableMap = selectedAxisMap.toMutableMap()
-                    overrideAxisMap.forEach { (key, value) -> mutableMap[key] = value }
-                    mutableMap.toMap()
-                } ?: selectedAxisMap
+                if (overrideAxisMap.isEmpty()) {
+                    selectedAxisMap
+                } else {
+                    overrideAxisMap.let {
+                        val mutableMap = selectedAxisMap.toMutableMap()
+                        overrideAxisMap.forEach { (key, value) -> mutableMap[key] = value }
+                        mutableMap.toMap()
+                    }
+                }
             }
             .stateIn(viewModelScope, SharingStarted.Eagerly, emptyMap())
 
     fun updatePreviewFontAxis(key: String, value: Float) {
-        val axisMap = (overrideClockFontAxisMap.value?.toMutableMap() ?: mutableMapOf())
+        val axisMap = overrideClockFontAxisMap.value.toMutableMap()
         axisMap[key] = value
         overrideClockFontAxisMap.value = axisMap.toMap()
     }
@@ -208,7 +217,7 @@
     }
 
     fun cancelFontAxes() {
-        overrideClockFontAxisMap.value = null
+        overrideClockFontAxisMap.value = emptyMap()
         _selectedTab.value = Tab.STYLE
     }
 
@@ -454,7 +463,7 @@
         overridingClockSize.value = null
         overridingClockColorId.value = null
         overridingSliderProgress.value = null
-        overrideClockFontAxisMap.value = null
+        overrideClockFontAxisMap.value = emptyMap()
         _selectedTab.value = Tab.STYLE
     }