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

Commit 543a8cd9 authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez Committed by Android (Google) Code Review
Browse files

Merge "Creating volume slider haptics view-models on non-empty states." into main

parents e339850f 75b35867
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ fun ColumnVolumeSliders(
                onValueChangeFinished = { sliderViewModel.onValueChangeFinished() },
                onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                sliderColors = sliderColors,
                hapticsViewModelFactory = sliderViewModel.hapticsViewModelFactory,
                hapticsViewModelFactory = sliderViewModel.getSliderHapticsViewModelFactory(),
            )

            ExpandButton(
@@ -142,7 +142,8 @@ fun ColumnVolumeSliders(
                            onValueChangeFinished = { sliderViewModel.onValueChangeFinished() },
                            onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                            sliderColors = sliderColors,
                            hapticsViewModelFactory = sliderViewModel.hapticsViewModelFactory,
                            hapticsViewModelFactory =
                                sliderViewModel.getSliderHapticsViewModelFactory(),
                        )
                    }
                }
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ fun GridVolumeSliders(
                onValueChangeFinished = { sliderViewModel.onValueChangeFinished() },
                onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                sliderColors = sliderColors,
                hapticsViewModelFactory = sliderViewModel.hapticsViewModelFactory,
                hapticsViewModelFactory = sliderViewModel.getSliderHapticsViewModelFactory(),
            )
        }
    }
+3 −6
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import androidx.compose.ui.semantics.stateDescription
import androidx.compose.ui.unit.dp
import com.android.compose.PlatformSlider
import com.android.compose.PlatformSliderColors
import com.android.systemui.Flags
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.compose.modifiers.sysuiResTag
@@ -66,15 +65,15 @@ fun VolumeSlider(
    onIconTapped: () -> Unit,
    modifier: Modifier = Modifier,
    sliderColors: PlatformSliderColors,
    hapticsViewModelFactory: SliderHapticsViewModel.Factory,
    hapticsViewModelFactory: SliderHapticsViewModel.Factory?,
) {
    val value by valueState(state)
    val interactionSource = remember { MutableInteractionSource() }
    val sliderStepSize = 1f / (state.valueRange.endInclusive - state.valueRange.start)
    val hapticsViewModel: SliderHapticsViewModel? =
        if (Flags.hapticsForComposeSliders()) {
        hapticsViewModelFactory?.let {
            rememberViewModel(traceName = "SliderHapticsViewModel") {
                hapticsViewModelFactory.create(
                it.create(
                    interactionSource,
                    state.valueRange,
                    Orientation.Horizontal,
@@ -93,8 +92,6 @@ fun VolumeSlider(
                    ),
                )
            }
        } else {
            null
        }

    // Perform haptics due to UI composition
+10 −2
Original line number Diff line number Diff line
@@ -22,11 +22,13 @@ import android.media.AudioManager.STREAM_ALARM
import android.media.AudioManager.STREAM_MUSIC
import android.media.AudioManager.STREAM_NOTIFICATION
import android.util.Log
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.volume.domain.interactor.AudioVolumeInteractor
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.settingslib.volume.shared.model.AudioStreamModel
import com.android.settingslib.volume.shared.model.RingerMode
import com.android.systemui.Flags
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel
import com.android.systemui.modes.shared.ModesUiIcons
@@ -49,7 +51,6 @@ import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import com.android.app.tracing.coroutines.launchTraced as launch

/** Models a particular slider state. */
class AudioStreamSliderViewModel
@@ -62,7 +63,7 @@ constructor(
    private val zenModeInteractor: ZenModeInteractor,
    private val uiEventLogger: UiEventLogger,
    private val volumePanelLogger: VolumePanelLogger,
    override val hapticsViewModelFactory: SliderHapticsViewModel.Factory,
    private val hapticsViewModelFactory: SliderHapticsViewModel.Factory,
) : SliderViewModel {

    private val volumeChanges = MutableStateFlow<Int?>(null)
@@ -171,6 +172,13 @@ constructor(
        }
    }

    override fun getSliderHapticsViewModelFactory(): SliderHapticsViewModel.Factory? =
        if (Flags.hapticsForComposeSliders() && slider.value != SliderState.Empty) {
            hapticsViewModelFactory
        } else {
            null
        }

    private fun AudioStreamModel.toState(
        isEnabled: Boolean,
        ringerMode: RingerMode,
+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.volume.panel.component.volume.slider.ui.viewmodel

import android.content.Context
import android.media.session.MediaController.PlaybackInfo
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.Flags
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel
import com.android.systemui.res.R
@@ -32,7 +34,6 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.stateIn
import com.android.app.tracing.coroutines.launchTraced as launch

class CastVolumeSliderViewModel
@AssistedInject
@@ -41,7 +42,7 @@ constructor(
    @Assisted private val coroutineScope: CoroutineScope,
    private val context: Context,
    private val mediaDeviceSessionInteractor: MediaDeviceSessionInteractor,
    override val hapticsViewModelFactory: SliderHapticsViewModel.Factory,
    private val hapticsViewModelFactory: SliderHapticsViewModel.Factory,
) : SliderViewModel {

    override val slider: StateFlow<SliderState> =
@@ -62,6 +63,13 @@ constructor(
        // do nothing because this action isn't supported for Cast sliders.
    }

    override fun getSliderHapticsViewModelFactory(): SliderHapticsViewModel.Factory? =
        if (Flags.hapticsForComposeSliders() && slider.value != SliderState.Empty) {
            hapticsViewModelFactory
        } else {
            null
        }

    private fun PlaybackInfo.getCurrentState(): State {
        val volumeRange = 0..maxVolume
        return State(
Loading