Discard changes dailog (1/2)
The dialog pops up when users make changes to the preivew but yet apply
the changes and try to leave the screen.
Test: Manually tested
Fixes: 376092973
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: I3d93183edda086a301a912acee17c9a19467cae3
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index efa922b..1faf971 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -16,6 +16,7 @@
package com.android.wallpaper.customization.ui.binder
+import android.app.Activity
import android.content.Context
import android.view.View
import android.view.ViewGroup
@@ -52,6 +53,7 @@
import com.android.wallpaper.picker.customization.ui.binder.DefaultCustomizationOptionsBinder
import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil.CustomizationOption
import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
+import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationPickerViewModel2
import javax.inject.Inject
import javax.inject.Singleton
@@ -417,5 +419,17 @@
}
}
+ override fun bindDiscardChangesDialog(
+ customizationOptionsViewModel: CustomizationOptionsViewModel,
+ lifecycleOwner: LifecycleOwner,
+ activity: Activity,
+ ) {
+ defaultCustomizationOptionsBinder.bindDiscardChangesDialog(
+ customizationOptionsViewModel,
+ lifecycleOwner,
+ activity,
+ )
+ }
+
data class Quadruple<A, B, C, D>(val first: A, val second: B, val third: C, val fourth: D)
}
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
index 6b7fa83..99746e0 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
@@ -30,6 +30,7 @@
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flatMapLatest
@@ -69,6 +70,9 @@
override val selectedOption = defaultCustomizationOptionsViewModel.selectedOption
+ override val discardChangesDialogViewModel =
+ defaultCustomizationOptionsViewModel.discardChangesDialogViewModel
+
override fun handleBackPressed(): Boolean {
if (
@@ -80,6 +84,11 @@
return true
}
+ if (isApplyButtonEnabled.value) {
+ defaultCustomizationOptionsViewModel.showDiscardChangesDialogViewModel()
+ return true
+ }
+
return defaultCustomizationOptionsViewModel.handleBackPressed()
}
@@ -193,7 +202,10 @@
}
.stateIn(viewModelScope, SharingStarted.Eagerly, null)
- val isApplyButtonEnabled: Flow<Boolean> = onApplyButtonClicked.map { it != null }
+ val isApplyButtonEnabled: StateFlow<Boolean> =
+ onApplyButtonClicked
+ .map { it != null }
+ .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false)
val isApplyButtonVisible: Flow<Boolean> = selectedOption.map { it != null }