From 55a3e738a695d23982eb2e904f47a3435994a325 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Thu, 25 May 2017 18:30:10 -0700 Subject: [PATCH] Fixed a bug where min-priority were in the middle The recent intrusiveness could elevate min priority notifications temporarily and the reordering was also blocked while looking at it. We're now allowing the shade to reorder if a notification updates to min-priority. Test: manual, add intrusive notification, update while looking at the shade to min Change-Id: I75b23a7cbaecc8ae941d6680a924c79371c95991 Fixes: 37515606 --- .../android/systemui/statusbar/ExpandableNotificationRow.java | 10 ++++++++++ .../statusbar/notification/VisualStabilityManager.java | 9 +++++++++ .../src/com/android/systemui/statusbar/phone/StatusBar.java | 10 +++++++++- .../java/com/android/server/notification/RankingHelper.java | 4 +++- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 35425004c27b..a81b140e5753 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -91,6 +91,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } private LayoutListener mLayoutListener; + private boolean mLowPriorityStateUpdated; private final NotificationInflater mNotificationInflater; private int mIconTransformContentShift; private int mIconTransformContentShiftNoIcon; @@ -1121,6 +1122,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView } } + + public void setLowPriorityStateUpdated(boolean lowPriorityStateUpdated) { + mLowPriorityStateUpdated = lowPriorityStateUpdated; + } + + public boolean hasLowPriorityStateUpdated() { + return mLowPriorityStateUpdated; + } + public boolean isLowPriority() { return mIsLowPriority; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java index 8dab06908001..09aff1b97305 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/VisualStabilityManager.java @@ -38,6 +38,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener { private boolean mReorderingAllowed; private VisibilityLocationProvider mVisibilityLocationProvider; private ArraySet mAllowedReorderViews = new ArraySet<>(); + private ArraySet mLowPriorityReorderingViews = new ArraySet<>(); private ArraySet mAddedChildren = new ArraySet<>(); private boolean mPulsing; @@ -115,6 +116,9 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener { if (mAddedChildren.contains(row)) { return true; } + if (mLowPriorityReorderingViews.contains(row)) { + return true; + } if (mAllowedReorderViews.contains(row) && !mVisibilityLocationProvider.isInVisibleLocation(row)) { return true; @@ -130,6 +134,7 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener { public void onReorderingFinished() { mAllowedReorderViews.clear(); mAddedChildren.clear(); + mLowPriorityReorderingViews.clear(); } @Override @@ -141,6 +146,10 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener { } } + public void onLowPriorityUpdated(NotificationData.Entry entry) { + mLowPriorityReorderingViews.add(entry.row); + } + /** * Notify the visual stability manager that a new view was added and should be allowed to * reorder next time. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index d2ab823be674..e4042655a288 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1614,9 +1614,14 @@ public class StatusBar extends SystemUI implements DemoMode, mPendingNotifications.remove(entry.key); // If there was an async task started after the removal, we don't want to add it back to // the list, otherwise we might get leaks. - if (mNotificationData.get(entry.key) == null && !entry.row.isRemoved()) { + boolean isNew = mNotificationData.get(entry.key) == null; + if (isNew && !entry.row.isRemoved()) { addEntry(entry); + } else if (!isNew && entry.row.hasLowPriorityStateUpdated()) { + mVisualStabilityManager.onLowPriorityUpdated(entry); + updateNotificationShade(); } + entry.row.setLowPriorityStateUpdated(false); } private boolean shouldSuppressFullScreenIntent(String key) { @@ -6235,7 +6240,10 @@ public class StatusBar extends SystemUI implements DemoMode, StatusBarNotification sbn, ExpandableNotificationRow row) { row.setNeedsRedaction(needsRedaction(entry)); boolean isLowPriority = mNotificationData.isAmbient(sbn.getKey()); + boolean isUpdate = mNotificationData.get(entry.key) != null; + boolean wasLowPriority = row.isLowPriority(); row.setIsLowPriority(isLowPriority); + row.setLowPriorityStateUpdated(isUpdate && (wasLowPriority != isLowPriority)); // bind the click event to the content area mNotificationClicker.register(row, sbn); diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index 7a7bcede630e..c888364a58a6 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -447,7 +447,9 @@ public class RankingHelper implements RankingConfig { boolean isGroupSummary = record.getNotification().isGroupSummary(); record.setGlobalSortKey( String.format("intrsv=%c:grnk=0x%04x:gsmry=%c:%s:rnk=0x%04x", - record.isRecentlyIntrusive() ? '0' : '1', + record.isRecentlyIntrusive() + && record.getImportance() > NotificationManager.IMPORTANCE_MIN + ? '0' : '1', groupProxy.getAuthoritativeRank(), isGroupSummary ? '0' : '1', groupSortKeyPortion, -- 2.11.0