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
     }
 }