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

Commit f677e37d authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge "Reuse sound policy interactor in volume ringer architecture" into main

parents 250ae466 da78bd4f
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.media.AudioManager
import android.media.AudioManager.RINGER_MODE_NORMAL
import android.media.AudioManager.RINGER_MODE_SILENT
import android.media.AudioManager.RINGER_MODE_VIBRATE
import android.provider.Settings
import com.android.settingslib.volume.data.repository.AudioSystemRepository
import com.android.settingslib.volume.shared.model.RingerMode
import com.android.systemui.plugins.VolumeDialogController
@@ -66,11 +65,6 @@ constructor(
                            }
                        },
                currentRingerMode = RingerMode(state.ringerModeInternal),
                isEnabled =
                    !(state.zenMode == Settings.Global.ZEN_MODE_ALARMS ||
                        state.zenMode == Settings.Global.ZEN_MODE_NO_INTERRUPTIONS ||
                        (state.zenMode == Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS &&
                            state.disallowRinger)),
                isMuted = it.level == 0 || it.muted,
                level = it.level,
                levelMax = it.levelMax,
+0 −2
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ data class VolumeDialogRingerModel(
    val availableModes: List<RingerMode>,
    /** Current ringer mode internal */
    val currentRingerMode: RingerMode,
    /** whether the ringer is allowed given the current ZenMode */
    val isEnabled: Boolean,
    /** Whether the current ring stream level is zero or the controller state is muted */
    val isMuted: Boolean,
    /** Ring stream level */
+22 −11
Original line number Diff line number Diff line
@@ -21,10 +21,13 @@ import android.media.AudioAttributes
import android.media.AudioManager.RINGER_MODE_NORMAL
import android.media.AudioManager.RINGER_MODE_SILENT
import android.media.AudioManager.RINGER_MODE_VIBRATE
import android.media.AudioManager.STREAM_RING
import android.os.VibrationEffect
import android.widget.Toast
import com.android.internal.R as internalR
import com.android.settingslib.Utils
import com.android.settingslib.notification.domain.interactor.NotificationsSoundPolicyInteractor
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.settingslib.volume.shared.model.RingerMode
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
@@ -57,7 +60,8 @@ constructor(
    @Application private val applicationContext: Context,
    @VolumeDialog private val coroutineScope: CoroutineScope,
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    private val interactor: VolumeDialogRingerInteractor,
    soundPolicyInteractor: NotificationsSoundPolicyInteractor,
    private val ringerInteractor: VolumeDialogRingerInteractor,
    private val vibrator: VibratorHelper,
    private val volumeDialogLogger: VolumeDialogLogger,
    private val visibilityInteractor: VolumeDialogVisibilityInteractor,
@@ -66,10 +70,14 @@ constructor(
    private val drawerState = MutableStateFlow<RingerDrawerState>(RingerDrawerState.Initial)

    val ringerViewModel: StateFlow<RingerViewModelState> =
        combine(interactor.ringerModel, drawerState) { ringerModel, state ->
        combine(
                soundPolicyInteractor.isZenMuted(AudioStream(STREAM_RING)),
                ringerInteractor.ringerModel,
                drawerState,
            ) { isZenMuted, ringerModel, state ->
                level = ringerModel.level
                levelMax = ringerModel.levelMax
                ringerModel.toViewModel(state)
                ringerModel.toViewModel(state, isZenMuted)
            }
            .flowOn(backgroundDispatcher)
            .stateIn(coroutineScope, SharingStarted.Eagerly, RingerViewModelState.Unavailable)
@@ -90,7 +98,7 @@ constructor(
            Events.writeEvent(Events.EVENT_RINGER_TOGGLE, ringerMode.value)
            provideTouchFeedback(ringerMode)
            maybeShowToast(ringerMode)
            interactor.setRingerMode(ringerMode)
            ringerInteractor.setRingerMode(ringerMode)
        }
        visibilityInteractor.resetDismissTimeout()
        drawerState.value =
@@ -113,7 +121,7 @@ constructor(
    private fun provideTouchFeedback(ringerMode: RingerMode) {
        when (ringerMode.value) {
            RINGER_MODE_NORMAL -> {
                interactor.scheduleTouchFeedback()
                ringerInteractor.scheduleTouchFeedback()
                null
            }
            RINGER_MODE_SILENT -> VibrationEffect.get(VibrationEffect.EFFECT_CLICK)
@@ -123,7 +131,8 @@ constructor(
    }

    private fun VolumeDialogRingerModel.toViewModel(
        drawerState: RingerDrawerState
        drawerState: RingerDrawerState,
        isZenMuted: Boolean,
    ): RingerViewModelState {
        val currentIndex = availableModes.indexOf(currentRingerMode)
        if (currentIndex == -1) {
@@ -132,10 +141,11 @@ constructor(
        return if (currentIndex == -1 || isSingleVolume) {
            RingerViewModelState.Unavailable
        } else {
            toButtonViewModel(currentRingerMode, isSelectedButton = true)?.let {
            toButtonViewModel(currentRingerMode, isZenMuted, isSelectedButton = true)?.let {
                RingerViewModelState.Available(
                    RingerViewModel(
                        availableButtons = availableModes.map { mode -> toButtonViewModel(mode) },
                        availableButtons =
                            availableModes.map { mode -> toButtonViewModel(mode, isZenMuted) },
                        currentButtonIndex = currentIndex,
                        selectedButton = it,
                        drawerState = drawerState,
@@ -147,6 +157,7 @@ constructor(

    private fun VolumeDialogRingerModel.toButtonViewModel(
        ringerMode: RingerMode,
        isZenMuted: Boolean,
        isSelectedButton: Boolean = false,
    ): RingerButtonViewModel? {
        return when (ringerMode.value) {
@@ -176,7 +187,7 @@ constructor(
                )
            RINGER_MODE_NORMAL ->
                when {
                    isMuted && isEnabled ->
                    isMuted && !isZenMuted ->
                        RingerButtonViewModel(
                            imageResId =
                                if (isSelectedButton) {
@@ -226,7 +237,7 @@ constructor(

    private fun maybeShowToast(ringerMode: RingerMode) {
        coroutineScope.launch {
            val seenToastCount = interactor.getToastCount()
            val seenToastCount = ringerInteractor.getToastCount()
            if (seenToastCount > SHOW_RINGER_TOAST_COUNT) {
                return@launch
            }
@@ -260,7 +271,7 @@ constructor(
                        )
                }
            toastText?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_SHORT).show() }
            interactor.updateToastCount(seenToastCount)
            ringerInteractor.updateToastCount(seenToastCount)
        }
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.haptics.vibratorHelper
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.statusbar.notification.domain.interactor.notificationsSoundPolicyInteractor
import com.android.systemui.volume.dialog.domain.interactor.volumeDialogVisibilityInteractor
import com.android.systemui.volume.dialog.ringer.domain.volumeDialogRingerInteractor
import com.android.systemui.volume.dialog.shared.volumeDialogLogger
@@ -31,7 +32,8 @@ val Kosmos.volumeDialogRingerDrawerViewModel by
            applicationContext = applicationContext,
            backgroundDispatcher = testDispatcher,
            coroutineScope = applicationCoroutineScope,
            interactor = volumeDialogRingerInteractor,
            soundPolicyInteractor = notificationsSoundPolicyInteractor,
            ringerInteractor = volumeDialogRingerInteractor,
            vibrator = vibratorHelper,
            volumeDialogLogger = volumeDialogLogger,
            visibilityInteractor = volumeDialogVisibilityInteractor,