Merge "Implementing navigation handling for carousel (2)" into main
diff --git a/res/layout/floating_sheet_clock_color_content.xml b/res/layout/floating_sheet_clock_color_content.xml
index acd274a..79e5b9a 100644
--- a/res/layout/floating_sheet_clock_color_content.xml
+++ b/res/layout/floating_sheet_clock_color_content.xml
@@ -16,6 +16,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="@dimen/floating_sheet_content_vertical_padding"
@@ -69,16 +70,15 @@
android:clipToPadding="false" />
</FrameLayout>
- <SeekBar
+ <com.google.android.material.slider.Slider
android:id="@+id/clock_color_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingHorizontal="@dimen/floating_sheet_content_horizontal_padding"
android:minHeight="@dimen/touch_target_min_height"
- android:thumb="@null"
android:contentDescription="@string/accessibility_clock_slider_description"
- android:background="@null"
- android:progressDrawable="@drawable/saturation_progress_drawable"
- android:splitTrack="false" />
+ app:trackHeight="@dimen/slider_track_height"
+ app:thumbHeight="@dimen/slider_thumb_height"
+ android:theme="@style/Theme.Material3.DynamicColors.DayNight" />
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/floating_sheet_clock_font_content.xml b/res/layout/floating_sheet_clock_font_content.xml
index 164b625..ba6c70c 100644
--- a/res/layout/floating_sheet_clock_font_content.xml
+++ b/res/layout/floating_sheet_clock_font_content.xml
@@ -40,7 +40,7 @@
style="@style/CustomizationOptionEntryTitleTextStyle"
android:text="@string/tab_placeholder_text" />
- <SeekBar
+ <com.google.android.material.slider.Slider
android:id="@+id/clock_axis_slider1"
android:layout_width="0dp"
android:layout_height="wrap_content"
@@ -50,10 +50,9 @@
app:layout_constraintStart_toEndOf="@+id/clock_axis_slider_name1"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginVertical="@dimen/clock_axis_control_slider_row_margin_vertical"
- android:background="@null"
- android:progressDrawable="@drawable/saturation_progress_drawable"
- android:splitTrack="false"
- android:thumb="@null" />
+ app:trackHeight="@dimen/slider_track_height"
+ app:thumbHeight="@dimen/slider_thumb_height"
+ android:theme="@style/Theme.Material3.DynamicColors.DayNight" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier1"
@@ -77,7 +76,7 @@
style="@style/CustomizationOptionEntryTitleTextStyle"
android:text="@string/tab_placeholder_text" />
- <SeekBar
+ <com.google.android.material.slider.Slider
android:id="@+id/clock_axis_slider2"
android:layout_width="0dp"
android:layout_height="wrap_content"
@@ -87,10 +86,9 @@
app:layout_constraintStart_toEndOf="@+id/clock_axis_slider_name2"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginVertical="@dimen/clock_axis_control_slider_row_margin_vertical"
- android:background="@null"
- android:progressDrawable="@drawable/saturation_progress_drawable"
- android:splitTrack="false"
- android:thumb="@null" />
+ app:trackHeight="@dimen/slider_track_height"
+ app:thumbHeight="@dimen/slider_thumb_height"
+ android:theme="@style/Theme.Material3.DynamicColors.DayNight" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier2"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 756ae2d..819f7e3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -212,4 +212,8 @@
<dimen name="clock_axis_control_slider_row_margin_vertical">10dp</dimen>
<dimen name="clock_axis_control_switch_row_margin_vertical">8dp</dimen>
<dimen name="clock_font_apply_padding_start">8dp</dimen>
+
+ <!-- Shared dimensions for Material 3 sliders -->
+ <dimen name="slider_track_height">24dp</dimen>
+ <dimen name="slider_thumb_height">36dp</dimen>
</resources>
diff --git a/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt b/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt
index 8a2edfb..8414960 100644
--- a/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt
+++ b/src/com/android/customization/picker/clock/shared/model/ClockMetadataModel.kt
@@ -35,6 +35,8 @@
@ColorInt val seedColor: Int?,
) {
companion object {
+ const val MIN_COLOR_TONE_PROGRESS = 0
+ const val MAX_COLOR_TONE_PROGRESS = 100
const val DEFAULT_COLOR_TONE_PROGRESS = 75
}
}
diff --git a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
index 480ae11..1c8f824 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
@@ -27,7 +27,6 @@
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import android.widget.FrameLayout
import android.widget.ImageView
-import android.widget.SeekBar
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
@@ -37,6 +36,7 @@
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.customization.picker.clock.shared.ClockSize
+import com.android.customization.picker.clock.shared.model.ClockMetadataModel
import com.android.customization.picker.color.ui.binder.ColorOptionIconBinder2
import com.android.customization.picker.color.ui.view.ColorOptionIconView2
import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel
@@ -57,7 +57,10 @@
import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter2
import com.google.android.material.materialswitch.MaterialSwitch
+import com.google.android.material.slider.LabelFormatter
+import com.google.android.material.slider.Slider
import java.lang.ref.WeakReference
+import kotlin.math.roundToInt
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -157,20 +160,17 @@
layoutManager =
LinearLayoutManager(appContext, LinearLayoutManager.HORIZONTAL, false)
}
- val clockColorSlider: SeekBar = view.requireViewById(R.id.clock_color_slider)
- clockColorSlider.setOnSeekBarChangeListener(
- object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(p0: SeekBar?, progress: Int, fromUser: Boolean) {
- if (fromUser) {
- viewModel.onSliderProgressChanged(progress)
- }
+ val clockColorSlider: Slider = view.requireViewById(R.id.clock_color_slider)
+ clockColorSlider.apply {
+ valueFrom = ClockMetadataModel.MIN_COLOR_TONE_PROGRESS.toFloat()
+ valueTo = ClockMetadataModel.MAX_COLOR_TONE_PROGRESS.toFloat()
+ labelBehavior = LabelFormatter.LABEL_GONE
+ addOnChangeListener { _, value, fromUser ->
+ if (fromUser) {
+ viewModel.onSliderProgressChanged(value.roundToInt())
}
-
- override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit
-
- override fun onStopTrackingTouch(seekBar: SeekBar?) = Unit
}
- )
+ }
// Clock size switch
val clockSizeSwitch =
@@ -312,7 +312,7 @@
launch {
viewModel.previewingSliderProgress.collect { progress ->
- clockColorSlider.setProgress(progress, true)
+ clockColorSlider.value = progress.toFloat()
}
}
diff --git a/src/com/android/wallpaper/customization/ui/view/ClockFontSliderViewHolder.kt b/src/com/android/wallpaper/customization/ui/view/ClockFontSliderViewHolder.kt
index 8bdf073..fb14342 100644
--- a/src/com/android/wallpaper/customization/ui/view/ClockFontSliderViewHolder.kt
+++ b/src/com/android/wallpaper/customization/ui/view/ClockFontSliderViewHolder.kt
@@ -16,12 +16,13 @@
package com.android.wallpaper.customization.ui.view
-import android.widget.SeekBar
import android.widget.TextView
import androidx.core.view.isInvisible
import com.android.systemui.plugins.clocks.ClockFontAxis
+import com.google.android.material.slider.LabelFormatter
+import com.google.android.material.slider.Slider
-class ClockFontSliderViewHolder(val name: TextView, val slider: SeekBar) {
+class ClockFontSliderViewHolder(val name: TextView, val slider: Slider) {
fun setIsVisible(isVisible: Boolean) {
name.isInvisible = !isVisible
@@ -31,30 +32,19 @@
fun initView(clockFontAxis: ClockFontAxis, onFontAxisValueUpdated: (value: Float) -> Unit) {
name.text = clockFontAxis.name
slider.apply {
- max = clockFontAxis.maxValue.toInt()
- min = clockFontAxis.minValue.toInt()
- progress = clockFontAxis.currentValue.toInt()
- setOnSeekBarChangeListener(
- object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(
- seekBar: SeekBar?,
- progress: Int,
- fromUser: Boolean,
- ) {
- if (fromUser) {
- onFontAxisValueUpdated.invoke(progress.toFloat())
- }
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar?) {}
-
- override fun onStopTrackingTouch(seekBar: SeekBar?) {}
+ valueFrom = clockFontAxis.minValue
+ valueTo = clockFontAxis.maxValue
+ value = clockFontAxis.currentValue
+ labelBehavior = LabelFormatter.LABEL_GONE
+ addOnChangeListener { _, value, fromUser ->
+ if (fromUser) {
+ onFontAxisValueUpdated.invoke(value)
}
- )
+ }
}
}
fun setValue(value: Float) {
- slider.progress = value.toInt()
+ slider.value = value
}
}