summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2012-07-03 14:31:22 -0400
committerDaniel Sandler <dsandler@android.com>2012-07-18 01:33:56 -0400
commited930e5ad537eb63b3b96fd583025bf4269da16f (patch)
tree15916ac6eeac36e698c92eb0b35c33cb78f12ad0 /packages
parent15c15eaac51c0c375d18fb70cd1bd066d87b034e (diff)
downloadframeworks_base-ed930e5ad537eb63b3b96fd583025bf4269da16f.zip
frameworks_base-ed930e5ad537eb63b3b96fd583025bf4269da16f.tar.gz
frameworks_base-ed930e5ad537eb63b3b96fd583025bf4269da16f.tar.bz2
Fix stuck status bars.
An odd little bit of logic (attempting to defend against the status bar getting stuck on orientation change) was ironically causing it to get stuck if the bar was closed twice in very rapid succession (which can happen if you manage to click the settings button as the panel is about to close). Other tweaks to help defend against this sort of problem in the future: - When the screen goes off, immediately collapse the notification panel (without animation) - When completing panel collapse, force the height of the expanded view to 0 (in case it ended up some other way by this point). - Reduce a weird little glitch when you start animateCollapse() in the middle of a reveal animation. (The panel would jump to full height.) Bug: 6765842 Change-Id: I233467c73e130f64401333319943289cbf3daa56
Diffstat (limited to 'packages')
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java35
1 files changed, 28 insertions, 7 deletions
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 b9e88a4..c337ebe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -203,7 +203,6 @@ public class PhoneStatusBar extends BaseStatusBar {
// the tracker view
int mTrackingPosition; // the position of the top of the tracking view.
- private boolean mPanelSlightlyVisible;
// ticker
private Ticker mTicker;
@@ -1235,6 +1234,7 @@ public class PhoneStatusBar extends BaseStatusBar {
+ " mExpandedVisible=" + mExpandedVisible
+ " mExpanded=" + mExpanded
+ " mAnimating=" + mAnimating
+ + " mAnimatingReveal=" + mAnimatingReveal
+ " mAnimY=" + mAnimY
+ " mAnimVel=" + mAnimVel
+ " flags=" + flags);
@@ -1255,7 +1255,7 @@ public class PhoneStatusBar extends BaseStatusBar {
}
int y;
- if (mAnimating) {
+ if (mAnimating || mAnimatingReveal) {
y = (int)mAnimY;
} else {
y = getExpandedViewMaxHeight()-1;
@@ -1290,6 +1290,10 @@ public class PhoneStatusBar extends BaseStatusBar {
if (!mExpandedVisible) {
return;
}
+
+ // Ensure the panel is fully collapsed (just in case; bug 6765842)
+ updateExpandedViewPos(0);
+
mExpandedVisible = false;
mPile.setLayoutTransitionsEnabled(false);
if (mNavigationBarView != null)
@@ -2050,9 +2054,14 @@ public class PhoneStatusBar extends BaseStatusBar {
@Override
protected void updateExpandedViewPos(int expandedPosition) {
if (SPEW) {
- Slog.d(TAG, "updateExpandedViewPos before expandedPosition=" + expandedPosition
+ Slog.d(TAG, "updateExpandedViewPos: expandedPosition=" + expandedPosition
//+ " mTrackingParams.y=" + ((mTrackingParams == null) ? "?" : mTrackingParams.y)
+ + " mTracking=" + mTracking
+ " mTrackingPosition=" + mTrackingPosition
+ + " mExpandedVisible=" + mExpandedVisible
+ + " mAnimating=" + mAnimating
+ + " mAnimatingReveal=" + mAnimatingReveal
+ + " mClosing=" + mClosing
+ " gravity=" + mNotificationPanelGravity);
}
int panelh = 0;
@@ -2061,6 +2070,7 @@ public class PhoneStatusBar extends BaseStatusBar {
// If the expanded view is not visible, make sure they're still off screen.
// Maybe the view was resized.
if (!mExpandedVisible) {
+ if (SPEW) Slog.d(TAG, "updateExpandedViewPos: view not visible, bailing");
updateExpandedInvisiblePosition();
return;
}
@@ -2082,13 +2092,21 @@ public class PhoneStatusBar extends BaseStatusBar {
}
// catch orientation changes and other peculiar cases
- if (panelh > disph || (panelh < disph && !mTracking && !mAnimating)) {
+ if (panelh > 0 &&
+ ((panelh > disph) ||
+ (panelh < disph && !mTracking && !mAnimating))) {
+ if (SPEW) Slog.d(TAG, "updateExpandedViewPos: orientation change?");
panelh = disph;
} else if (panelh < 0) {
panelh = 0;
}
- if (panelh == mTrackingPosition) return;
+ if (SPEW) Slog.d(TAG, "updateExpandedViewPos: adjusting size to panelh=" + panelh);
+
+ if (panelh == mTrackingPosition) {
+ if (SPEW) Slog.d(TAG, "updateExpandedViewPos: panelh == mTrackingPosition, bailing");
+ return;
+ }
mTrackingPosition = panelh;
@@ -2248,8 +2266,7 @@ public class PhoneStatusBar extends BaseStatusBar {
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
- || Intent.ACTION_SCREEN_OFF.equals(action)) {
+ if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
int flags = CommandQueue.FLAG_EXCLUDE_NONE;
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
String reason = intent.getStringExtra("reason");
@@ -2259,6 +2276,10 @@ public class PhoneStatusBar extends BaseStatusBar {
}
animateCollapse(flags);
}
+ else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
+ // no waiting!
+ performCollapse();
+ }
else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
updateResources();
repositionNavigationBar();