diff options
7 files changed, 39 insertions, 19 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt index 5b9213a8f23c..244f48019dc5 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt @@ -17,6 +17,7 @@ package com.android.systemui.qs.ui.composable import android.view.ViewGroup +import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.expandVertically @@ -122,6 +123,13 @@ private fun SceneScope.QuickSettingsScene( // TODO(b/280887232): implement the real UI. Box(modifier = modifier.fillMaxSize()) { val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsState() + + BackHandler( + enabled = isCustomizing, + ) { + viewModel.qsSceneAdapter.requestCloseCustomizer() + } + val collapsedHeaderHeight = with(LocalDensity.current) { ShadeHeader.Dimensions.CollapsedHeight.roundToPx() } val lifecycleOwner = LocalLifecycleOwner.current diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt index 27c4ec125b59..1a9ad3c285e6 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt @@ -496,4 +496,16 @@ class QSSceneAdapterImplTest : SysuiTestCase() { runCurrent() verify(qsImpl!!).setInSplitShade(true) } + + @Test + fun requestCloseCustomizer() = + testScope.runTest { + val qsImpl by collectLastValue(underTest.qsImpl) + + underTest.inflate(context) + runCurrent() + + underTest.requestCloseCustomizer() + verify(qsImpl!!).closeCustomizer() + } } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt index ef385673c950..d9ab3b172d2a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt @@ -133,18 +133,13 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test - fun destinationsCustomizing() = + fun destinationsCustomizing_noDestinations() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) qsFlexiglassAdapter.setCustomizing(true) - assertThat(destinations) - .isEqualTo( - mapOf( - Back to UserActionResult(Scenes.QuickSettings), - ) - ) + assertThat(destinations).isEmpty() } @Test @@ -164,18 +159,13 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test - fun destinations_whenCustomizing_inSplitShade() = + fun destinations_whenCustomizing_inSplitShade_noDestinations() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, true) val destinations by collectLastValue(underTest.destinationScenes) qsFlexiglassAdapter.setCustomizing(true) - assertThat(destinations) - .isEqualTo( - mapOf( - Back to UserActionResult(Scenes.QuickSettings), - ) - ) + assertThat(destinations).isEmpty() } @Test diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt index 671050477042..8d5aeab54343 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt @@ -93,6 +93,9 @@ interface QSSceneAdapter { val isQsFullyCollapsed: Boolean get() = true + /** Request that the customizer be closed. Possibly animating it. */ + fun requestCloseCustomizer() + sealed interface State { val isVisible: Boolean @@ -277,6 +280,10 @@ constructor( bottomNavBarSize.emit(padding) } + override fun requestCloseCustomizer() { + qsImpl.value?.closeCustomizer() + } + private fun QSImpl.applyState(state: QSSceneAdapter.State) { setQsVisible(state.isVisible) setExpanded(state.isVisible && state.expansion > 0f) diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt index c695d4c98308..62ed49150eec 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt @@ -20,7 +20,6 @@ import androidx.lifecycle.LifecycleOwner import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.Swipe import com.android.compose.animation.scene.SwipeDirection -import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.FooterActionsController @@ -47,7 +46,9 @@ constructor( val destinationScenes = qsSceneAdapter.isCustomizing.map { customizing -> if (customizing) { - mapOf<UserAction, UserActionResult>(Back to UserActionResult(Scenes.QuickSettings)) + // TODO(b/332749288) Empty map so there are no back handlers and back can close + // customizer + emptyMap() // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade // while customizing } else { diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerSceneImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerSceneImpl.kt index b8250cc284bd..34629934e467 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerSceneImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerSceneImpl.kt @@ -17,7 +17,6 @@ package com.android.systemui.shade import com.android.systemui.dagger.SysUISingleton -import com.android.systemui.plugins.qs.QSContainerController import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.shade.domain.interactor.ShadeInteractor import javax.inject.Inject @@ -28,7 +27,6 @@ class QuickSettingsControllerSceneImpl constructor( private val shadeInteractor: ShadeInteractor, private val qsSceneAdapter: QSSceneAdapter, - private val qsContainerController: QSContainerController, ) : QuickSettingsController { override val expanded: Boolean @@ -43,7 +41,7 @@ constructor( } override fun closeQsCustomizer() { - qsContainerController.setCustomizerShowing(false) + qsSceneAdapter.requestCloseCustomizer() } @Deprecated("specific to legacy split shade") diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/adapter/FakeQSSceneAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/adapter/FakeQSSceneAdapter.kt index 4d902fa35204..df08e4a78178 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/adapter/FakeQSSceneAdapter.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/adapter/FakeQSSceneAdapter.kt @@ -60,4 +60,8 @@ class FakeQSSceneAdapter( override suspend fun applyBottomNavBarPadding(padding: Int) { _navBarPadding.value = padding } + + override fun requestCloseCustomizer() { + _customizing.value = false + } } |