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

Commit 7eb72e4f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Migrate Volume Dialog UI events to the new infra" into main

parents 40b100e3 5a3fde5c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -37,16 +37,16 @@ import java.util.Arrays;
public class Events {
    private static final String TAG = Util.logTag(Events.class);

    public static final int EVENT_SHOW_DIALOG = 0;  // (reason|int) (keyguard|bool)
    public static final int EVENT_DISMISS_DIALOG = 1; // (reason|int)
    @Deprecated public static final int EVENT_SHOW_DIALOG = 0;  // (reason|int) (keyguard|bool)
    @Deprecated public static final int EVENT_DISMISS_DIALOG = 1; // (reason|int)
    public static final int EVENT_ACTIVE_STREAM_CHANGED = 2; // (stream|int)
    public static final int EVENT_EXPAND = 3; // (expand|bool)
    public static final int EVENT_KEY = 4; // (stream|int) (lastAudibleStreamVolume)
    public static final int EVENT_COLLECTION_STARTED = 5;
    public static final int EVENT_COLLECTION_STOPPED = 6;
    public static final int EVENT_ICON_CLICK = 7; // (stream|int) (icon_state|int)
    public static final int EVENT_SETTINGS_CLICK = 8;
    public static final int EVENT_TOUCH_LEVEL_CHANGED = 9; // (stream|int) (level|int)
    @Deprecated public static final int EVENT_ICON_CLICK = 7; // (stream|int) (icon_state|int)
    @Deprecated public static final int EVENT_SETTINGS_CLICK = 8;
    @Deprecated public static final int EVENT_TOUCH_LEVEL_CHANGED = 9; // (stream|int) (level|int)
    public static final int EVENT_LEVEL_CHANGED = 10; // (stream|int) (level|int)
    public static final int EVENT_INTERNAL_RINGER_MODE_CHANGED = 11; // (mode|int)
    public static final int EVENT_EXTERNAL_RINGER_MODE_CHANGED = 12; // (mode|int)
@@ -55,12 +55,12 @@ public class Events {
    public static final int EVENT_MUTE_CHANGED = 15;  // (stream|int) (muted|bool)
    public static final int EVENT_TOUCH_LEVEL_DONE = 16;  // (stream|int) (level|int)
    public static final int EVENT_ZEN_CONFIG_CHANGED = 17; // (allow/disallow|string)
    public static final int EVENT_RINGER_TOGGLE = 18; // (ringer_mode)
    @Deprecated  public static final int EVENT_RINGER_TOGGLE = 18; // (ringer_mode)
    public static final int EVENT_SHOW_USB_OVERHEAT_ALARM = 19; // (reason|int) (keyguard|bool)
    public static final int EVENT_DISMISS_USB_OVERHEAT_ALARM = 20; // (reason|int) (keyguard|bool)
    public static final int EVENT_ODI_CAPTIONS_CLICK = 21;
    public static final int EVENT_ODI_CAPTIONS_TOOLTIP_CLICK = 22;
    public static final int EVENT_SLIDER_TOUCH_TRACKING = 23; // (tracking|bool)
    @Deprecated public static final int EVENT_SLIDER_TOUCH_TRACKING = 23; // (tracking|bool)

    private static final String[] EVENT_TAGS = {
            "show_dialog",
+14 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.media.AudioManager.STREAM_RING
import android.os.VibrationEffect
import android.widget.Toast
import com.android.internal.R as internalR
import com.android.internal.logging.UiEventLogger
import com.android.settingslib.Utils
import com.android.settingslib.notification.domain.interactor.NotificationsSoundPolicyInteractor
import com.android.settingslib.volume.shared.model.AudioStream
@@ -43,6 +44,7 @@ import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibili
import com.android.systemui.volume.dialog.ringer.domain.VolumeDialogRingerInteractor
import com.android.systemui.volume.dialog.ringer.shared.model.VolumeDialogRingerModel
import com.android.systemui.volume.dialog.shared.VolumeDialogLogger
import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -73,6 +75,7 @@ constructor(
    private val volumeDialogLogger: VolumeDialogLogger,
    private val visibilityInteractor: VolumeDialogVisibilityInteractor,
    configurationController: ConfigurationController,
    private val uiEventLogger: UiEventLogger,
    private val systemClock: SystemClock,
) {

@@ -112,6 +115,7 @@ constructor(
            .build()

    private var lastClickTime = 0L

    init {
        ringerViewModel
            .onEach { viewModelState ->
@@ -137,6 +141,7 @@ constructor(
            provideTouchFeedback(ringerMode)
            maybeShowToast(ringerMode)
            ringerInteractor.setRingerMode(ringerMode)
            ringerMode.toVolumeDialogUiEvent()?.let(uiEventLogger::log)
        }
        visibilityInteractor.resetDismissTimeout()
        drawerState.value =
@@ -312,3 +317,12 @@ constructor(
        }
    }
}

private fun RingerMode.toVolumeDialogUiEvent(): VolumeDialogUiEvent? {
    return when (value) {
        RINGER_MODE_NORMAL -> VolumeDialogUiEvent.RINGER_MODE_NORMAL
        RINGER_MODE_VIBRATE -> VolumeDialogUiEvent.RINGER_MODE_VIBRATE
        RINGER_MODE_SILENT -> VolumeDialogUiEvent.RINGER_MODE_SILENT
        else -> null
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -32,12 +32,14 @@ import com.airbnb.lottie.SimpleColorFilter
import com.airbnb.lottie.model.KeyPath
import com.airbnb.lottie.value.LottieValueCallback
import com.android.internal.R as internalR
import com.android.internal.logging.UiEventLogger
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.UiBackground
import com.android.systemui.lottie.await
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
import com.android.systemui.volume.dialog.settings.domain.VolumeDialogSettingsButtonInteractor
import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaDeviceSessionInteractor
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor
import com.android.systemui.volume.panel.shared.model.filterData
@@ -71,6 +73,7 @@ constructor(
    mediaOutputInteractor: MediaOutputInteractor,
    private val mediaDeviceSessionInteractor: MediaDeviceSessionInteractor,
    private val interactor: VolumeDialogSettingsButtonInteractor,
    private val uiEventLogger: UiEventLogger,
) {

    @SuppressLint("UseCompatLoadingForDrawables")
@@ -160,6 +163,7 @@ constructor(

    fun onButtonClicked() {
        interactor.onButtonClicked()
        uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SETTINGS_CLICK)
    }

    private data class PlaybackStates(val isPreviousActive: Boolean?, val isCurrentActive: Boolean)
+11 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.interaction.DragInteraction
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.padding
@@ -58,7 +59,6 @@ import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSlide
import com.android.systemui.volume.haptics.ui.VolumeHapticsConfigsProvider
import javax.inject.Inject
import kotlin.math.round
import kotlin.math.roundToInt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive
@@ -136,7 +136,7 @@ private fun VolumeDialogSlider(
                )
                .also { sliderState ->
                    sliderState.onValueChangeFinished = {
                        viewModel.onStreamChangeFinished(sliderState.value.roundToInt())
                        viewModel.onSliderChangeFinished(sliderState.value)
                        hapticsViewModel?.onValueChangeEnded()
                    }
                    sliderState.onValueChange = { newValue ->
@@ -161,6 +161,15 @@ private fun VolumeDialogSlider(
            hapticsViewModel?.onValueChange(value)
        }
    }
    LaunchedEffect(interactionSource) {
        interactionSource.interactions.collect {
            when (it) {
                is DragInteraction.Start -> viewModel.onSliderDragStarted()
                is DragInteraction.Cancel -> viewModel.onSliderDragFinished()
                is DragInteraction.Stop -> viewModel.onSliderDragFinished()
            }
        }
    }

    VerticalSlider(
        state = sliderState,
+21 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.volume.dialog.sliders.ui.viewmodel
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.PointerEventType
import com.android.internal.logging.UiEventLogger
import com.android.systemui.util.time.SystemClock
import com.android.systemui.volume.Events
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
@@ -30,6 +31,7 @@ import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialog
import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialogSliderInteractor
import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType
import com.android.systemui.volume.dialog.sliders.shared.model.SliderInputEvent
import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
@@ -69,6 +71,7 @@ constructor(
    private val inputEventsInteractor: VolumeDialogSliderInputEventsInteractor,
    private val systemClock: SystemClock,
    private val logger: VolumeDialogLogger,
    private val uiEventLogger: UiEventLogger,
) {

    private val userVolumeUpdates = MutableStateFlow<VolumeUpdate?>(null)
@@ -99,9 +102,11 @@ constructor(
                                    isMuted = isMuted,
                                    isRoutedToBluetooth = routedToBluetooth,
                                )

                            is VolumeDialogSliderType.RemoteMediaStream -> {
                                volumeDialogSliderIconProvider.getCastIcon(isMuted)
                            }

                            is VolumeDialogSliderType.AudioSharingStream -> {
                                volumeDialogSliderIconProvider.getAudioSharingIcon(isMuted)
                            }
@@ -135,8 +140,19 @@ constructor(
        }
    }

    fun onStreamChangeFinished(volume: Int) {
        logger.onVolumeSliderAdjustmentFinished(volume = volume, stream = sliderType.audioStream)
    fun onSliderDragStarted() {
        uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SLIDER_STARTED_TRACKING_TOUCH)
    }

    fun onSliderDragFinished() {
        uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SLIDER_STOPPED_TRACKING_TOUCH)
    }

    fun onSliderChangeFinished(volume: Float) {
        logger.onVolumeSliderAdjustmentFinished(
            volume = volume.roundToInt(),
            stream = sliderType.audioStream,
        )
    }

    fun onTouchEvent(pointerEvent: PointerEvent) {
@@ -146,14 +162,17 @@ constructor(
                inputEventsInteractor.onTouchEvent(
                    SliderInputEvent.Touch.Start(position.x, position.y)
                )

            PointerEventType.Move ->
                inputEventsInteractor.onTouchEvent(
                    SliderInputEvent.Touch.Move(position.x, position.y)
                )

            PointerEventType.Scroll ->
                inputEventsInteractor.onTouchEvent(
                    SliderInputEvent.Touch.Move(position.x, position.y)
                )

            PointerEventType.Release ->
                inputEventsInteractor.onTouchEvent(
                    SliderInputEvent.Touch.End(position.x, position.y)
Loading