Morph animations for customization options (1/2)
Test: Manually tested. See bug
Bug: 370977390
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: I18f0f7fc20530b9e53764be909cc41f8232797ea
diff --git a/res/layout/quick_affordance_list_item2.xml b/res/layout/quick_affordance_list_item2.xml
new file mode 100644
index 0000000..9dd7557
--- /dev/null
+++ b/res/layout/quick_affordance_list_item2.xml
@@ -0,0 +1,58 @@
+<?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.
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="@dimen/keyguard_quick_affordance_background_size"
+ android:layout_height="wrap_content"
+ android:clipChildren="false">
+
+ <com.android.wallpaper.picker.option.ui.view.OptionItemBackground
+ android:id="@id/background"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/keyguard_quick_affordance_background_size"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/text"
+ android:layout_marginBottom="@dimen/keyguard_quick_affordance_background_margin_bottom"
+ android:importantForAccessibility="no" />
+
+ <ImageView
+ android:id="@id/foreground"
+ android:layout_width="@dimen/keyguard_quick_affordance_icon_size"
+ android:layout_height="@dimen/keyguard_quick_affordance_icon_size"
+ app:layout_constraintStart_toStartOf="@id/background"
+ app:layout_constraintEnd_toEndOf="@id/background"
+ app:layout_constraintTop_toTopOf="@id/background"
+ app:layout_constraintBottom_toBottomOf="@id/background"
+ android:tint="@color/system_on_surface"
+ android:importantForAccessibility="no" />
+
+ <TextView
+ android:id="@id/text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/background"
+ app:layout_constraintBottom_toBottomOf="parent"
+ android:gravity="center_horizontal"
+ android:textColor="@color/system_on_surface"
+ android:lines="2"
+ android:hyphenationFrequency="normal"
+ android:ellipsize="end" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 9af13bf..36743db 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -159,6 +159,8 @@
<dimen name="keyguard_quick_affordance_icon_container_size">74dp</dimen>
<!-- Size for the icon of a quick affordance for the lock screen in the picker experience. -->
<dimen name="keyguard_quick_affordance_icon_size">24dp</dimen>
+ <dimen name="keyguard_quick_affordance_background_size">64dp</dimen>
+ <dimen name="keyguard_quick_affordance_background_margin_bottom">8dp</dimen>
<dimen name="clock_carousel_item_width">190dp</dimen>
<dimen name="clock_carousel_item_margin">16dp</dimen>
diff --git a/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
index bc8ff96..0fdf931 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ShortcutFloatingSheetBinder.kt
@@ -37,7 +37,7 @@
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 com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter2
import java.lang.ref.WeakReference
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collectIndexed
@@ -67,7 +67,7 @@
val tabAdapter =
FloatingToolbarTabAdapter(
colorUpdateViewModel = WeakReference(colorUpdateViewModel),
- shouldAnimateColor = { optionsViewModel.selectedOption.value == SHORTCUTS }
+ shouldAnimateColor = { optionsViewModel.selectedOption.value == SHORTCUTS },
)
.also { tabs.setAdapter(it) }
@@ -116,7 +116,7 @@
showDialog(
context = view.context,
request = dialogRequest,
- onDismissed = viewModel::onDialogDismissed
+ onDismissed = viewModel::onDialogDismissed,
)
} else {
null
@@ -148,9 +148,9 @@
)
}
- private fun createOptionItemAdapter(lifecycleOwner: LifecycleOwner): OptionItemAdapter<Icon> =
- OptionItemAdapter(
- layoutResourceId = R.layout.quick_affordance_list_item,
+ private fun createOptionItemAdapter(lifecycleOwner: LifecycleOwner): OptionItemAdapter2<Icon> =
+ OptionItemAdapter2(
+ layoutResourceId = R.layout.quick_affordance_list_item2,
lifecycleOwner = lifecycleOwner,
bindIcon = { foregroundView: View, gridIcon: Icon ->
val imageView = foregroundView as? ImageView
@@ -160,17 +160,11 @@
private fun RecyclerView.initQuickAffordanceList(
context: Context,
- adapter: OptionItemAdapter<Icon>
+ adapter: OptionItemAdapter2<Icon>,
) {
apply {
this.adapter = adapter
- layoutManager =
- GridLayoutManager(
- context,
- 2,
- GridLayoutManager.HORIZONTAL,
- false,
- )
+ layoutManager = GridLayoutManager(context, 2, GridLayoutManager.HORIZONTAL, false)
addItemDecoration(
DoubleRowListItemSpacing(
context.resources.getDimensionPixelSize(