Merge "Animate tab color change when system color is changed (2/2)" into main
diff --git a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
index 6f40cdf..8c4442d 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
@@ -45,7 +45,10 @@
import com.android.wallpaper.customization.ui.viewmodel.ClockPickerViewModel.Tab.SIZE
import com.android.wallpaper.customization.ui.viewmodel.ClockPickerViewModel.Tab.STYLE
import com.android.wallpaper.picker.customization.ui.view.FloatingToolbar
+import com.android.wallpaper.picker.customization.ui.view.adapter.FloatingToolbarTabAdapter
+import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter
+import java.lang.ref.WeakReference
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -65,11 +68,16 @@
fun bind(
view: View,
viewModel: ClockPickerViewModel,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
) {
val appContext = view.context.applicationContext
val tabs = view.requireViewById<FloatingToolbar>(R.id.floating_toolbar)
+ val tabAdapter =
+ FloatingToolbarTabAdapter(WeakReference(colorUpdateViewModel)).also {
+ tabs.setAdapter(it)
+ }
val floatingSheetContainer =
view.requireViewById<ViewGroup>(R.id.clock_floating_sheet_content_container)
@@ -128,7 +136,7 @@
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
- launch { viewModel.tabs.collect { tabs.setItems(it) } }
+ launch { viewModel.tabs.collect { tabAdapter.submitList(it) } }
launch {
combine(clockFloatingSheetHeights, viewModel.selectedTab) { heights, selectedTab
diff --git a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
index 6299a25..c48538a 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
@@ -35,7 +35,10 @@
import com.android.themepicker.R
import com.android.wallpaper.customization.ui.viewmodel.ColorPickerViewModel2
import com.android.wallpaper.picker.customization.ui.view.FloatingToolbar
+import com.android.wallpaper.picker.customization.ui.view.adapter.FloatingToolbarTabAdapter
+import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter
+import java.lang.ref.WeakReference
import kotlinx.coroutines.launch
object ColorsFloatingSheetBinder {
@@ -43,6 +46,7 @@
fun bind(
view: View,
viewModel: ColorPickerViewModel2,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
) {
val subhead = view.requireViewById<TextView>(R.id.color_type_tab_subhead)
@@ -55,10 +59,14 @@
}
val tabs = view.requireViewById<FloatingToolbar>(R.id.floating_toolbar)
+ val tabAdapter =
+ FloatingToolbarTabAdapter(WeakReference(colorUpdateViewModel)).also {
+ tabs.setAdapter(it)
+ }
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
- launch { viewModel.colorTypeTabs.collect { tabs.setItems(it) } }
+ launch { viewModel.colorTypeTabs.collect { tabAdapter.submitList(it) } }
launch { viewModel.colorTypeTabSubheader.collect { subhead.text = it } }
diff --git a/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
index 9f13888..e07fef8 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
@@ -34,7 +34,10 @@
import com.android.wallpaper.picker.common.icon.ui.viewbinder.IconViewBinder
import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
import com.android.wallpaper.picker.customization.ui.view.FloatingToolbar
+import com.android.wallpaper.picker.customization.ui.view.adapter.FloatingToolbarTabAdapter
+import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter
+import java.lang.ref.WeakReference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collectIndexed
import kotlinx.coroutines.flow.combine
@@ -48,6 +51,7 @@
fun bind(
view: View,
viewModel: KeyguardQuickAffordancePickerViewModel2,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
) {
val quickAffordanceAdapter = createOptionItemAdapter(lifecycleOwner)
@@ -57,12 +61,16 @@
}
val tabs = view.requireViewById<FloatingToolbar>(R.id.floating_toolbar)
+ val tabAdapter =
+ FloatingToolbarTabAdapter(WeakReference(colorUpdateViewModel)).also {
+ tabs.setAdapter(it)
+ }
var dialog: Dialog? = null
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
- launch { viewModel.tabs.collect { tabs.setItems(it) } }
+ launch { viewModel.tabs.collect { tabAdapter.submitList(it) } }
launch {
viewModel.quickAffordances.collect { affordances ->
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index ba6fc8b..e09a619 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -33,6 +33,7 @@
import com.android.wallpaper.picker.customization.ui.binder.CustomizationOptionsBinder
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 javax.inject.Inject
import javax.inject.Singleton
@@ -50,6 +51,7 @@
homeScreenCustomizationOptionEntries: List<Pair<CustomizationOption, View>>,
customizationOptionFloatingSheetViewMap: Map<CustomizationOption, View>?,
viewModel: CustomizationOptionsViewModel,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
) {
defaultCustomizationOptionsBinder.bind(
@@ -58,7 +60,8 @@
homeScreenCustomizationOptionEntries,
customizationOptionFloatingSheetViewMap,
viewModel,
- lifecycleOwner
+ colorUpdateViewModel,
+ lifecycleOwner,
)
val optionClock =
@@ -147,6 +150,7 @@
ClockFloatingSheetBinder.bind(
it,
viewModel.clockPickerViewModel,
+ colorUpdateViewModel,
lifecycleOwner,
)
}
@@ -157,6 +161,7 @@
ShortcutFloatingSheetBinder.bind(
it,
viewModel.keyguardQuickAffordancePickerViewModel2,
+ colorUpdateViewModel,
lifecycleOwner,
)
}
@@ -167,6 +172,7 @@
ColorsFloatingSheetBinder.bind(
it,
viewModel.colorPickerViewModel2,
+ colorUpdateViewModel,
lifecycleOwner,
)
}