OSDN Git Service

Allowing heads-up notifications now on the lock screen
authorSelim Cinek <cinek@google.com>
Wed, 21 Dec 2016 17:23:11 +0000 (18:23 +0100)
committerSelim Cinek <cinek@google.com>
Thu, 12 Jan 2017 01:08:09 +0000 (01:08 +0000)
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.

Merged-In: I1d04a92e66ae92ecee4f8ee23b218c2b167dadd4
Change-Id: I1d04a92e66ae92ecee4f8ee23b218c2b167dadd4
Test: existing tests pass
Test: add heads up on lockscreen
Test: heads up group child on lockscreen
Bug: 33773401

packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java

index dda82c6..4824a39 100644 (file)
@@ -2291,7 +2291,9 @@ public abstract class BaseStatusBar extends SystemUI implements
                 }
             } 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
@@ -2546,9 +2548,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) {
@@ -2587,7 +2587,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();
             }
         }
 
index b5036ff..f54af44 100644 (file)
@@ -1215,7 +1215,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()) {
@@ -1513,11 +1513,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();
index bb5e69c..b6bcf42 100644 (file)
@@ -4524,6 +4524,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         }
         mState = state;
         mGroupManager.setStatusBarState(state);
+        mHeadsUpManager.setStatusBarState(state);
         mFalsingManager.setStatusBarState(state);
         mStatusBarWindowManager.setStatusBarState(state);
         updateReportRejectedTouchVisibility();
index 0b3231e..edca704 100644 (file)
@@ -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;
@@ -109,6 +110,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
     private boolean mIsObserving;
     private boolean mRemoteInputActive;
     private VisualStabilityManager mVisualStabilityManager;
+    private int mStatusBarState;
 
     public HeadsUpManager(final Context context, View statusBarWindowView,
                           NotificationGroupManager groupManager) {
@@ -216,7 +218,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) {
@@ -623,6 +626,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.