From 01ee2cd5c4071f528d4b208deeec8d10eec5e1c4 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Wed, 21 Dec 2016 18:23:11 +0100 Subject: [PATCH] Allowing heads-up notifications now on the lock screen In order to isolate notifications properly from their group and in order to allow them to visually reorder, we now allow heads up notifications on the lock screen. Change-Id: I1d04a92e66ae92ecee4f8ee23b218c2b167dadd4 Test: existing tests pass Test: add heads up on lockscreen Test: heads up group child on lockscreen Bug: 32442500 --- .../android/systemui/statusbar/BaseStatusBar.java | 12 +++++++----- .../statusbar/ExpandableNotificationRow.java | 6 +++--- .../systemui/statusbar/phone/PhoneStatusBar.java | 1 + .../systemui/statusbar/policy/HeadsUpManager.java | 9 ++++++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 8562fa19c5461..352d262710355 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -2219,7 +2219,9 @@ public abstract class BaseStatusBar extends SystemUI implements entry.row.setVisibility(View.GONE); } else { boolean wasGone = entry.row.getVisibility() == View.GONE; - entry.row.setVisibility(View.VISIBLE); + if (wasGone) { + entry.row.setVisibility(View.VISIBLE); + } if (!childNotification && !entry.row.isRemoved()) { if (wasGone) { // notify the scroller of a child addition @@ -2450,9 +2452,7 @@ public abstract class BaseStatusBar extends SystemUI implements return false; } - boolean inUse = mPowerManager.isScreenOn() - && (!mStatusBarKeyguardViewManager.isShowing() - || mStatusBarKeyguardViewManager.isOccluded()); + boolean inUse = mPowerManager.isScreenOn(); try { inUse = inUse && !mDreamManager.isDreaming(); } catch (RemoteException e) { @@ -2491,7 +2491,9 @@ public abstract class BaseStatusBar extends SystemUI implements if (DEBUG) Log.d(TAG, "No peeking: accessible fullscreen: " + sbn.getKey()); return false; } else { - return true; + // we only allow head-up on the lockscreen if it doesn't have a fullscreen intent + return !mStatusBarKeyguardViewManager.isShowing() + || mStatusBarKeyguardViewManager.isOccluded(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 8ae84cf3515b2..f91ddd6ed1106 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -1346,7 +1346,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { return getMinHeight(); } else if (mIsSummaryWithChildren && !mOnKeyguard) { return mChildrenContainer.getIntrinsicHeight(); - } else if (mIsHeadsUp || mHeadsupDisappearRunning) { + } else if (!mOnKeyguard && (mIsHeadsUp || mHeadsupDisappearRunning)) { if (isPinned() || mHeadsupDisappearRunning) { return getPinnedHeadsUpHeight(true /* atLeastMinHeight */); } else if (isExpanded()) { @@ -1659,11 +1659,11 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { @Override public int getMinHeight() { - if (mIsHeadsUp && mHeadsUpManager.isTrackingHeadsUp()) { + if (!mOnKeyguard && mIsHeadsUp && mHeadsUpManager.isTrackingHeadsUp()) { return getPinnedHeadsUpHeight(false /* atLeastMinHeight */); } else if (mIsSummaryWithChildren && !isGroupExpanded() && !mShowingPublic) { return mChildrenContainer.getMinHeight(); - } else if (mIsHeadsUp) { + } else if (!mOnKeyguard && mIsHeadsUp) { return mHeadsUpHeight; } NotificationContentView showingLayout = getShowingLayout(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 70eb23c410b0f..9ede7297b0377 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -4616,6 +4616,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } mState = state; mGroupManager.setStatusBarState(state); + mHeadsUpManager.setStatusBarState(state); mFalsingManager.setStatusBarState(state); mStatusBarWindowManager.setStatusBarState(state); mStackScroller.setStatusBarState(state); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java index 3fa60659209ad..a8d8f6008fc39 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java @@ -34,6 +34,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.NotificationData; +import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.PhoneStatusBar; @@ -110,6 +111,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL private boolean mRemoteInputActive; private float mExpandedHeight; private VisualStabilityManager mVisualStabilityManager; + private int mStatusBarState; public HeadsUpManager(final Context context, View statusBarWindowView, NotificationGroupManager groupManager) { @@ -217,7 +219,8 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL } private boolean shouldHeadsUpBecomePinned(NotificationData.Entry entry) { - return !mIsExpanded || hasFullScreenIntent(entry); + return mStatusBarState != StatusBarState.KEYGUARD + && !mIsExpanded || hasFullScreenIntent(entry); } private boolean hasFullScreenIntent(NotificationData.Entry entry) { @@ -624,6 +627,10 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL mVisualStabilityManager = visualStabilityManager; } + public void setStatusBarState(int statusBarState) { + mStatusBarState = statusBarState; + } + /** * This represents a notification and how long it is in a heads up mode. It also manages its * lifecycle automatically when created.