Snap for 12644741 from 411a86cd2084cc45129056481ea31df99e266cc9 to 25Q1-release
Change-Id: If90acde106a8d4f560e2d2199f339eb1c438b654
diff --git a/res/layout/fragment_clock_picker.xml b/res/layout/fragment_clock_picker.xml
index 8ca4863..ee4a24d 100644
--- a/res/layout/fragment_clock_picker.xml
+++ b/res/layout/fragment_clock_picker.xml
@@ -62,10 +62,10 @@
<Space
android:id="@+id/placeholder"
android:layout_width="match_parent"
- android:layout_height="@dimen/min_taptarget_height"
+ android:layout_height="@dimen/accessibility_min_height"
app:layout_constraintBottom_toTopOf="@id/apply_button"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHeight_min="@dimen/min_taptarget_height"
+ app:layout_constraintHeight_min="@dimen/accessibility_min_height"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/options_container"
diff --git a/res/layout/fragment_clock_settings.xml b/res/layout/fragment_clock_settings.xml
index 75dae7e..d6ccaba 100644
--- a/res/layout/fragment_clock_settings.xml
+++ b/res/layout/fragment_clock_settings.xml
@@ -150,7 +150,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:minHeight="48dp"
+ android:minHeight="@dimen/accessibility_min_height"
android:thumb="@null"
android:contentDescription="@string/accessibility_clock_slider_description"
android:background="@null"
@@ -169,6 +169,7 @@
<RadioButton android:id="@+id/radio_dynamic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:minHeight="@dimen/accessibility_min_height"
android:paddingStart="8dp"
android:maxLines="3"
android:ellipsize="end"
@@ -178,6 +179,7 @@
<RadioButton android:id="@+id/radio_small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:minHeight="@dimen/accessibility_min_height"
android:paddingStart="8dp"
android:maxLines="3"
android:ellipsize="end"
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 3d9288a..2f88265 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -40,7 +40,7 @@
<string name="clock_size" msgid="5028923902364418263">"Hajmi"</string>
<string name="clock_size_dynamic" msgid="1023930312455061642">"Dinamik"</string>
<string name="clock_size_dynamic_description" msgid="2776620745774561662">"Soat hajmi ekran qulfidagi kontent asosida oʻzgaradi"</string>
- <string name="clock_size_large" msgid="3143248715744138979">"Yirik"</string>
+ <string name="clock_size_large" msgid="3143248715744138979">"Katta"</string>
<string name="clock_size_small" msgid="2280449912094164133">"Kichik"</string>
<string name="clock_size_small_description" msgid="4089511196955732480">"Ekran chekkasida kichik soat chiqishi"</string>
<string name="clock_font_editor_apply" msgid="5965611025879105293">"Soat shrifti oʻzgarishlarini qoʻllash"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e5d21ea..9c5e84d 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -122,8 +122,6 @@
<!-- For a corner radius of this size or larger, we'll preview a rounded qsb widget. -->
<dimen name="roundCornerThreshold">16dp</dimen>
- <dimen name="min_taptarget_height">48dp</dimen>
-
<!-- For the style info preview sheet. -->
<dimen name="theme_info_margin">12dp</dimen>
<dimen name="theme_info_icon_size">24dp</dimen>
diff --git a/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt b/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
index 2bcb644..f51d966 100644
--- a/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
+++ b/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
@@ -22,6 +22,7 @@
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
@ViewModelScoped
@@ -31,7 +32,8 @@
private val isDarkMode = interactor.isDarkMode
val isEnabled = interactor.isEnabled
- private val overridingIsDarkMode = MutableStateFlow<Boolean?>(null)
+ private val _overridingIsDarkMode = MutableStateFlow<Boolean?>(null)
+ val overridingIsDarkMode = _overridingIsDarkMode.asStateFlow()
val previewingIsDarkMode =
combine(overridingIsDarkMode, isDarkMode, isEnabled) { override, current, isEnabled ->
if (isEnabled) {
@@ -41,7 +43,8 @@
val toggleDarkMode =
combine(overridingIsDarkMode, isDarkMode) { override, current ->
- { overridingIsDarkMode.value = override?.not() ?: !current }
+ // Only set override if its value is different from current, else set to null
+ { _overridingIsDarkMode.value = if (override == null) !current else null }
}
val onApply: Flow<(suspend () -> Unit)?> =
@@ -55,6 +58,6 @@
}
fun resetPreview() {
- overridingIsDarkMode.value = null
+ _overridingIsDarkMode.value = null
}
}
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 469db6d..6bdd6ce 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -238,6 +238,7 @@
context: Context,
clockHostView: View,
viewModel: CustomizationPickerViewModel2,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
clockViewFactory: ClockViewFactory,
) {
@@ -295,12 +296,12 @@
clockPickerViewModel.previewingSeedColor,
clockPickerViewModel.previewingClock,
clockPickerViewModel.previewingFontAxisMap,
- ::Triple,
+ colorUpdateViewModel.systemColorsUpdated,
+ ::Quadruple,
)
- .collect { triple ->
- val (color, clock, axisMap) = triple
+ .collect { quadruple ->
+ val (color, clock, axisMap, _) = quadruple
clockViewFactory.updateColor(clock.clockId, color)
-
val axisList = axisMap.map { ClockFontAxisSetting(it.key, it.value) }
clockViewFactory.updateFontAxes(clock.clockId, axisList)
}
@@ -308,4 +309,6 @@
}
}
}
+
+ 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/ClockPickerViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
index da3e65c..c0f0ba7 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
@@ -36,6 +36,7 @@
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
import com.android.wallpaper.picker.di.modules.BackgroundDispatcher
import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel2
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -127,7 +128,7 @@
data class ClockStyleModel(val thumbnail: Drawable, val showEditButton: StateFlow<Boolean>)
@OptIn(ExperimentalCoroutinesApi::class)
- val clockStyleOptions: StateFlow<List<OptionItemViewModel<ClockStyleModel>>> =
+ val clockStyleOptions: StateFlow<List<OptionItemViewModel2<ClockStyleModel>>> =
clockPickerInteractor.allClocks
.mapLatest { allClocks ->
// Delay to avoid the case that the full list of clocks is not initiated.
@@ -146,13 +147,13 @@
private suspend fun ClockMetadataModel.toOption(
resources: Resources
- ): OptionItemViewModel<ClockStyleModel> {
+ ): OptionItemViewModel2<ClockStyleModel> {
val isSelectedFlow = previewingClock.map { it.clockId == clockId }.stateIn(viewModelScope)
val isEditable = fontAxes.isNotEmpty()
val showEditButton = isSelectedFlow.map { it && isEditable }.stateIn(viewModelScope)
val contentDescription =
resources.getString(R.string.select_clock_action_description, description)
- return OptionItemViewModel<ClockStyleModel>(
+ return OptionItemViewModel2<ClockStyleModel>(
key = MutableStateFlow(clockId) as StateFlow<String>,
payload = ClockStyleModel(thumbnail = thumbnail, showEditButton = showEditButton),
text = Text.Loaded(contentDescription),
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
index 26e7867..e7efebd 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
@@ -27,7 +27,7 @@
import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
-import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel2
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -109,7 +109,7 @@
/** The list of all color options mapped by their color type */
private val allColorOptions:
- Flow<Map<ColorType, List<OptionItemViewModel<ColorOptionIconViewModel>>>> =
+ Flow<Map<ColorType, List<OptionItemViewModel2<ColorOptionIconViewModel>>>> =
interactor.colorOptions.map { colorOptions ->
colorOptions
.map { colorOptionEntry ->
@@ -128,7 +128,7 @@
?: colorOptionModel.isSelected
}
.stateIn(viewModelScope)
- OptionItemViewModel<ColorOptionIconViewModel>(
+ OptionItemViewModel2<ColorOptionIconViewModel>(
key = MutableStateFlow(colorOptionModel.key) as StateFlow<String>,
payload =
ColorOptionIconViewModel(
@@ -188,9 +188,9 @@
}
/** The list of all available color options for the selected Color Type. */
- val colorOptions: Flow<List<OptionItemViewModel<ColorOptionIconViewModel>>> =
+ val colorOptions: Flow<List<OptionItemViewModel2<ColorOptionIconViewModel>>> =
combine(allColorOptions, selectedColorTypeTabId) {
- allColorOptions: Map<ColorType, List<OptionItemViewModel<ColorOptionIconViewModel>>>,
+ allColorOptions: Map<ColorType, List<OptionItemViewModel2<ColorOptionIconViewModel>>>,
selectedColorTypeIdOrNull ->
val selectedColorTypeId = selectedColorTypeIdOrNull ?: ColorType.WALLPAPER_COLOR
allColorOptions[selectedColorTypeId]!!
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt b/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
index fd94b78..fd04580 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
@@ -36,6 +36,7 @@
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel2
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -174,7 +175,7 @@
.shareIn(scope = viewModelScope, started = SharingStarted.WhileSubscribed(), replay = 1)
/** The list of all available quick affordances for the selected slot. */
- val quickAffordances: Flow<List<OptionItemViewModel<Icon>>> =
+ val quickAffordances: Flow<List<OptionItemViewModel2<Icon>>> =
quickAffordanceInteractor.affordances.map { affordances ->
val isNoneSelected =
combine(selectedSlotId, previewingQuickAffordances, selectedAffordanceIds) {
@@ -219,7 +220,7 @@
} ?: selectedAffordanceIds.contains(affordance.id)
}
.stateIn(viewModelScope)
- OptionItemViewModel<Icon>(
+ OptionItemViewModel2<Icon>(
key =
selectedSlotId
.map { slotId -> "$slotId::${affordance.id}" }
@@ -374,8 +375,8 @@
slotId: StateFlow<String>,
isSelected: StateFlow<Boolean>,
onSelected: Flow<(() -> Unit)?>,
- ): OptionItemViewModel<Icon> {
- return OptionItemViewModel<Icon>(
+ ): OptionItemViewModel2<Icon> {
+ return OptionItemViewModel2<Icon>(
key = slotId.map { "$it::none" }.stateIn(viewModelScope),
payload = Icon.Resource(res = R.drawable.link_off, contentDescription = null),
text = Text.Resource(res = R.string.keyguard_affordance_none),
diff --git a/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt b/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
index 0656696..6952d91 100644
--- a/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
+++ b/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
@@ -39,6 +39,7 @@
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsViewModel
import com.android.wallpaper.model.Screen
import com.android.wallpaper.picker.common.preview.ui.binder.WorkspaceCallbackBinder.Companion.sendMessage
+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
@@ -56,12 +57,14 @@
override fun bind(
workspaceCallback: Message,
viewModel: CustomizationOptionsViewModel,
+ colorUpdateViewModel: ColorUpdateViewModel,
screen: Screen,
lifecycleOwner: LifecycleOwner,
) {
defaultWorkspaceCallbackBinder.bind(
workspaceCallback = workspaceCallback,
viewModel = viewModel,
+ colorUpdateViewModel = colorUpdateViewModel,
screen = screen,
lifecycleOwner = lifecycleOwner,
)
@@ -158,10 +161,11 @@
launch {
combine(
viewModel.colorPickerViewModel2.previewingColorOption,
- viewModel.darkModeViewModel.previewingIsDarkMode,
- ::Pair,
+ viewModel.darkModeViewModel.overridingIsDarkMode,
+ colorUpdateViewModel.systemColorsUpdated,
+ ::Triple,
)
- .collect { (colorModel, darkMode) ->
+ .collect { (colorModel, darkMode, _) ->
val bundle =
Bundle().apply {
if (colorModel != null) {
@@ -174,7 +178,9 @@
putIntArray(KEY_COLOR_VALUES, colors)
}
- putBoolean(KEY_DARK_MODE, darkMode)
+ if (darkMode != null) {
+ putBoolean(KEY_DARK_MODE, darkMode)
+ }
}
workspaceCallback.sendMessage(MESSAGE_ID_UPDATE_COLOR, bundle)
}
diff --git a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2Test.kt b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2Test.kt
index a4d0ba0..421d8a0 100644
--- a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2Test.kt
+++ b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2Test.kt
@@ -29,7 +29,7 @@
import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel
import com.android.systemui.monet.Style
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
-import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel2
import com.android.wallpaper.testing.FakeSnapshotStore
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth.assertThat
@@ -205,7 +205,7 @@
/** Simulates a user selecting the affordance at the given index, if that is clickable. */
private fun TestScope.selectColorOption(
- colorOptions: () -> List<OptionItemViewModel<ColorOptionIconViewModel>>?,
+ colorOptions: () -> List<OptionItemViewModel2<ColorOptionIconViewModel>>?,
index: Int,
) {
val onClickedFlow = colorOptions()?.get(index)?.onClicked
@@ -235,7 +235,7 @@
*/
private fun TestScope.assertPickerUiState(
colorTypes: List<FloatingToolbarTabViewModel>?,
- colorOptions: List<OptionItemViewModel<ColorOptionIconViewModel>>?,
+ colorOptions: List<OptionItemViewModel2<ColorOptionIconViewModel>>?,
selectedColorTypeText: String,
selectedColorOptionIndex: Int,
) {
@@ -260,7 +260,7 @@
* -1 stands for no color option should be selected
*/
private fun TestScope.assertColorOptionUiState(
- colorOptions: List<OptionItemViewModel<ColorOptionIconViewModel>>?,
+ colorOptions: List<OptionItemViewModel2<ColorOptionIconViewModel>>?,
selectedColorOptionIndex: Int,
) {
var foundSelectedColorOption = false
diff --git a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2Test.kt b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2Test.kt
index b6f249e..a7efc45 100644
--- a/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2Test.kt
+++ b/tests/robotests/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2Test.kt
@@ -30,7 +30,7 @@
import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
import com.android.wallpaper.picker.customization.ui.viewmodel.FloatingToolbarTabViewModel
-import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel2
import com.android.wallpaper.testing.collectLastValue
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.Dispatchers
@@ -149,7 +149,7 @@
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to
FakeCustomizationProviderClient.AFFORDANCE_1,
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to
- FakeCustomizationProviderClient.AFFORDANCE_2
+ FakeCustomizationProviderClient.AFFORDANCE_2,
)
)
@@ -203,7 +203,7 @@
icon =
Icon.Loaded(
FakeCustomizationProviderClient.ICON_1,
- Text.Loaded("Right shortcut")
+ Text.Loaded("Right shortcut"),
),
text = "Right shortcut",
isSelected = true,
@@ -399,7 +399,7 @@
private fun assertQuickAffordance(
testScope: TestScope,
- quickAffordance: OptionItemViewModel<Icon>?,
+ quickAffordance: OptionItemViewModel2<Icon>?,
key: String,
icon: Icon,
text: Text,