Loading packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt +13 −18 Original line number Diff line number Diff line Loading @@ -144,7 +144,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { ringerState.orientation, ) } is RingerDrawerState.Closed -> { if ( uiModel.selectedButton.ringerMode == Loading Loading @@ -189,7 +188,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } is RingerDrawerState.Open -> { drawerContainer.animateAndBindDrawerButtons( viewModel, Loading Loading @@ -220,7 +218,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } is RingerViewModelState.Unavailable -> { drawerContainer.visibility = View.GONE volumeDialogBackgroundView.setBackgroundResource( Loading Loading @@ -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) Loading Loading @@ -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, if (isOpen) ringerButton else uiModel.selectedButton, viewModel, isOpen, isSelected = true, isAnimated = isAnimated, ) } else { view.bindDrawerButton(it, viewModel, isOpen, isAnimated = isAnimated) } view.bindDrawerButton(ringerButton, viewModel, isOpen, isAnimated = isAnimated) } } onAnimationEnd?.run() Loading packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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. */ Loading packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt +21 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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, Loading Loading @@ -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, Loading @@ -232,7 +251,6 @@ constructor( hintLabelResId = R.string.volume_ringer_hint_vibrate, ringerMode = ringerMode, ) else -> RingerButtonViewModel( imageResId = R.drawable.ic_speaker_on, Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt +46 −0 Original line number Diff line number Diff line Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt +13 −18 Original line number Diff line number Diff line Loading @@ -144,7 +144,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { ringerState.orientation, ) } is RingerDrawerState.Closed -> { if ( uiModel.selectedButton.ringerMode == Loading Loading @@ -189,7 +188,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } is RingerDrawerState.Open -> { drawerContainer.animateAndBindDrawerButtons( viewModel, Loading Loading @@ -220,7 +218,6 @@ constructor(private val viewModel: VolumeDialogRingerDrawerViewModel) { } } } is RingerViewModelState.Unavailable -> { drawerContainer.visibility = View.GONE volumeDialogBackgroundView.setBackgroundResource( Loading Loading @@ -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) Loading Loading @@ -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, if (isOpen) ringerButton else uiModel.selectedButton, viewModel, isOpen, isSelected = true, isAnimated = isAnimated, ) } else { view.bindDrawerButton(it, viewModel, isOpen, isAnimated = isAnimated) } view.bindDrawerButton(ringerButton, viewModel, isOpen, isAnimated = isAnimated) } } onAnimationEnd?.run() Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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. */ Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt +21 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) Loading Loading @@ -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, Loading Loading @@ -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, Loading @@ -232,7 +251,6 @@ constructor( hintLabelResId = R.string.volume_ringer_hint_vibrate, ringerMode = ringerMode, ) else -> RingerButtonViewModel( imageResId = R.drawable.ic_speaker_on, Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt +46 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading