diff options
| author | 2024-03-27 16:41:23 +0000 | |
|---|---|---|
| committer | 2024-03-27 16:41:23 +0000 | |
| commit | c3bab3203a0918dc2dc6b6fb4fc76c0d6d757e2c (patch) | |
| tree | f318b3406b150dc7ea0d306e4e4753ef89bf5440 | |
| parent | 97f29153465e11240e4f580f79ceac98485a1ddf (diff) | |
| parent | e311d992c37c2ed08fdc4a05a8f1a33736b2a645 (diff) | |
Merge "[flexiglass] Re-implement ShadeHeader disable in flexiglass" into main
14 files changed, 55 insertions, 28 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt index c5c48e6d4b6b..fcd77609768e 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt @@ -114,6 +114,11 @@ fun SceneScope.CollapsedShadeHeader( statusBarIconController: StatusBarIconController, modifier: Modifier = Modifier, ) { + val isDisabled by viewModel.isDisabled.collectAsState() + if (isDisabled) { + return + } + val formatProgress = animateSceneFloatAsState(0f, ShadeHeader.Keys.transitionProgress) .unsafeCompositionState(initialValue = 0f) @@ -251,6 +256,11 @@ fun SceneScope.ExpandedShadeHeader( statusBarIconController: StatusBarIconController, modifier: Modifier = Modifier, ) { + val isDisabled by viewModel.isDisabled.collectAsState() + if (isDisabled) { + return + } + val formatProgress = animateSceneFloatAsState(1f, ShadeHeader.Keys.transitionProgress) .unsafeCompositionState(initialValue = 1f) 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 61089049bf89..ef385673c950 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 @@ -34,6 +34,7 @@ import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository @@ -97,6 +98,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { ShadeHeaderViewModel( applicationScope = testScope.backgroundScope, context = context, + shadeInteractor = kosmos.shadeInteractor, mobileIconsInteractor = mobileIconsInteractor, mobileIconsViewModel = mobileIconsViewModel, privacyChipInteractor = kosmos.privacyChipInteractor, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt index 307778bf7e0f..c80835d9b2b3 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt @@ -241,6 +241,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() { ShadeHeaderViewModel( applicationScope = testScope.backgroundScope, context = context, + shadeInteractor = kosmos.shadeInteractor, mobileIconsInteractor = mobileIconsInteractor, mobileIconsViewModel = mobileIconsViewModel, privacyChipInteractor = kosmos.privacyChipInteractor, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt index 062741df01cf..4c573d3b83ea 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelTest.kt @@ -13,6 +13,7 @@ import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.activityStarter import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel @@ -69,6 +70,7 @@ class ShadeHeaderViewModelTest : SysuiTestCase() { ShadeHeaderViewModel( applicationScope = testScope.backgroundScope, context = context, + shadeInteractor = kosmos.shadeInteractor, mobileIconsInteractor = mobileIconsInteractor, mobileIconsViewModel = mobileIconsViewModel, privacyChipInteractor = kosmos.privacyChipInteractor, diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt index d1c4ec3ddacf..f90a3b14f968 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt @@ -110,6 +110,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { ShadeHeaderViewModel( applicationScope = testScope.backgroundScope, context = context, + shadeInteractor = kosmos.shadeInteractor, mobileIconsInteractor = mobileIconsInteractor, mobileIconsViewModel = mobileIconsViewModel, privacyChipInteractor = kosmos.privacyChipInteractor, @@ -280,17 +281,17 @@ class ShadeSceneViewModelTest : SysuiTestCase() { @Test fun upTransitionSceneKey_customizing_noTransition() = - testScope.runTest { - val destinationScenes by collectLastValue(underTest.destinationScenes) - - qsSceneAdapter.setCustomizing(true) - assertThat( - destinationScenes!! - .keys - .filterIsInstance<Swipe>() - .filter { it.direction == SwipeDirection.Up } - ).isEmpty() - } + testScope.runTest { + val destinationScenes by collectLastValue(underTest.destinationScenes) + + qsSceneAdapter.setCustomizing(true) + assertThat( + destinationScenes!!.keys.filterIsInstance<Swipe>().filter { + it.direction == SwipeDirection.Up + } + ) + .isEmpty() + } @Test fun shadeMode() = diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index c93ef65ae7c6..8d66fa77a7c3 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -334,6 +334,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private final ScrimController mScrimController; private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; private final TapAgainViewController mTapAgainViewController; + private final ShadeHeaderController mShadeHeaderController; private final boolean mVibrateOnOpening; private final VelocityTracker mVelocityTracker = VelocityTracker.obtain(); private final FlingAnimationUtils mFlingAnimationUtilsClosing; @@ -730,6 +731,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump FragmentService fragmentService, IStatusBarService statusBarService, ContentResolver contentResolver, + ShadeHeaderController shadeHeaderController, ScreenOffAnimationController screenOffAnimationController, LockscreenGestureLogger lockscreenGestureLogger, ShadeExpansionStateManager shadeExpansionStateManager, @@ -874,6 +876,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump mSplitShadeEnabled = mSplitShadeStateController.shouldUseSplitNotificationShade(mResources); mView.setWillNotDraw(!DEBUG_DRAWABLE); + mShadeHeaderController = shadeHeaderController; mLayoutInflater = layoutInflater; mFeatureFlags = featureFlags; mAnimateBack = predictiveBackAnimateShade(); @@ -1107,6 +1110,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump } mTapAgainViewController.init(); + mShadeHeaderController.init(); + mShadeHeaderController.setShadeCollapseAction( + () -> collapse(/* delayed= */ false , /* speedUpFactor= */ 1.0f)); mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mView)); mNotificationPanelUnfoldAnimationController.ifPresent(controller -> controller.setup(mNotificationContainerParent)); diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt index cde45f2060e5..0de3c10329e3 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt @@ -29,6 +29,9 @@ interface ShadeInteractor : BaseShadeInteractor { /** Emits true if the shade is currently allowed and false otherwise. */ val isShadeEnabled: StateFlow<Boolean> + /** Emits true if QS is currently allowed and false otherwise. */ + val isQsEnabled: StateFlow<Boolean> + /** Whether either the shade or QS is fully expanded. */ val isAnyFullyExpanded: StateFlow<Boolean> diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorEmptyImpl.kt index 5fbd2cfaec79..883ef97a6aad 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorEmptyImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorEmptyImpl.kt @@ -29,6 +29,7 @@ class ShadeInteractorEmptyImpl @Inject constructor() : ShadeInteractor { private val inactiveFlowBoolean = MutableStateFlow(false) private val inactiveFlowFloat = MutableStateFlow(0f) override val isShadeEnabled: StateFlow<Boolean> = inactiveFlowBoolean + override val isQsEnabled: StateFlow<Boolean> = inactiveFlowBoolean override val shadeExpansion: StateFlow<Float> = inactiveFlowFloat override val qsExpansion: StateFlow<Float> = inactiveFlowFloat override val isQsExpanded: StateFlow<Boolean> = inactiveFlowBoolean diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt index 7e14e58b4c9c..d68e28c930f4 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImpl.kt @@ -60,6 +60,11 @@ constructor( .distinctUntilChanged() .stateIn(scope, SharingStarted.Eagerly, initialValue = false) + override val isQsEnabled: StateFlow<Boolean> = + disableFlagsRepository.disableFlags + .map { it.isQuickSettingsEnabled() } + .stateIn(scope, SharingStarted.Eagerly, initialValue = false) + override val isAnyFullyExpanded: StateFlow<Boolean> = anyExpansion .map { it >= 1f } diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt index 60810a06249f..d8216dcfdec6 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt @@ -23,8 +23,6 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.log.LogBuffer import com.android.systemui.log.dagger.ShadeTouchLog -import com.android.systemui.shade.ShadeController -import com.android.systemui.shade.ShadeHeaderController import com.android.systemui.shade.TouchLogger.Companion.logTouchesTo import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.shade.shared.model.ShadeMode @@ -46,25 +44,15 @@ constructor( private val configurationRepository: ConfigurationRepository, private val shadeRepository: ShadeRepository, private val controller: SplitShadeStateController, - private val shadeController: ShadeController, - private val shadeHeaderController: ShadeHeaderController, private val scrimShadeTransitionController: ScrimShadeTransitionController, ) : CoreStartable { override fun start() { hydrateShadeMode() logTouchesTo(touchLog) - initHeaderController() scrimShadeTransitionController.init() } - private fun initHeaderController() { - shadeHeaderController.init() - shadeHeaderController.shadeCollapseAction = Runnable { - shadeController.animateCollapseShade() - } - } - private fun hydrateShadeMode() { applicationScope.launch { configurationRepository.onAnyConfigurationChange diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt index 1191c0f247f9..72a9c8d01554 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt @@ -30,6 +30,7 @@ import com.android.systemui.privacy.PrivacyItem import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.PrivacyChipInteractor import com.android.systemui.shade.domain.interactor.ShadeHeaderClockInteractor +import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel import java.util.Date @@ -53,6 +54,7 @@ class ShadeHeaderViewModel constructor( @Application private val applicationScope: CoroutineScope, context: Context, + shadeInteractor: ShadeInteractor, mobileIconsInteractor: MobileIconsInteractor, val mobileIconsViewModel: MobileIconsViewModel, private val privacyChipInteractor: PrivacyChipInteractor, @@ -85,6 +87,12 @@ constructor( /** Whether or not the privacy chip is enabled in the device privacy config. */ val isPrivacyChipEnabled: StateFlow<Boolean> = privacyChipInteractor.isChipEnabled + /** Whether or not the Shade Header should be disabled based on disableFlags. */ + val isDisabled: StateFlow<Boolean> = + shadeInteractor.isQsEnabled + .map { !it } + .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false) + private val longerPattern = context.getString(R.string.abbrev_wday_month_day_no_year_alarm) private val shorterPattern = context.getString(R.string.abbrev_month_day_no_year) private val longerDateFormat = MutableStateFlow(getFormatFromPattern(longerPattern)) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java index ad3012e54d75..e93c0f6a5559 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java @@ -52,6 +52,7 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.QSPanelController; import com.android.systemui.recents.ScreenPinningRequest; import com.android.systemui.res.R; +import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.CameraLauncher; import com.android.systemui.shade.QuickSettingsController; @@ -279,7 +280,9 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba } } - mShadeHeaderController.disable(state1, state2, animate); + if (!SceneContainerFlag.isEnabled()) { + mShadeHeaderController.disable(state1, state2, animate); + } } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java index 56e61e4c6442..5b6da0eeb40b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java @@ -711,6 +711,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mFragmentService, mStatusBarService, mContentResolver, + mShadeHeaderController, mScreenOffAnimationController, mLockscreenGestureLogger, mShadeExpansionStateManager, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt index 65e04f4e476d..7dfa68605ef3 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt @@ -22,9 +22,7 @@ import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.log.LogBuffer -import com.android.systemui.shade.ShadeHeaderController import com.android.systemui.shade.data.repository.shadeRepository -import com.android.systemui.shade.shadeController import com.android.systemui.shade.transition.ScrimShadeTransitionController import com.android.systemui.statusbar.policy.splitShadeStateController import com.android.systemui.util.mockito.mock @@ -37,8 +35,6 @@ val Kosmos.shadeStartable by Fixture { configurationRepository = configurationRepository, shadeRepository = shadeRepository, controller = splitShadeStateController, - shadeHeaderController = mock<ShadeHeaderController>(), scrimShadeTransitionController = mock<ScrimShadeTransitionController>(), - shadeController = shadeController ) } |