diff options
3 files changed, 21 insertions, 5 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelTest.kt index d8184dbadf9a..2dcfdd958df1 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelTest.kt @@ -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) diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt index 07c4de0ac0c4..b0d6d62289c7 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt @@ -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) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt index 4fda95bab2ec..9f3150f7366a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt @@ -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, ) } |