summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shawn Lee <syeonlee@google.com> 2024-08-12 17:52:12 -0700
committer Shawn Lee <syeonlee@google.com> 2024-08-19 15:39:18 -0700
commit9c7d4ea72d65318700311dab6dbdc767fa85b405 (patch)
treee7c54d7619ed593f8f1a5b3ff9e5334a6acca030
parent86472f4da96f99a647f9f2ab627e8ab5fec72cda (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/HeadsUpRepository.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/HeadsUpNotificationInteractor.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java7
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/data/repository/HeadsUpNotificationRepositoryKosmos.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelKosmos.kt2
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,