Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26fdffbb authored by Anton Potapov's avatar Anton Potapov
Browse files

Rework VolumeDialog slider using Compose

This change changes Slider implementation from Views to Compose to
address various problems the old one had. It wires all existing view
models to the new implementation, but leaves Haptics for the next CL.

Flag: com.android.systemui.volume_redesign
Bug: 369994956
Test: atest VolumeDialogScreenshotTest
Test: manual on the phone. Check slider adjustements and overscroll
animations

Change-Id: I2f100f415793f19fba05f02dca2088b3fd73cd34
parent e1363b5c
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -18,14 +18,10 @@
    android:layout_height="match_parent"
    android:maxHeight="@dimen/volume_dialog_slider_height">

    <com.google.android.material.slider.Slider
    <androidx.compose.ui.platform.ComposeView
        android:id="@+id/volume_dialog_slider"
        style="@style/SystemUI.Material3.Slider.Volume"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_marginTop="-20dp"
        android:layout_marginBottom="-20dp"
        android:orientation="vertical"
        android:theme="@style/Theme.Material3.DayNight" />
        android:orientation="vertical" />
</FrameLayout>
 No newline at end of file
+0 −10
Original line number Diff line number Diff line
@@ -564,16 +564,6 @@
        <item name="android:windowNoTitle">true</item>
    </style>

    <style name="SystemUI.Material3.Slider.Volume">
        <item name="trackHeight">40dp</item>
        <item name="thumbHeight">52dp</item>
        <item name="trackCornerSize">12dp</item>
        <item name="trackInsideCornerSize">2dp</item>
        <item name="trackStopIndicatorSize">6dp</item>
        <item name="trackIconSize">20dp</item>
        <item name="labelBehavior">gone</item>
    </style>

    <style name="SystemUI.Material3.Slider" parent="@style/Widget.Material3.Slider">
        <item name="labelStyle">@style/Widget.Material3.Slider.Label</item>
        <item name="thumbColor">@color/thumb_color</item>
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.volume.dialog

import android.app.Dialog
import android.content.Context
import android.graphics.PixelFormat
import android.os.Bundle
@@ -24,6 +23,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.activity.ComponentDialog
import com.android.app.tracing.coroutines.coroutineScopeTraced
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.lifecycle.repeatWhenAttached
@@ -40,7 +40,7 @@ constructor(
    @Application context: Context,
    private val componentFactory: VolumeDialogComponent.Factory,
    private val visibilityInteractor: VolumeDialogVisibilityInteractor,
) : Dialog(context, R.style.Theme_SystemUI_Dialog_Volume) {
) : ComponentDialog(context, R.style.Theme_SystemUI_Dialog_Volume) {

    init {
        with(window!!) {
+0 −3
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.volume.dialog.sliders.dagger

import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType
import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogOverscrollViewBinder
import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSliderHapticsViewBinder
import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSliderViewBinder
import dagger.BindsInstance
import dagger.Subcomponent
@@ -33,8 +32,6 @@ interface VolumeDialogSliderComponent {

    fun sliderViewBinder(): VolumeDialogSliderViewBinder

    fun sliderHapticsViewBinder(): VolumeDialogSliderHapticsViewBinder

    fun overscrollViewBinder(): VolumeDialogOverscrollViewBinder

    @Subcomponent.Factory
+0 −6
Original line number Diff line number Diff line
@@ -20,11 +20,9 @@ import android.view.View
import androidx.dynamicanimation.animation.FloatValueHolder
import androidx.dynamicanimation.animation.SpringAnimation
import androidx.dynamicanimation.animation.SpringForce
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderScope
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogOverscrollViewModel
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogOverscrollViewModel.OverscrollEventModel
import com.google.android.material.slider.Slider
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn
@@ -51,10 +49,6 @@ constructor(private val viewModel: VolumeDialogOverscrollViewModel) {
                )
                .addUpdateListener { _, value, _ -> viewsToAnimate.setTranslationY(value) }

        view.requireViewById<Slider>(R.id.volume_dialog_slider).addOnChangeListener { s, value, _ ->
            viewModel.setSlider(value = value, min = s.valueFrom, max = s.valueTo)
        }

        viewModel.overscrollEvent
            .onEach { event ->
                when (event) {
Loading