Revert "Add view models for volume dialog ringer drawer"
This reverts commit e030378448c602adfa8229a92903aae619a67b5d.
Reason for revert: <Potential culprit for b/375074665 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.>
Change-Id: Ife5e5c72a4cd4df6bcddcae5276d49ee45490bcb
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
deleted file mode 100644
index faf01ed..0000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelTest.kt
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-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.testing.TestableLooper
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.settingslib.volume.shared.model.RingerMode
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectLastValue
-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.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalCoroutinesApi::class)
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-@TestableLooper.RunWithLooper
-class VolumeDialogRingerDrawerViewModelTest : SysuiTestCase() {
-
- private val kosmos = testKosmos()
- private val testScope = kosmos.testScope
- private val controller = kosmos.fakeVolumeDialogController
- private val vibratorHelper = kosmos.fakeVibratorHelper
-
- private lateinit var underTest: VolumeDialogRingerDrawerViewModel
-
- @Before
- fun setUp() {
- underTest = kosmos.volumeDialogRingerDrawerViewModel
- }
-
- @Test
- fun onSelectedRingerNormalModeButtonClicked_openDrawer() =
- testScope.runTest {
- val ringerViewModel by collectLastValue(underTest.ringerViewModel)
- val normalRingerMode = RingerMode(RINGER_MODE_NORMAL)
-
- setUpRingerModeAndOpenDrawer(normalRingerMode)
-
- assertThat(ringerViewModel).isNotNull()
- assertThat(ringerViewModel?.drawerState)
- .isEqualTo(RingerDrawerState.Open(normalRingerMode))
- }
-
- @Test
- fun onSelectedRingerButtonClicked_drawerOpened_closeDrawer() =
- testScope.runTest {
- val ringerViewModel by collectLastValue(underTest.ringerViewModel)
- val normalRingerMode = RingerMode(RINGER_MODE_NORMAL)
-
- setUpRingerModeAndOpenDrawer(normalRingerMode)
- underTest.onRingerButtonClicked(normalRingerMode)
- controller.getState()
-
- assertThat(ringerViewModel).isNotNull()
- assertThat(ringerViewModel?.drawerState)
- .isEqualTo(RingerDrawerState.Closed(normalRingerMode))
- }
-
- @Test
- fun onNewRingerButtonClicked_drawerOpened_updateRingerMode_closeDrawer() =
- testScope.runTest {
- val ringerViewModel by collectLastValue(underTest.ringerViewModel)
- val vibrateRingerMode = RingerMode(RINGER_MODE_VIBRATE)
-
- setUpRingerModeAndOpenDrawer(RingerMode(RINGER_MODE_NORMAL))
- // Select vibrate ringer mode.
- underTest.onRingerButtonClicked(vibrateRingerMode)
- controller.getState()
- runCurrent()
-
- assertThat(ringerViewModel).isNotNull()
- assertThat(
- ringerViewModel
- ?.availableButtons
- ?.get(ringerViewModel!!.currentButtonIndex)
- ?.ringerMode
- )
- .isEqualTo(vibrateRingerMode)
- assertThat(ringerViewModel?.drawerState)
- .isEqualTo(RingerDrawerState.Closed(vibrateRingerMode))
-
- val silentRingerMode = RingerMode(RINGER_MODE_SILENT)
- // Open drawer
- underTest.onRingerButtonClicked(vibrateRingerMode)
- controller.getState()
-
- // Select silent ringer mode.
- underTest.onRingerButtonClicked(silentRingerMode)
- controller.getState()
- runCurrent()
-
- assertThat(ringerViewModel).isNotNull()
- assertThat(
- ringerViewModel
- ?.availableButtons
- ?.get(ringerViewModel!!.currentButtonIndex)
- ?.ringerMode
- )
- .isEqualTo(silentRingerMode)
- assertThat(ringerViewModel?.drawerState)
- .isEqualTo(RingerDrawerState.Closed(silentRingerMode))
- assertThat(controller.hasScheduledTouchFeedback).isFalse()
- assertThat(vibratorHelper.totalVibrations).isEqualTo(2)
- }
-
- private fun TestScope.setUpRingerModeAndOpenDrawer(selectedRingerMode: RingerMode) {
- controller.setStreamVolume(STREAM_RING, 50)
- controller.setRingerMode(selectedRingerMode.value, false)
- runCurrent()
-
- underTest.onRingerButtonClicked(RingerMode(selectedRingerMode.value))
- controller.getState()
- runCurrent()
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerButtonViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerButtonViewModel.kt
deleted file mode 100644
index 78d2d16..0000000
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerButtonViewModel.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-import android.annotation.DrawableRes
-import android.annotation.StringRes
-import com.android.settingslib.volume.shared.model.RingerMode
-
-/** Models ringer button that corresponds to each ringer mode. */
-data class RingerButtonViewModel(
- /** Image resource id for the image button. */
- @DrawableRes val imageResId: Int,
- /** Content description for a11y. */
- @StringRes val contentDescriptionResId: Int,
- /** Hint label for accessibility use. */
- @StringRes val hintLabelResId: Int,
- /** Used to notify view model when button is clicked. */
- val ringerMode: RingerMode,
-)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerDrawerState.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerDrawerState.kt
deleted file mode 100644
index f321837..0000000
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerDrawerState.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-import com.android.settingslib.volume.shared.model.RingerMode
-
-/** Models volume dialog ringer drawer state */
-sealed interface RingerDrawerState {
-
- /** When clicked to open drawer */
- data class Open(val mode: RingerMode) : RingerDrawerState
-
- /** When clicked to close drawer */
- data class Closed(val mode: RingerMode) : RingerDrawerState
-
- /** Initial state when volume dialog is shown with a closed drawer. */
- interface Initial : RingerDrawerState {
- companion object : Initial
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt
deleted file mode 100644
index a09bfeb..0000000
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/RingerViewModel.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-/** Models volume dialog ringer */
-data class RingerViewModel(
- /** List of the available buttons according to the available modes */
- val availableButtons: List<RingerButtonViewModel?>,
- /** The index of the currently selected button */
- val currentButtonIndex: Int,
- /** For open and close animations */
- val drawerState: RingerDrawerState,
-)
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
deleted file mode 100644
index ac82ae3..0000000
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-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.os.VibrationEffect
-import com.android.settingslib.volume.shared.model.RingerMode
-import com.android.systemui.dagger.qualifiers.Background
-import com.android.systemui.res.R
-import com.android.systemui.statusbar.VibratorHelper
-import com.android.systemui.volume.Events
-import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
-import com.android.systemui.volume.dialog.ringer.domain.VolumeDialogRingerInteractor
-import com.android.systemui.volume.dialog.ringer.shared.model.VolumeDialogRingerModel
-import com.android.systemui.volume.dialog.shared.VolumeDialogLogger
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
-import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.filterNotNull
-import kotlinx.coroutines.flow.flowOn
-import kotlinx.coroutines.flow.stateIn
-
-private const val TAG = "VolumeDialogRingerDrawerViewModel"
-
-class VolumeDialogRingerDrawerViewModel
-@AssistedInject
-constructor(
- @VolumeDialog private val coroutineScope: CoroutineScope,
- @Background private val backgroundDispatcher: CoroutineDispatcher,
- private val interactor: VolumeDialogRingerInteractor,
- private val vibrator: VibratorHelper,
- private val volumeDialogLogger: VolumeDialogLogger,
-) {
-
- private val drawerState = MutableStateFlow<RingerDrawerState>(RingerDrawerState.Initial)
-
- val ringerViewModel: Flow<RingerViewModel> =
- combine(interactor.ringerModel, drawerState) { ringerModel, state ->
- ringerModel.toViewModel(state)
- }
- .flowOn(backgroundDispatcher)
- .stateIn(coroutineScope, SharingStarted.Eagerly, null)
- .filterNotNull()
-
- // Vibration attributes.
- private val sonificiationVibrationAttributes =
- AudioAttributes.Builder()
- .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
- .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
- .build()
-
- fun onRingerButtonClicked(ringerMode: RingerMode) {
- if (drawerState.value is RingerDrawerState.Open) {
- Events.writeEvent(Events.EVENT_RINGER_TOGGLE, ringerMode.value)
- provideTouchFeedback(ringerMode)
- interactor.setRingerMode(ringerMode)
- }
- drawerState.value =
- when (drawerState.value) {
- is RingerDrawerState.Initial -> {
- RingerDrawerState.Open(ringerMode)
- }
- is RingerDrawerState.Open -> {
- RingerDrawerState.Closed(ringerMode)
- }
- is RingerDrawerState.Closed -> {
- RingerDrawerState.Open(ringerMode)
- }
- }
- }
-
- private fun provideTouchFeedback(ringerMode: RingerMode) {
- when (ringerMode.value) {
- RINGER_MODE_NORMAL -> {
- interactor.scheduleTouchFeedback()
- null
- }
- RINGER_MODE_SILENT -> VibrationEffect.get(VibrationEffect.EFFECT_CLICK)
- RINGER_MODE_VIBRATE -> VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK)
- else -> VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK)
- }?.let { vibrator.vibrate(it, sonificiationVibrationAttributes) }
- }
-
- private fun VolumeDialogRingerModel.toViewModel(
- drawerState: RingerDrawerState
- ): RingerViewModel {
- val currentIndex = availableModes.indexOf(currentRingerMode)
- if (currentIndex == -1) {
- volumeDialogLogger.onCurrentRingerModeIsUnsupported(currentRingerMode)
- }
- return RingerViewModel(
- availableButtons = availableModes.map { mode -> toButtonViewModel(mode) },
- currentButtonIndex = currentIndex,
- drawerState = drawerState,
- )
- }
-
- private fun VolumeDialogRingerModel.toButtonViewModel(
- ringerMode: RingerMode
- ): RingerButtonViewModel? {
- return when (ringerMode.value) {
- RINGER_MODE_SILENT ->
- RingerButtonViewModel(
- imageResId = R.drawable.ic_speaker_mute,
- contentDescriptionResId = R.string.volume_ringer_status_silent,
- hintLabelResId = R.string.volume_ringer_hint_unmute,
- ringerMode = ringerMode,
- )
- RINGER_MODE_VIBRATE ->
- RingerButtonViewModel(
- imageResId = R.drawable.ic_volume_ringer_vibrate,
- contentDescriptionResId = R.string.volume_ringer_status_vibrate,
- hintLabelResId = R.string.volume_ringer_hint_vibrate,
- ringerMode = ringerMode,
- )
- RINGER_MODE_NORMAL ->
- when {
- isMuted && isEnabled ->
- RingerButtonViewModel(
- imageResId = R.drawable.ic_speaker_mute,
- contentDescriptionResId = R.string.volume_ringer_status_normal,
- hintLabelResId = R.string.volume_ringer_hint_unmute,
- ringerMode = ringerMode,
- )
-
- availableModes.contains(RingerMode(RINGER_MODE_VIBRATE)) ->
- RingerButtonViewModel(
- imageResId = R.drawable.ic_speaker_on,
- contentDescriptionResId = R.string.volume_ringer_status_normal,
- hintLabelResId = R.string.volume_ringer_hint_vibrate,
- ringerMode = ringerMode,
- )
-
- else ->
- RingerButtonViewModel(
- imageResId = R.drawable.ic_speaker_on,
- contentDescriptionResId = R.string.volume_ringer_status_normal,
- hintLabelResId = R.string.volume_ringer_hint_mute,
- ringerMode = ringerMode,
- )
- }
- else -> null
- }
- }
-
- @AssistedFactory
- interface Factory {
- fun create(): VolumeDialogRingerDrawerViewModel
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt
index 9a3aa7e..59c38c0 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/shared/VolumeDialogLogger.kt
@@ -15,7 +15,6 @@
*/
package com.android.systemui.volume.dialog.shared
-import com.android.settingslib.volume.shared.model.RingerMode
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.VolumeLog
@@ -44,13 +43,4 @@
{ "Dismiss: ${Events.DISMISS_REASONS[int1]}" },
)
}
-
- fun onCurrentRingerModeIsUnsupported(ringerMode: RingerMode) {
- logBuffer.log(
- TAG,
- LogLevel.DEBUG,
- { int1 = ringerMode.value },
- { "Current ringer mode: $int1, ringer mode is unsupported in ringer drawer options" },
- )
- }
}
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
deleted file mode 100644
index db1c01a..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.ringer.ui.viewmodel
-
-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.volume.dialog.ringer.domain.volumeDialogRingerInteractor
-import com.android.systemui.volume.dialog.shared.volumeDialogLogger
-
-val Kosmos.volumeDialogRingerDrawerViewModel by
- Kosmos.Fixture {
- VolumeDialogRingerDrawerViewModel(
- backgroundDispatcher = testDispatcher,
- coroutineScope = applicationCoroutineScope,
- interactor = volumeDialogRingerInteractor,
- vibrator = vibratorHelper,
- volumeDialogLogger = volumeDialogLogger,
- )
- }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/shared/VolumeDialogLoggerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/shared/VolumeDialogLoggerKosmos.kt
deleted file mode 100644
index f9d4a99..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/shared/VolumeDialogLoggerKosmos.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.volume.dialog.shared
-
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.log.logcatLogBuffer
-
-val Kosmos.volumeDialogLogger by Kosmos.Fixture { VolumeDialogLogger(logcatLogBuffer()) }