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

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

Make unmutable sliders icons untappable.

Flag: aconfig new_volume_panel TEAMFOOD
Test: atest AudioVolumeInteractorTest
Test: manual on the phone
Bug: 329642916
Change-Id: I61780cfb4541171d4013fbe4e19292ad26d5d84e
parent ad87df88
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.settingslib.volume.data.repository
import android.media.AudioDeviceInfo
import android.media.AudioManager
import android.media.AudioManager.OnCommunicationDeviceChangedListener
import androidx.concurrent.futures.DirectExecutor
import com.android.internal.util.ConcurrentUtils
import com.android.settingslib.volume.shared.AudioManagerEventsReceiver
import com.android.settingslib.volume.shared.model.AudioManagerEvent
@@ -109,8 +108,8 @@ class AudioRepositoryImpl(
            callbackFlow {
                    val listener = OnCommunicationDeviceChangedListener { trySend(Unit) }
                    audioManager.addOnCommunicationDeviceChangedListener(
                        DirectExecutor.INSTANCE,
                        listener
                        ConcurrentUtils.DIRECT_EXECUTOR,
                        listener,
                    )

                    awaitClose { audioManager.removeOnCommunicationDeviceChangedListener(listener) }
@@ -146,7 +145,7 @@ class AudioRepositoryImpl(
            maxVolume = audioManager.getStreamMaxVolume(audioStream.value),
            volume = audioManager.getStreamVolume(audioStream.value),
            isAffectedByRingerMode = audioManager.isStreamAffectedByRingerMode(audioStream.value),
            isMuted = audioManager.isStreamMute(audioStream.value),
            isMuted = audioManager.isStreamMute(audioStream.value)
        )
    }

+4 −0
Original line number Diff line number Diff line
@@ -66,6 +66,10 @@ class AudioVolumeInteractor(
        }
    }

    fun isMutable(audioStream: AudioStream): Boolean =
        // Alarm stream doesn't support muting
        audioStream.value != AudioManager.STREAM_ALARM

    private suspend fun processVolume(
        audioStreamModel: AudioStreamModel,
        ringerMode: RingerMode,
+37 −12
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.volume.panel.component.volume.ui.composable

import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.basicMarquee
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
import androidx.compose.material3.IconButton
@@ -27,6 +28,7 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.semantics.ProgressBarRangeInfo
@@ -38,6 +40,7 @@ import androidx.compose.ui.semantics.setProgress
import androidx.compose.ui.unit.dp
import com.android.compose.PlatformSlider
import com.android.compose.PlatformSliderColors
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.volume.panel.component.volume.slider.ui.viewmodel.SliderState

@@ -86,18 +89,11 @@ fun VolumeSlider(
                Text(text = state.valueText, color = LocalContentColor.current)
            } else {
                state.icon?.let {
                    IconButton(
                        onClick = onIconTapped,
                        colors =
                            IconButtonColors(
                                contentColor = LocalContentColor.current,
                                containerColor = Color.Transparent,
                                disabledContentColor = LocalContentColor.current,
                                disabledContainerColor = Color.Transparent,
                    SliderIcon(
                        icon = it,
                        onIconTapped = onIconTapped,
                        isTappable = state.isMutable,
                    )
                    ) {
                        Icon(modifier = Modifier.size(24.dp), icon = it)
                    }
                }
            }
        },
@@ -127,3 +123,32 @@ fun VolumeSlider(
        }
    )
}

@Composable
private fun SliderIcon(
    icon: Icon,
    onIconTapped: () -> Unit,
    isTappable: Boolean,
    modifier: Modifier = Modifier
) {
    if (isTappable) {
        IconButton(
            modifier = modifier,
            onClick = onIconTapped,
            colors =
                IconButtonColors(
                    contentColor = LocalContentColor.current,
                    containerColor = Color.Transparent,
                    disabledContentColor = LocalContentColor.current,
                    disabledContainerColor = Color.Transparent,
                ),
            content = { Icon(modifier = Modifier.size(24.dp), icon = icon) },
        )
    } else {
        Box(
            modifier = modifier,
            contentAlignment = Alignment.Center,
            content = { Icon(modifier = Modifier.size(24.dp), icon = icon) },
        )
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -200,6 +200,15 @@ class AudioVolumeInteractorTest : SysuiTestCase() {
        }
    }

    @Test
    fun alarmStream_isNotMutable() {
        with(kosmos) {
            val isMutable = underTest.isMutable(AudioStream(AudioManager.STREAM_ALARM))

            assertThat(isMutable).isFalse()
        }
    }

    private companion object {
        val audioStream = AudioStream(AudioManager.STREAM_SYSTEM)
    }
+2 −0
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ constructor(
            isEnabled = isEnabled,
            a11yStep = volumeRange.step,
            audioStreamModel = this,
            isMutable = audioVolumeInteractor.isMutable(audioStream),
        )
    }

@@ -160,6 +161,7 @@ constructor(
        override val disabledMessage: String?,
        override val isEnabled: Boolean,
        override val a11yStep: Int,
        override val isMutable: Boolean,
        val audioStreamModel: AudioStreamModel,
    ) : SliderState

Loading