Split NotificationViewHierarchyManager out of StatusBar.
NotificationViewHierarchyManager handles bundling and unbundling of
notifications. In doing so, which notifications are parents/children of
the other can change. NotificationViewHierarchyManager makes sure the
view hierarchy of the notifications matches their grouping.
Bug: 63874929
Bug: 62602530
Test: runtest systemui
Test: Compile and run
Change-Id: Ia1c8ed75d4eb8df52897c5d6aa0713f8335b2a19
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index db83655..c10de61 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -76,12 +76,14 @@
import com.android.systemui.statusbar.NotificationData.Entry;
import com.android.systemui.statusbar.NotificationEntryManager;
import com.android.systemui.statusbar.NotificationGutsManager;
+import com.android.systemui.statusbar.NotificationListContainer;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLogger;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -103,25 +105,27 @@
@RunWithLooper
public class StatusBarTest extends SysuiTestCase {
- StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
- UnlockMethodCache mUnlockMethodCache;
- KeyguardIndicationController mKeyguardIndicationController;
- NotificationStackScrollLayout mStackScroller;
- TestableStatusBar mStatusBar;
- FakeMetricsLogger mMetricsLogger;
- HeadsUpManager mHeadsUpManager;
- NotificationData mNotificationData;
- PowerManager mPowerManager;
- SystemServicesProxy mSystemServicesProxy;
- NotificationPanelView mNotificationPanelView;
- ScrimController mScrimController;
- IStatusBarService mBarService;
- NotificationListener mNotificationListener;
- NotificationLogger mNotificationLogger;
- ArrayList<Entry> mNotificationList;
- FingerprintUnlockController mFingerprintUnlockController;
+ private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+ private UnlockMethodCache mUnlockMethodCache;
+ private KeyguardIndicationController mKeyguardIndicationController;
+ private NotificationStackScrollLayout mStackScroller;
+ private TestableStatusBar mStatusBar;
+ private FakeMetricsLogger mMetricsLogger;
+ private HeadsUpManager mHeadsUpManager;
+ private NotificationData mNotificationData;
+ private PowerManager mPowerManager;
+ private SystemServicesProxy mSystemServicesProxy;
+ private NotificationPanelView mNotificationPanelView;
+ private ScrimController mScrimController;
+ private IStatusBarService mBarService;
+ private NotificationListener mNotificationListener;
+ private NotificationLogger mNotificationLogger;
+ private ArrayList<Entry> mNotificationList;
+ private FingerprintUnlockController mFingerprintUnlockController;
private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
private TestableNotificationEntryManager mEntryManager;
+ private NotificationViewHierarchyManager mViewHierarchyManager;
+ private VisualStabilityManager mVisualStabilityManager;
@Before
public void setup() throws Exception {
@@ -133,7 +137,10 @@
mDependency.injectMockDependency(NotificationRemoteInputManager.class);
mDependency.injectMockDependency(NotificationMediaManager.class);
mDependency.injectMockDependency(ForegroundServiceController.class);
- mDependency.injectMockDependency(NotificationListener.class);
+ mNotificationListener = mDependency.injectMockDependency(NotificationListener.class);
+ mViewHierarchyManager = mDependency.injectMockDependency(
+ NotificationViewHierarchyManager.class);
+ mVisualStabilityManager = mDependency.injectMockDependency(VisualStabilityManager.class);
mDependency.injectTestDependency(KeyguardMonitor.class, mock(KeyguardMonitorImpl.class));
CommandQueue commandQueue = mock(CommandQueue.class);
when(commandQueue.asBinder()).thenReturn(new Binder());
@@ -161,7 +168,6 @@
new Handler(handlerThread.getLooper()));
when(powerManagerService.isInteractive()).thenReturn(true);
mBarService = mock(IStatusBarService.class);
- mNotificationListener = mock(NotificationListener.class);
mNotificationLogger = new NotificationLogger(mNotificationListener, mDependency.get(
UiOffloadThread.class));
@@ -175,7 +181,8 @@
mStatusBar = new TestableStatusBar(mStatusBarKeyguardViewManager, mUnlockMethodCache,
mKeyguardIndicationController, mStackScroller, mHeadsUpManager,
mPowerManager, mNotificationPanelView, mBarService, mNotificationListener,
- mNotificationLogger, mEntryManager, mScrimController, mFingerprintUnlockController);
+ mNotificationLogger, mVisualStabilityManager, mViewHierarchyManager,
+ mEntryManager, mScrimController, mFingerprintUnlockController);
mStatusBar.mContext = mContext;
mStatusBar.mComponents = mContext.getComponents();
doAnswer(invocation -> {
@@ -190,8 +197,8 @@
return null;
}).when(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any());
- mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar,
- mock(VisualStabilityManager.class), mHeadsUpManager, mNotificationData);
+ mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar, mHeadsUpManager,
+ mNotificationData);
mNotificationLogger.setUpWithPresenter(mStatusBar, mStackScroller);
when(mStackScroller.getActivatedChild()).thenReturn(null);
@@ -590,6 +597,8 @@
PowerManager pm, NotificationPanelView panelView,
IStatusBarService barService, NotificationListener notificationListener,
NotificationLogger notificationLogger,
+ VisualStabilityManager visualStabilityManager,
+ NotificationViewHierarchyManager viewHierarchyManager,
TestableNotificationEntryManager entryManager, ScrimController scrimController,
FingerprintUnlockController fingerprintUnlockController) {
mStatusBarKeyguardViewManager = man;
@@ -603,6 +612,8 @@
mNotificationListener = notificationListener;
mNotificationLogger = notificationLogger;
mWakefulnessLifecycle = createAwakeWakefulnessLifecycle();
+ mVisualStabilityManager = visualStabilityManager;
+ mViewHierarchyManager = viewHierarchyManager;
mEntryManager = entryManager;
mScrimController = scrimController;
mFingerprintUnlockController = fingerprintUnlockController;
@@ -644,6 +655,7 @@
mDependency.get(NotificationListener.class),
metricsLogger,
mDependency.get(DeviceProvisionedController.class),
+ mDependency.get(VisualStabilityManager.class),
mDependency.get(UiOffloadThread.class),
context);
mSystemServicesProxy = systemServicesProxy;
@@ -651,13 +663,11 @@
}
public void setUpForTest(NotificationPresenter presenter,
- NotificationStackScrollLayout stackScroller,
+ NotificationListContainer listContainer,
Callback callback,
- VisualStabilityManager visualStabilityManager,
HeadsUpManager headsUpManager,
NotificationData notificationData) {
- super.setUpWithPresenter(presenter, stackScroller, callback, visualStabilityManager,
- headsUpManager);
+ super.setUpWithPresenter(presenter, listContainer, callback, headsUpManager);
mNotificationData = notificationData;
mUseHeadsUp = true;
}