am f3aa1c8d: Merge "SysUI: Use mScreenOnFromKeyguard for panel visibility" into lmp-mr1-dev
automerge: d99ae19
* commit 'd99ae19303105ab7ba3df1907e1537157d6889e1':
SysUI: Use mScreenOnFromKeyguard for panel visibility
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 09d0b5d..7bbf9e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -159,9 +159,6 @@
protected HeadsUpNotificationView mHeadsUpNotificationView;
protected int mHeadsUpNotificationDecay;
- // used to notify status bar for suppressing notification LED
- protected boolean mPanelSlightlyVisible;
-
// Search panel
protected SearchPanelView mSearchPanelView;
@@ -173,6 +170,20 @@
// on-screen navigation buttons
protected NavigationBarView mNavigationBarView = null;
+
+ protected Boolean mScreenOn;
+
+ // The second field is a bit different from the first one because it only listens to screen on/
+ // screen of events from Keyguard. We need this so we don't have a race condition with the
+ // broadcast. In the future, we should remove the first field altogether and rename the second
+ // field.
+ protected boolean mScreenOnFromKeyguard;
+
+ protected boolean mVisible;
+
+ // mScreenOnFromKeyguard && mVisible.
+ private boolean mVisibleToUser;
+
private Locale mLocale;
private float mFontScale;
@@ -1599,28 +1610,41 @@
}
}
+ protected void visibilityChanged(boolean visible) {
+ if (mVisible != visible) {
+ mVisible = visible;
+ if (!visible) {
+ dismissPopups();
+ }
+ }
+ updateVisibleToUser();
+ }
+
+ protected void updateVisibleToUser() {
+ boolean oldVisibleToUser = mVisibleToUser;
+ mVisibleToUser = mVisible && mScreenOnFromKeyguard;
+
+ if (oldVisibleToUser != mVisibleToUser) {
+ handleVisibleToUserChanged(mVisibleToUser);
+ }
+ }
+
/**
- * The LEDs are turned o)ff when the notification panel is shown, even just a little bit.
+ * The LEDs are turned off when the notification panel is shown, even just a little bit.
* This was added last-minute and is inconsistent with the way the rest of the notifications
* are handled, because the notification isn't really cancelled. The lights are just
* turned off. If any other notifications happen, the lights will turn back on. Steve says
* this is what he wants. (see bug 1131461)
*/
- protected void visibilityChanged(boolean visible) {
- if (mPanelSlightlyVisible != visible) {
- mPanelSlightlyVisible = visible;
- if (!visible) {
- dismissPopups();
+ protected void handleVisibleToUserChanged(boolean visibleToUser) {
+ try {
+ if (visibleToUser) {
+ mBarService.onPanelRevealed();
+ } else {
+ mBarService.onPanelHidden();
}
- try {
- if (visible) {
- mBarService.onPanelRevealed();
- } else {
- mBarService.onPanelHidden();
- }
- } catch (RemoteException ex) {
- // Won't fail unless the world has ended.
- }
+ } catch (RemoteException ex) {
+ // Won't fail unless the world has ended.
}
}
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 eb48754..fc7081b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -55,7 +55,6 @@
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
-import android.graphics.Xfermode;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.InputMethodService;
@@ -98,7 +97,6 @@
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
@@ -409,13 +407,6 @@
private boolean mAutohideSuspended;
private int mStatusBarMode;
private int mNavigationBarMode;
- private Boolean mScreenOn;
-
- // The second field is a bit different from the first one because it only listens to screen on/
- // screen of events from Keyguard. We need this so we don't have a race condition with the
- // broadcast. In the future, we should remove the first field altogether and rename the second
- // field.
- private boolean mScreenOnFromKeyguard;
private ViewMediatorCallback mKeyguardViewMediatorCallback;
private ScrimController mScrimController;
@@ -429,7 +420,6 @@
}
}};
- private boolean mVisible;
private boolean mWaitingForKeyguardExit;
private boolean mDozing;
private boolean mScrimSrcModeEnabled;
@@ -3077,7 +3067,6 @@
notifyNavigationBarScreenOn(false);
notifyHeadsUpScreenOn(false);
finishBarAnimations();
- stopNotificationLogging();
resetUserExpandedStates();
}
else if (Intent.ACTION_SCREEN_ON.equals(action)) {
@@ -3085,7 +3074,6 @@
// work around problem where mDisplay.getRotation() is not stable while screen is off (bug 7086018)
repositionNavigationBar();
notifyNavigationBarScreenOn(true);
- startNotificationLoggingIfScreenOnAndVisible();
}
else if (ACTION_DEMO.equals(action)) {
Bundle bundle = intent.getExtras();
@@ -3274,14 +3262,14 @@
// Visibility reporting
@Override
- protected void visibilityChanged(boolean visible) {
- mVisible = visible;
- if (visible) {
- startNotificationLoggingIfScreenOnAndVisible();
+ protected void handleVisibleToUserChanged(boolean visibleToUser) {
+ if (visibleToUser) {
+ super.handleVisibleToUserChanged(visibleToUser);
+ startNotificationLogging();
} else {
stopNotificationLogging();
+ super.handleVisibleToUserChanged(visibleToUser);
}
- super.visibilityChanged(visible);
}
private void stopNotificationLogging() {
@@ -3296,17 +3284,15 @@
mStackScroller.setChildLocationsChangedListener(null);
}
- private void startNotificationLoggingIfScreenOnAndVisible() {
- if (mVisible && mScreenOn) {
- mStackScroller.setChildLocationsChangedListener(mNotificationLocationsChangedListener);
- // Some transitions like mScreenOn=false -> mScreenOn=true don't
- // cause the scroller to emit child location events. Hence generate
- // one ourselves to guarantee that we're reporting visible
- // notifications.
- // (Note that in cases where the scroller does emit events, this
- // additional event doesn't break anything.)
- mNotificationLocationsChangedListener.onChildLocationsChanged(mStackScroller);
- }
+ private void startNotificationLogging() {
+ mStackScroller.setChildLocationsChangedListener(mNotificationLocationsChangedListener);
+ // Some transitions like mVisibleToUser=false -> mVisibleToUser=true don't
+ // cause the scroller to emit child location events. Hence generate
+ // one ourselves to guarantee that we're reporting visible
+ // notifications.
+ // (Note that in cases where the scroller does emit events, this
+ // additional event doesn't break anything.)
+ mNotificationLocationsChangedListener.onChildLocationsChanged(mStackScroller);
}
private void logNotificationVisibilityChanges(
@@ -3942,6 +3928,7 @@
mScreenOnFromKeyguard = false;
mScreenOnComingFromTouch = false;
mStackScroller.setAnimationsEnabled(false);
+ updateVisibleToUser();
}
public void onScreenTurnedOn() {
@@ -3949,6 +3936,7 @@
mStackScroller.setAnimationsEnabled(true);
mNotificationPanel.onScreenTurnedOn();
mNotificationPanel.setTouchDisabled(false);
+ updateVisibleToUser();
}
/**