diff options
| author | 2024-11-07 18:08:11 +0000 | |
|---|---|---|
| committer | 2024-11-14 17:16:59 +0000 | |
| commit | 1639f57b55426746d88fdaac25c71caacd787e36 (patch) | |
| tree | a36d51d6ac915607c6ca119b6bfe2f36210d099e | |
| parent | 108818e1e95e16a8e2574157e27969ba07a39906 (diff) | |
Don't hide a slider if it's already being shown in the VolumeDialog
As the VolumeDialogImpl we want to continue showing a slider if it has
already being shown in the dialog.
Flag: com.android.systemui.volume_redesign
Bug: 369992924
Test: atest VolumeDialogSlidersInteractorTest
Change-Id: I8a6c10f60fb2ac9bcb9d1e7688d4d233ef7d775f
2 files changed, 35 insertions, 6 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractorTest.kt index 7c5a48728a11..3f995c69c32f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractorTest.kt @@ -155,6 +155,30 @@ class VolumeDialogSlidersInteractorTest : SysuiTestCase() { } } + @Test + fun activeStreamChanges_showBoth() { + with(kosmos) { + testScope.runTest { + runCurrent() + fakeVolumeDialogController.updateState { + activeStream = AudioManager.STREAM_SYSTEM + states.put(AudioManager.STREAM_MUSIC, buildStreamState()) + states.put(AudioManager.STREAM_SYSTEM, buildStreamState()) + } + val slidersModel by collectLastValue(underTest.sliders) + runCurrent() + + fakeVolumeDialogController.updateState { activeStream = AudioManager.STREAM_MUSIC } + runCurrent() + + assertThat(slidersModel!!.slider) + .isEqualTo(VolumeDialogSliderType.Stream(AudioManager.STREAM_MUSIC)) + assertThat(slidersModel!!.floatingSliders) + .containsExactly(VolumeDialogSliderType.Stream(AudioManager.STREAM_SYSTEM)) + } + } + } + private fun buildStreamState( build: VolumeDialogController.StreamState.() -> Unit = {} ): VolumeDialogController.StreamState { diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractor.kt index 7af4258930cb..948d0fec16ae 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/domain/interactor/VolumeDialogSlidersInteractor.kt @@ -35,6 +35,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.runningReduce import kotlinx.coroutines.flow.stateIn private const val DEFAULT_STREAM = AudioManager.STREAM_MUSIC @@ -54,13 +55,17 @@ constructor( volumeDialogStateInteractor.volumeDialogState .filter { it.streamModels.isNotEmpty() } .map { stateModel -> - stateModel.streamModels.values - .filter { streamModel -> shouldShowSliders(stateModel, streamModel) } - .sortedWith(streamsSorter) + val sliderTypes = + stateModel.streamModels.values + .filter { streamModel -> shouldShowSliders(stateModel, streamModel) } + .sortedWith(streamsSorter) + .map { model -> model.toType() } + LinkedHashSet(sliderTypes) } - .map { models -> - val sliderTypes: List<VolumeDialogSliderType> = - models.map { model -> model.toType() } + .runningReduce { sliderTypes, newSliderTypes -> + newSliderTypes.apply { addAll(sliderTypes) } + } + .map { sliderTypes -> VolumeDialogSlidersModel( slider = sliderTypes.first(), floatingSliders = sliderTypes.drop(1), |