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

Commit 904521d7 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Fix double click on drawer button issue.

Flag: com.android.systemui.volume_redesign
Fixes: 388508196
Test: Checked UI.
Change-Id: I8a36ddc215412fdbef4e1493fc89eae4598aab67
parent 291ac766
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.haptics.fakeVibratorHelper
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.fakeVolumeDialogController
import com.android.systemui.testKosmos
import com.android.systemui.util.time.fakeSystemClock
import com.android.systemui.volume.data.repository.audioSystemRepository
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -78,7 +79,7 @@ class VolumeDialogRingerDrawerViewModelTest : SysuiTestCase() {
            val normalRingerMode = RingerMode(RINGER_MODE_NORMAL)

            setUpRingerModeAndOpenDrawer(normalRingerMode)
            underTest.onRingerButtonClicked(normalRingerMode)
            onRingerButtonClicked(normalRingerMode)
            controller.getState()

            assertThat(ringerViewModel).isInstanceOf(RingerViewModelState.Available::class.java)
@@ -95,7 +96,7 @@ class VolumeDialogRingerDrawerViewModelTest : SysuiTestCase() {

            setUpRingerModeAndOpenDrawer(normalRingerMode)
            // Select vibrate ringer mode.
            underTest.onRingerButtonClicked(vibrateRingerMode)
            onRingerButtonClicked(vibrateRingerMode)
            controller.getState()
            runCurrent()

@@ -109,11 +110,11 @@ class VolumeDialogRingerDrawerViewModelTest : SysuiTestCase() {

            val silentRingerMode = RingerMode(RINGER_MODE_SILENT)
            // Open drawer
            underTest.onRingerButtonClicked(vibrateRingerMode)
            onRingerButtonClicked(vibrateRingerMode)
            controller.getState()

            // Select silent ringer mode.
            underTest.onRingerButtonClicked(silentRingerMode)
            onRingerButtonClicked(silentRingerMode)
            controller.getState()
            runCurrent()

@@ -152,11 +153,16 @@ class VolumeDialogRingerDrawerViewModelTest : SysuiTestCase() {

    private fun TestScope.setUpRingerModeAndOpenDrawer(selectedRingerMode: RingerMode) {
        setUpRingerMode(selectedRingerMode)
        underTest.onRingerButtonClicked(RingerMode(selectedRingerMode.value))
        onRingerButtonClicked(selectedRingerMode)
        controller.getState()
        runCurrent()
    }

    private fun TestScope.onRingerButtonClicked(ringerMode: RingerMode) {
        kosmos.fakeSystemClock.advanceTime(400L)
        underTest.onRingerButtonClicked(ringerMode)
    }

    private fun TestScope.setUpRingerMode(selectedRingerMode: RingerMode) {
        controller.setStreamVolume(STREAM_RING, 50)
        controller.setRingerMode(selectedRingerMode.value, false)
+7 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.res.R
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.onConfigChanged
import com.android.systemui.util.time.SystemClock
import com.android.systemui.volume.Events
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
@@ -56,6 +57,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch

private const val DRAWER_STATE_ANIMATION_DURATION = 400L
private const val SHOW_RINGER_TOAST_COUNT = 12

@VolumeDialogScope
@@ -71,6 +73,7 @@ constructor(
    private val volumeDialogLogger: VolumeDialogLogger,
    private val visibilityInteractor: VolumeDialogVisibilityInteractor,
    configurationController: ConfigurationController,
    private val systemClock: SystemClock,
) {

    private val drawerState = MutableStateFlow<RingerDrawerState>(RingerDrawerState.Initial)
@@ -108,6 +111,7 @@ constructor(
            .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
            .build()

    private var lastClickTime = 0L
    init {
        ringerViewModel
            .onEach { viewModelState ->
@@ -124,6 +128,9 @@ constructor(
    }

    fun onRingerButtonClicked(ringerMode: RingerMode, isSelectedButton: Boolean = false) {
        val currentTime = systemClock.currentTimeMillis()
        if (currentTime - lastClickTime < DRAWER_STATE_ANIMATION_DURATION) return
        lastClickTime = currentTime
        if (drawerState.value is RingerDrawerState.Open && !isSelectedButton) {
            Events.writeEvent(Events.EVENT_RINGER_TOGGLE, ringerMode.value)
            volumeDialogLogger.onRingerModeChanged(ringerMode)
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ 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.statusbar.policy.configurationController
import com.android.systemui.util.time.fakeSystemClock
import com.android.systemui.util.time.systemClock
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
@@ -39,5 +41,6 @@ val Kosmos.volumeDialogRingerDrawerViewModel by
            volumeDialogLogger = volumeDialogLogger,
            visibilityInteractor = volumeDialogVisibilityInteractor,
            configurationController = configurationController,
            systemClock = fakeSystemClock,
        )
    }