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

Commit 5a3fde5c authored by Anton Potapov's avatar Anton Potapov
Browse files

Migrate Volume Dialog UI events to the new infra

Flag: com.android.systemui.volume_redesign
Bug: 369993959
Test: manual on the phone
Change-Id: Id1ea268377b72fa9eb34d76995e922dd9963b2db
parent d9f8e5f2
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
@@ -59,7 +60,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
@@ -138,7 +138,7 @@ private fun VolumeDialogSlider(
                )
                .also { sliderState ->
                    sliderState.onValueChangeFinished = {
                        viewModel.onStreamChangeFinished(sliderState.value.roundToInt())
                        viewModel.onSliderChangeFinished(sliderState.value)
                        hapticsViewModel?.onValueChangeEnded()
                    }
                    sliderState.onValueChange = { newValue ->
@@ -163,6 +163,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