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

Commit 071d5e70 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Suspend when showing the Volume Dialog so that there is only one...

Merge "Suspend when showing the Volume Dialog so that there is only one visible at a time" into main
parents 5d6e140f 8a3be150
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ constructor(
            }
        }
        setCancelable(false)
        setCanceledOnTouchOutside(true)
        setCanceledOnTouchOutside(false)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
+7 −4
Original line number Diff line number Diff line
@@ -30,10 +30,12 @@ import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityMod
import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import javax.inject.Provider
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach

@VolumeDialogPluginScope
class VolumeDialogPluginViewModel
@@ -51,12 +53,12 @@ constructor(

    fun launchVolumeDialog() {
        dialogVisibilityInteractor.dialogVisibility
            .mapLatest { visibilityModel ->
            .onEach { visibilityModel ->
                with(visibilityModel) {
                    if (this is VolumeDialogVisibilityModel.Visible) {
                        showDialog()
                        toVolumeDialogUiEvent()?.let(uiEventLogger::log)
                        logger.onShow(reason)
                        showDialog()
                    }
                    if (this is VolumeDialogVisibilityModel.Dismissed) {
                        toVolumeDialogUiEvent()?.let(uiEventLogger::log)
@@ -86,12 +88,13 @@ constructor(
        dialogCsdWarningInteractor.onCsdWarningDismissed()
    }

    private fun showDialog() {
    private suspend fun showDialog(): Unit = suspendCoroutine { continuation ->
        volumeDialogProvider
            .get()
            .apply {
                setOnDismissListener {
                    dialogVisibilityInteractor.dismissDialog(Events.DISMISS_REASON_UNKNOWN)
                    continuation.resume(Unit)
                }
            }
            .show()