diff options
3 files changed, 54 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java index 1fd91debe3f6..9674b69baa00 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java @@ -475,8 +475,13 @@ public class BubbleController implements ConfigurationChangeListener { @VisibleForTesting public void onStatusBarStateChanged(boolean isShade) { + boolean didChange = mIsStatusBarShade != isShade; + if (DEBUG_BUBBLE_CONTROLLER) { + Log.d(TAG, "onStatusBarStateChanged isShade=" + isShade + " didChange=" + didChange); + } mIsStatusBarShade = isShade; - if (!mIsStatusBarShade) { + if (!mIsStatusBarShade && didChange) { + // Only collapse stack on change collapseStack(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java index 496bf37ffaeb..088d1654d1f0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationTestHelper.java @@ -299,7 +299,8 @@ public class NotificationTestHelper { public ExpandableNotificationRow createBubble() throws Exception { Notification n = createNotification(false /* isGroupSummary */, - null /* groupKey */, makeBubbleMetadata(null)); + null /* groupKey */, + makeBubbleMetadata(null /* deleteIntent */, false /* autoExpand */)); n.flags |= FLAG_BUBBLE; ExpandableNotificationRow row = generateRow(n, PKG, UID, USER_HANDLE, mDefaultInflationFlags, IMPORTANCE_HIGH); @@ -332,7 +333,8 @@ public class NotificationTestHelper { public ExpandableNotificationRow createBubbleInGroup() throws Exception { Notification n = createNotification(false /* isGroupSummary */, - GROUP_KEY /* groupKey */, makeBubbleMetadata(null)); + GROUP_KEY /* groupKey */, + makeBubbleMetadata(null /* deleteIntent */, false /* autoExpand */)); n.flags |= FLAG_BUBBLE; ExpandableNotificationRow row = generateRow(n, PKG, UID, USER_HANDLE, mDefaultInflationFlags, IMPORTANCE_HIGH); @@ -348,7 +350,7 @@ public class NotificationTestHelper { * @param deleteIntent the intent to assign to {@link BubbleMetadata#deleteIntent} */ public NotificationEntry createBubble(@Nullable PendingIntent deleteIntent) { - return createBubble(makeBubbleMetadata(deleteIntent), USER_HANDLE); + return createBubble(makeBubbleMetadata(deleteIntent, false /* autoExpand */), USER_HANDLE); } /** @@ -357,7 +359,16 @@ public class NotificationTestHelper { * @param handle the user to associate with this bubble. */ public NotificationEntry createBubble(UserHandle handle) { - return createBubble(makeBubbleMetadata(null), handle); + return createBubble(makeBubbleMetadata(null /* deleteIntent */, false /* autoExpand */), + handle); + } + + /** + * Returns an {@link NotificationEntry} that should be shown as a auto-expanded bubble. + */ + public NotificationEntry createAutoExpandedBubble() { + return createBubble(makeBubbleMetadata(null /* deleteIntent */, true /* autoExpand */), + USER_HANDLE); } /** @@ -565,7 +576,7 @@ public class NotificationTestHelper { assertTrue(countDownLatch.await(500, TimeUnit.MILLISECONDS)); } - private BubbleMetadata makeBubbleMetadata(PendingIntent deleteIntent) { + private BubbleMetadata makeBubbleMetadata(PendingIntent deleteIntent, boolean autoExpand) { Intent target = new Intent(mContext, BubblesTestActivity.class); PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, PendingIntent.FLAG_MUTABLE); @@ -574,6 +585,7 @@ public class NotificationTestHelper { Icon.createWithResource(mContext, R.drawable.android)) .setDeleteIntent(deleteIntent) .setDesiredHeight(314) + .setAutoExpandBubble(autoExpand) .build(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index db3b9b5c8f4e..d31f0bbf49af 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -1423,13 +1423,43 @@ public class BubblesTest extends SysuiTestCase { assertStackCollapsed(); // Post status bar state change update with the same value mBubbleController.onStatusBarStateChanged(false); - // Stack should remain collapsedb + // Stack should remain collapsed assertStackCollapsed(); // Post status bar state change which should trigger bubble to expand mBubbleController.onStatusBarStateChanged(true); assertStackExpanded(); } + /** + * Test to verify behavior for the following scenario: + * <ol> + * <li>device is locked with keyguard on, status bar shade state updates to + * <code>false</code></li> + * <li>notification entry is marked to be a bubble and it is set to auto-expand</li> + * <li>device unlock starts, status bar shade state receives another update to + * <code>false</code></li> + * <li>device is unlocked and status bar shade state is set to <code>true</code></li> + * <li>bubble should be expanded</li> + * </ol> + */ + @Test + public void testOnStatusBarStateChanged_newAutoExpandedBubbleRemainsExpanded() { + // Set device as locked + mBubbleController.onStatusBarStateChanged(false); + + // Create a auto-expanded bubble + NotificationEntry entry = mNotificationTestHelper.createAutoExpandedBubble(); + mEntryListener.onEntryAdded(entry); + + // When unlocking, we may receive duplicate updates with shade=false, ensure they don't + // clear the expanded state + mBubbleController.onStatusBarStateChanged(false); + mBubbleController.onStatusBarStateChanged(true); + + // After unlocking, stack should be expanded + assertStackExpanded(); + } + @Test public void testSetShouldAutoExpand_notifiesFlagChanged() { mBubbleController.updateBubble(mBubbleEntry); |