diff options
| author | 2024-08-12 17:52:12 -0700 | |
|---|---|---|
| committer | 2024-08-19 15:39:18 -0700 | |
| commit | 9c7d4ea72d65318700311dab6dbdc767fa85b405 (patch) | |
| tree | e7c54d7619ed593f8f1a5b3ff9e5334a6acca030 | |
| parent | 86472f4da96f99a647f9f2ab627e8ab5fec72cda (diff) | |
[flexiglass] Fix HUN placeholder remaining visible after the Shade is opened and closed
In legacy, opening the shade calls HeadsUpManagerPhone.onExpandingFinished (the call comes from NPVC). This leads to the HUN entry being removed, which in flexiglass will trigger the HUN placeholder disappearing. We need to relocate this side-effect to depend on scene state instead, in order to avoid leaving the placeholder and flexiglass visibility in a bad state.
Bug: 357661886
Test: manually verified that notification placeholder and flexiglass are not visible after receiving a HUN, opening shade, and then closing shade.
Test: manually verified with logging that HeadsUpManager entries are updated correctly upon changing scenes.
Flag: com.android.systemui.scene_container
Change-Id: Id78e47f9b384cbf5ffc42c8845d893043d2a0615
6 files changed, 32 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/HeadsUpRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/HeadsUpRepository.kt index a9389472abbb..28e39955f0c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/HeadsUpRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/HeadsUpRepository.kt @@ -47,4 +47,7 @@ interface HeadsUpRepository { /** Unpin all currently pinned HUNs. */ fun unpinAll(userUnPinned: Boolean) + + /** Release entries that were waiting for a shade expansion to complete. */ + fun releaseAfterExpansion() } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/HeadsUpNotificationInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/HeadsUpNotificationInteractor.kt index cded83fc999f..74ec7edd5398 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/HeadsUpNotificationInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/HeadsUpNotificationInteractor.kt @@ -153,6 +153,11 @@ constructor( fun unpinAll(userUnPinned: Boolean) { headsUpRepository.unpinAll(userUnPinned) } + + /** Notifies that the current scene transition is idle. */ + fun onTransitionIdle() { + headsUpRepository.releaseAfterExpansion() + } } class HeadsUpRowInteractor(repository: HeadsUpRowRepository) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt index c5b575caa969..ffa1de79b7e4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt @@ -16,10 +16,12 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel +import com.android.compose.animation.scene.ObservableTransitionState import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.lifecycle.SysUiViewModel +import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationInteractor @@ -33,6 +35,7 @@ import dagger.assisted.AssistedInject import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch /** @@ -43,6 +46,7 @@ class NotificationsPlaceholderViewModel @AssistedInject constructor( private val interactor: NotificationStackAppearanceInteractor, + private val sceneInteractor: SceneInteractor, private val shadeInteractor: ShadeInteractor, private val headsUpNotificationInteractor: HeadsUpNotificationInteractor, featureFlags: FeatureFlagsClassic, @@ -67,6 +71,13 @@ constructor( .filter { it } .collect { headsUpNotificationInteractor.unpinAll(true) } } + + launch { + sceneInteractor.transitionState + .map { state -> state is ObservableTransitionState.Idle } + .filter { it } + .collect { headsUpNotificationInteractor.onTransitionIdle() } + } } activateFlowDumper() } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java index 6e1e9ace5428..720b257e4006 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java @@ -35,6 +35,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.res.R; +import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -251,6 +252,12 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements return entry != null && mSystemClock.elapsedRealtime() < entry.mPostTime; } + @Override + public void releaseAfterExpansion() { + if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) return; + onExpandingFinished(); + } + public void onExpandingFinished() { if (mReleaseOnExpandFinish) { releaseAllImmediately(); diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/data/repository/HeadsUpNotificationRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/data/repository/HeadsUpNotificationRepositoryKosmos.kt index 59a2eeb90fee..1fa623655fcb 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/data/repository/HeadsUpNotificationRepositoryKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/data/repository/HeadsUpNotificationRepositoryKosmos.kt @@ -48,6 +48,10 @@ class FakeHeadsUpNotificationRepository : HeadsUpRepository { // do nothing } + override fun releaseAfterExpansion() { + // do nothing + } + fun setNotifications(notifications: List<HeadsUpRowRepository>) { this.orderedHeadsUpRows.value = notifications.toList() } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelKosmos.kt index 3247525f1a36..634354b033ef 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelKosmos.kt @@ -20,6 +20,7 @@ import com.android.systemui.dump.dumpManager import com.android.systemui.flags.featureFlagsClassic import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture +import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationStackAppearanceInteractor @@ -27,6 +28,7 @@ import com.android.systemui.statusbar.notification.stack.domain.interactor.notif val Kosmos.notificationsPlaceholderViewModel by Fixture { NotificationsPlaceholderViewModel( interactor = notificationStackAppearanceInteractor, + sceneInteractor = sceneInteractor, shadeInteractor = shadeInteractor, headsUpNotificationInteractor = headsUpNotificationInteractor, featureFlags = featureFlagsClassic, |