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

Commit a318b083 authored by Anton Potapov's avatar Anton Potapov
Browse files

Improve volume sliders behaviour:

 - Add stream mute/unmute when user taps the icon
 - Snap sliders to the steps mapped to the corresponding values
 - Fix AudioRepository mute/unmute parameters order

Flag: aconfig new_volume_panel TEAMFOOD
Test: manual on the phone
Test: atest AudioRepositoryTest
Test: atest AudioVolumeInteractorTest
Test: atest VolumeSliderInteractorTest
Fixes: 327586835
Fixes: 327596143
Change-Id: I887d97551cd9027af355fd0ebc064b52fe295f6b
parent 3312c97d
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -161,11 +161,11 @@ class AudioRepositoryImpl(

    override suspend fun setMuted(audioStream: AudioStream, isMuted: Boolean) =
        withContext(backgroundCoroutineContext) {
            if (isMuted) {
                audioManager.adjustStreamVolume(audioStream.value, 0, AudioManager.ADJUST_MUTE)
            } else {
                audioManager.adjustStreamVolume(audioStream.value, 0, AudioManager.ADJUST_UNMUTE)
            }
            audioManager.adjustStreamVolume(
                audioStream.value,
                if (isMuted) AudioManager.ADJUST_MUTE else AudioManager.ADJUST_UNMUTE,
                0,
            )
        }

    private fun getMinVolume(stream: AudioStream): Int =
+2 −2
Original line number Diff line number Diff line
@@ -84,10 +84,10 @@ class AudioVolumeInteractor(
                    (audioStreamModel.audioStream.value == AudioManager.STREAM_NOTIFICATION &&
                        audioStreamModel.isMuted)
            ) {
                return 0
                return audioStreamModel.minVolume
            }
        } else if (audioStreamModel.isMuted) {
            return 0
            return audioStreamModel.minVolume
        }
        return audioStreamModel.volume
    }
+3 −3
Original line number Diff line number Diff line
@@ -77,13 +77,13 @@ class AudioRepositoryTest {
        `when`(audioManager.getStreamMaxVolume(anyInt())).thenReturn(MAX_VOLUME)
        `when`(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_NORMAL)
        `when`(audioManager.setStreamVolume(anyInt(), anyInt(), anyInt())).then {
            val streamType = it.arguments[1] as Int
            volumeByStream[it.arguments[0] as Int] = streamType
            val streamType = it.arguments[0] as Int
            volumeByStream[it.arguments[0] as Int] = it.arguments[1] as Int
            triggerEvent(AudioManagerEvent.StreamVolumeChanged(AudioStream(streamType)))
        }
        `when`(audioManager.adjustStreamVolume(anyInt(), anyInt(), anyInt())).then {
            val streamType = it.arguments[0] as Int
            isMuteByStream[streamType] = it.arguments[2] == AudioManager.ADJUST_MUTE
            isMuteByStream[streamType] = it.arguments[1] == AudioManager.ADJUST_MUTE
            triggerEvent(AudioManagerEvent.StreamMuteChanged(AudioStream(streamType)))
        }
        `when`(audioManager.getStreamVolume(anyInt())).thenAnswer {
+7 −3
Original line number Diff line number Diff line
@@ -76,7 +76,10 @@ fun ColumnVolumeSliders(
            VolumeSlider(
                modifier = Modifier.weight(1f),
                state = sliderState,
                onValueChangeFinished = { sliderViewModel.onValueChangeFinished(sliderState, it) },
                onValueChange = { newValue: Float ->
                    sliderViewModel.onValueChanged(sliderState, newValue)
                },
                onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                sliderColors = sliderColors,
            )

@@ -114,9 +117,10 @@ fun ColumnVolumeSliders(
                        VolumeSlider(
                            modifier = Modifier.fillMaxWidth().padding(top = 16.dp),
                            state = sliderState,
                            onValueChangeFinished = {
                                sliderViewModel.onValueChangeFinished(sliderState, it)
                            onValueChange = { newValue: Float ->
                                sliderViewModel.onValueChanged(sliderState, newValue)
                            },
                            onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                            sliderColors = sliderColors,
                        )
                    }
+4 −1
Original line number Diff line number Diff line
@@ -43,7 +43,10 @@ fun GridVolumeSliders(
            VolumeSlider(
                modifier = Modifier.fillMaxWidth(),
                state = sliderState,
                onValueChangeFinished = { sliderViewModel.onValueChangeFinished(sliderState, it) },
                onValueChange = { newValue: Float ->
                    sliderViewModel.onValueChanged(sliderState, newValue)
                },
                onIconTapped = { sliderViewModel.toggleMuted(sliderState) },
                sliderColors = sliderColors,
            )
        }
Loading