diff options
| author | 2025-01-13 15:21:20 -0800 | |
|---|---|---|
| committer | 2025-01-13 15:21:20 -0800 | |
| commit | 042947a7547e358db719cfe8a83b2adfc3a66c04 (patch) | |
| tree | ce1e330a669b431d7e920c42ea5b6b10a0ca2a3a | |
| parent | 1ae1333237340c4a2e2c221188514d3a6b8f0e8a (diff) | |
| parent | 3b0dae5af3ec00cdcaa16fa1d5a1ae882bf4e0c0 (diff) | |
Merge "Add Volume Dialog logs" into main
9 files changed, 112 insertions, 26 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt index 96630ca36b97..908249dbca08 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt @@ -144,7 +144,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { ringerState.orientation, ) } - is RingerDrawerState.Closed -> { if ( uiModel.selectedButton.ringerMode == @@ -189,7 +188,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } - is RingerDrawerState.Open -> { drawerContainer.animateAndBindDrawerButtons( viewModel, @@ -220,7 +218,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } - is RingerViewModelState.Unavailable -> { drawerContainer.visibility = View.GONE volumeDialogBackgroundView.setBackgroundResource( @@ -251,7 +248,7 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { .requireViewById<ImageButton>(R.id.volume_drawer_button) val previousIndex = uiModel.availableButtons.indexOfFirst { - it?.ringerMode == uiModel.drawerState.previousMode + it.ringerMode == uiModel.drawerState.previousMode } val unselectedButton = getChildAt(count - previousIndex) @@ -306,20 +303,18 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { ) { val count = uiModel.availableButtons.size uiModel.availableButtons.fastForEachIndexed { index, ringerButton -> - ringerButton?.let { - val view = getChildAt(count - index) - val isOpen = uiModel.drawerState is RingerDrawerState.Open - if (index == uiModel.currentButtonIndex) { - view.bindDrawerButton( - if (isOpen) it else uiModel.selectedButton, - viewModel, - isOpen, - isSelected = true, - isAnimated = isAnimated, - ) - } else { - view.bindDrawerButton(it, viewModel, isOpen, isAnimated = isAnimated) - } + val view = getChildAt(count - index) + val isOpen = uiModel.drawerState is RingerDrawerState.Open + if (index == uiModel.currentButtonIndex) { + view.bindDrawerButton( + if (isOpen) ringerButton else uiModel.selectedButton, + viewModel, + isOpen, + isSelected = true, + isAnimated = isAnimated, + ) + } else { + view.bindDrawerButton(ringerButton, viewModel, isOpen, isAnimated = isAnimated) } } onAnimationEnd?.run() diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt index 96d4f62416bf..8613610ad1bf 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt @@ -19,7 +19,7 @@ package com.android.systemui.volume.dialog.ringer.ui.viewmodel /** Models volume dialog ringer */ data class RingerViewModel( /** List of the available buttons according to the available modes */ - val availableButtons: List<RingerButtonViewModel?>, + val availableButtons: List<RingerButtonViewModel>, /** The index of the currently selected button */ val currentButtonIndex: Int, /** Currently selected button. */ diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt index eec64d9a2f86..07c4de0ac0c4 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt @@ -50,7 +50,9 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch @@ -106,9 +108,25 @@ constructor( .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build() + init { + ringerViewModel + .onEach { viewModelState -> + when (viewModelState) { + is RingerViewModelState.Available -> + volumeDialogLogger.onRingerDrawerAvailable( + viewModelState.uiModel.availableButtons.map { it.ringerMode } + ) + is RingerViewModelState.Unavailable -> + volumeDialogLogger.onRingerDrawerUnavailable() + } + } + .launchIn(coroutineScope) + } + fun onRingerButtonClicked(ringerMode: RingerMode, isSelectedButton: Boolean = false) { if (drawerState.value is RingerDrawerState.Open && !isSelectedButton) { Events.writeEvent(Events.EVENT_RINGER_TOGGLE, ringerMode.value) + volumeDialogLogger.onRingerModeChanged(ringerMode) provideTouchFeedback(ringerMode) maybeShowToast(ringerMode) ringerInteractor.setRingerMode(ringerMode) @@ -159,7 +177,9 @@ constructor( RingerViewModelState.Available( RingerViewModel( availableButtons = - availableModes.map { mode -> toButtonViewModel(mode, isZenMuted) }, + availableModes.mapNotNull { mode -> + toButtonViewModel(mode, isZenMuted) + }, currentButtonIndex = currentIndex, selectedButton = it, drawerState = drawerState, @@ -219,7 +239,6 @@ constructor( hintLabelResId = R.string.volume_ringer_hint_unmute, ringerMode = ringerMode, ) - availableModes.contains(RingerMode(RINGER_MODE_VIBRATE)) -> RingerButtonViewModel( imageResId = R.drawable.ic_speaker_on, @@ -232,7 +251,6 @@ constructor( hintLabelResId = R.string.volume_ringer_hint_vibrate, ringerMode = ringerMode, ) - else -> RingerButtonViewModel( imageResId = R.drawable.ic_speaker_on, @@ -269,17 +287,14 @@ constructor( null } } - RINGER_MODE_SILENT -> applicationContext.getString( internalR.string.volume_dialog_ringer_guidance_silent ) - RINGER_MODE_VIBRATE -> applicationContext.getString( internalR.string.volume_dialog_ringer_guidance_vibrate ) - else -> applicationContext.getString( internalR.string.volume_dialog_ringer_guidance_vibrate diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt index 9a3aa7e3d79f..cccf090fae85 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt @@ -45,6 +45,52 @@ class VolumeDialogLogger @Inject constructor(@VolumeLog private val logBuffer: L ) } + fun onVolumeSliderAdjustmentFinished(volume: Int, stream: Int) { + logBuffer.log( + TAG, + LogLevel.DEBUG, + { + int1 = volume + int2 = stream + }, + { "Volume adjusted: volume=$int1 stream=$int2" }, + ) + } + + fun onVolumeSlidersUpdated(primaryStream: Int, floating: Collection<Int>) { + logBuffer.log( + TAG, + LogLevel.DEBUG, + { + int1 = primaryStream + str1 = floating.joinToString(",") { it.toString() } + }, + { "Showing streams: primary=$int1 floating=$str1" }, + ) + } + + fun onRingerModeChanged(ringerMode: RingerMode) { + logBuffer.log( + TAG, + LogLevel.DEBUG, + { int1 = ringerMode.value }, + { "Ringer mode changed to: $int1" }, + ) + } + + fun onRingerDrawerAvailable(modes: List<RingerMode>) { + logBuffer.log( + TAG, + LogLevel.DEBUG, + { str1 = modes.joinToString(",") { it.value.toString() } }, + { "Ringer drawer available with modes: $str1" }, + ) + } + + fun onRingerDrawerUnavailable() { + logBuffer.log(TAG, LogLevel.DEBUG, {}, { "Ringer drawer unavailable" }) + } + fun onCurrentRingerModeIsUnsupported(ringerMode: RingerMode) { logBuffer.log( TAG, diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt index 3b964fdec1b8..d40302408dd6 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt @@ -27,6 +27,7 @@ import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSlide import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSliderStateModel import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSliderViewModel import com.google.android.material.slider.Slider +import com.google.android.material.slider.Slider.OnSliderTouchListener import javax.inject.Inject import kotlin.math.roundToInt import kotlinx.coroutines.CoroutineScope @@ -68,6 +69,15 @@ constructor( sliderView.addOnChangeListener { _, value, fromUser -> viewModel.setStreamVolume(value.roundToInt(), fromUser) } + sliderView.addOnSliderTouchListener( + object : OnSliderTouchListener { + override fun onStartTrackingTouch(slider: Slider) {} + + override fun onStopTrackingTouch(slider: Slider) { + viewModel.onStreamChangeFinished(slider.value.roundToInt()) + } + } + ) viewModel.isDisabledByZenMode.onEach { sliderView.isEnabled = !it }.launchIn(this) viewModel.state diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt index d999910675b0..89dd0352afa7 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt @@ -20,9 +20,11 @@ import com.android.systemui.util.time.SystemClock import com.android.systemui.volume.Events import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibilityInteractor +import com.android.systemui.volume.dialog.shared.VolumeDialogLogger import com.android.systemui.volume.dialog.shared.model.VolumeDialogStreamModel import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderScope import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialogSliderInteractor +import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -60,6 +62,8 @@ constructor( @VolumeDialog private val coroutineScope: CoroutineScope, private val volumeDialogSliderIconProvider: VolumeDialogSliderIconProvider, private val systemClock: SystemClock, + private val sliderType: VolumeDialogSliderType, + private val logger: VolumeDialogLogger, ) { private val userVolumeUpdates = MutableStateFlow<VolumeUpdate?>(null) @@ -110,6 +114,10 @@ constructor( } } + fun onStreamChangeFinished(volume: Int) { + logger.onVolumeSliderAdjustmentFinished(volume = volume, stream = sliderType.audioStream) + } + private fun getTimestampMillis(): Long = systemClock.uptimeMillis() private data class VolumeUpdate(val newVolumeLevel: Int, val timestampMillis: Long) diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModel.kt index d8e6aec026c6..344dadcce229 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModel.kt @@ -18,6 +18,7 @@ package com.android.systemui.volume.dialog.sliders.ui.viewmodel import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope +import com.android.systemui.volume.dialog.shared.VolumeDialogLogger import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderComponent import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialogSlidersInteractor import javax.inject.Inject @@ -33,13 +34,18 @@ class VolumeDialogSlidersViewModel @Inject constructor( @VolumeDialog coroutineScope: CoroutineScope, - private val slidersInteractor: VolumeDialogSlidersInteractor, + slidersInteractor: VolumeDialogSlidersInteractor, private val sliderComponentFactory: VolumeDialogSliderComponent.Factory, + private val volumeDialogLogger: VolumeDialogLogger, ) { val sliders: Flow<VolumeDialogSliderUiModel> = slidersInteractor.sliders .map { slidersModel -> + volumeDialogLogger.onVolumeSlidersUpdated( + slidersModel.slider.audioStream, + slidersModel.floatingSliders.map { it.audioStream }, + ) VolumeDialogSliderUiModel( sliderComponent = sliderComponentFactory.create(slidersModel.slider), floatingSliderComponent = diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt index 63cd440a8633..b26081c40c38 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt @@ -20,15 +20,19 @@ import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.util.time.systemClock import com.android.systemui.volume.dialog.domain.interactor.volumeDialogVisibilityInteractor +import com.android.systemui.volume.dialog.shared.volumeDialogLogger import com.android.systemui.volume.dialog.sliders.domain.interactor.volumeDialogSliderInteractor +import com.android.systemui.volume.dialog.sliders.domain.model.volumeDialogSliderType val Kosmos.volumeDialogSliderViewModel by Kosmos.Fixture { VolumeDialogSliderViewModel( + sliderType = volumeDialogSliderType, interactor = volumeDialogSliderInteractor, visibilityInteractor = volumeDialogVisibilityInteractor, coroutineScope = applicationCoroutineScope, volumeDialogSliderIconProvider = volumeDialogSliderIconProvider, systemClock = systemClock, + logger = volumeDialogLogger, ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModelKosmos.kt index 5531f7608b69..8fb60fdd5ab1 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSlidersViewModelKosmos.kt @@ -18,6 +18,7 @@ package com.android.systemui.volume.dialog.sliders.ui.viewmodel import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.volume.dialog.shared.volumeDialogLogger import com.android.systemui.volume.dialog.sliders.dagger.volumeDialogSliderComponentFactory import com.android.systemui.volume.dialog.sliders.domain.interactor.volumeDialogSlidersInteractor @@ -27,5 +28,6 @@ val Kosmos.volumeDialogSlidersViewModel by applicationCoroutineScope, volumeDialogSlidersInteractor, volumeDialogSliderComponentFactory, + volumeDialogLogger, ) } |