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.