Shortcut option entry
Make the entry observe summary updates and change accordingly
Test: Manually tested. See bug.
Bug: 350718583
Flag: com.android.wallpaper.new_picker_ui_flag
Change-Id: Idb3b52b9aa8a7fc0ec6434cdfed3328f7788149d
diff --git a/res/drawable/customization_option_entry_icon_background.xml b/res/drawable/customization_option_entry_icon_background.xml
index b92fa0e..3166ea7 100644
--- a/res/drawable/customization_option_entry_icon_background.xml
+++ b/res/drawable/customization_option_entry_icon_background.xml
@@ -16,6 +16,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
- <solid android:color="@color/picker_section_icon_background" />
+ <solid android:color="@color/system_surface_container" />
<corners android:radius="18dp" />
</shape>
\ No newline at end of file
diff --git a/res/drawable/horizontal_divider_4dp.xml b/res/drawable/horizontal_divider_4dp.xml
new file mode 100644
index 0000000..db343c1
--- /dev/null
+++ b/res/drawable/horizontal_divider_4dp.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <size
+ android:width="4dp"
+ android:height="0dp" />
+</shape>
diff --git a/res/layout/customization_option_entry_keyguard_quick_affordance.xml b/res/layout/customization_option_entry_keyguard_quick_affordance.xml
index 475c8e5..d4d30dd 100644
--- a/res/layout/customization_option_entry_keyguard_quick_affordance.xml
+++ b/res/layout/customization_option_entry_keyguard_quick_affordance.xml
@@ -56,8 +56,8 @@
android:layout_height="@dimen/customization_option_entry_icon_size"
android:orientation="horizontal"
android:background="@drawable/customization_option_entry_icon_background"
- android:divider="@drawable/horizontal_divider_14dp"
- android:layout_gravity="center"
+ android:gravity="center"
+ android:divider="@drawable/horizontal_divider_4dp"
android:showDividers="middle"
android:importantForAccessibility="noHideDescendants"
app:layout_constraintEnd_toEndOf="parent"
@@ -66,15 +66,15 @@
<ImageView
android:id="@+id/option_entry_keyguard_quick_affordance_icon_1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/customization_option_entry_shortcut_icon_size"
+ android:layout_height="@dimen/customization_option_entry_shortcut_icon_size"
android:visibility="gone"
android:tint="@color/system_on_surface" />
<ImageView
android:id="@+id/option_entry_keyguard_quick_affordance_icon_2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/customization_option_entry_shortcut_icon_size"
+ android:layout_height="@dimen/customization_option_entry_shortcut_icon_size"
android:visibility="gone"
android:tint="@color/system_on_surface" />
</LinearLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ed9b816..99519ae 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -186,4 +186,5 @@
<dimen name="floating_sheet_clock_size_icon_margin_bottom">8dp</dimen>
<dimen name="floating_sheet_clock_style_option_size">82dp</dimen>
<dimen name="floating_sheet_clock_style_thumbnail_margin">12dp</dimen>
+ <dimen name="customization_option_entry_shortcut_icon_size">20dp</dimen>
</resources>
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 3fda451..f20bc2e 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -17,13 +17,19 @@
package com.android.wallpaper.customization.ui.binder
import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
+import com.android.themepicker.R
import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption
import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsViewModel
+import com.android.wallpaper.picker.common.icon.ui.viewbinder.IconViewBinder
+import com.android.wallpaper.picker.common.text.ui.viewbinder.TextViewBinder
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
@@ -59,16 +65,30 @@
lockScreenCustomizationOptionEntries
.find { it.first == ThemePickerLockCustomizationOption.CLOCK }
?.second
+
val optionShortcut =
lockScreenCustomizationOptionEntries
.find { it.first == ThemePickerLockCustomizationOption.SHORTCUTS }
?.second
+ val optionShortcutDescription =
+ optionShortcut?.findViewById<TextView>(
+ R.id.option_entry_keyguard_quick_affordance_description
+ )
+ val optionShortcutIcon1 =
+ optionShortcut?.findViewById<ImageView>(
+ R.id.option_entry_keyguard_quick_affordance_icon_1
+ )
+ val optionShortcutIcon2 =
+ optionShortcut?.findViewById<ImageView>(
+ R.id.option_entry_keyguard_quick_affordance_icon_2
+ )
+
val optionColors =
homeScreenCustomizationOptionEntries
.find { it.first == ThemePickerHomeCustomizationOption.COLORS }
?.second
- viewModel as ThemePickerCustomizationOptionsViewModel
+ viewModel as ThemePickerCustomizationOptionsViewModel
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
@@ -84,6 +104,36 @@
}
launch {
+ viewModel.keyguardQuickAffordanceSummery.collect { summary ->
+ optionShortcutDescription?.let {
+ TextViewBinder.bind(
+ view = it,
+ viewModel = summary.description,
+ )
+ }
+ summary.icon1?.let { icon ->
+ optionShortcutIcon1?.let {
+ IconViewBinder.bind(
+ view = it,
+ viewModel = icon,
+ )
+ }
+ }
+ optionShortcutIcon1?.isVisible = summary.icon1 != null
+
+ summary.icon2?.let { icon ->
+ optionShortcutIcon2?.let {
+ IconViewBinder.bind(
+ view = it,
+ viewModel = icon,
+ )
+ }
+ }
+ optionShortcutIcon2?.isVisible = summary.icon2 != null
+ }
+ }
+
+ launch {
viewModel.onCustomizeColorsClicked.collect {
optionColors?.setOnClickListener { _ -> it?.invoke() }
}
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt b/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
index f717d8f..67beb25 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/KeyguardQuickAffordancePickerViewModel2.kt
@@ -24,6 +24,7 @@
import com.android.customization.module.logging.ThemesUserEventLogger
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordanceSlotViewModel
+import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordanceSummaryViewModel
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
import com.android.themepicker.R
import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonStyle
@@ -59,7 +60,6 @@
private val logger: ThemesUserEventLogger,
@Assisted private val viewModelScope: CoroutineScope,
) {
-
/** A locally-selected slot, if the user ever switched from the original one. */
private val _selectedSlotId = MutableStateFlow<String?>(null)
/** The ID of the selected slot. */
@@ -390,6 +390,35 @@
return quickAffordanceInteractor.getAffordanceIcon(iconResourceId)
}
+ val summary: Flow<KeyguardQuickAffordanceSummaryViewModel> =
+ slots.map { slots ->
+ val icon2 =
+ (slots[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END]
+ ?.selectedQuickAffordances
+ ?.firstOrNull())
+ ?.payload
+ val icon1 =
+ (slots[KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START]
+ ?.selectedQuickAffordances
+ ?.firstOrNull())
+ ?.payload
+
+ KeyguardQuickAffordanceSummaryViewModel(
+ description = toDescriptionText(applicationContext, slots),
+ icon1 =
+ icon1
+ ?: if (icon2 == null) {
+ Icon.Resource(
+ res = R.drawable.link_off,
+ contentDescription = null,
+ )
+ } else {
+ null
+ },
+ icon2 = icon2,
+ )
+ }
+
private fun toDescriptionText(
context: Context,
slots: Map<String, KeyguardQuickAffordanceSlotViewModel>,
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
index e50a090..79671d6 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt
@@ -77,6 +77,8 @@
}
}
+ val keyguardQuickAffordanceSummery = keyguardQuickAffordancePickerViewModel2.summary
+
val onCustomizeColorsClicked: Flow<(() -> Unit)?> =
selectedOption.map {
if (it == null) {