diff options
author | John Spurlock <jspurlock@google.com> | 2013-07-29 17:58:39 -0400 |
---|---|---|
committer | John Spurlock <jspurlock@google.com> | 2013-07-31 14:54:03 -0400 |
commit | 9764218ff979f735aee2f1189e3547d5f3b02f83 (patch) | |
tree | 657d5e3da05c8882f23aa388fd80679b1171fae2 /packages/SystemUI | |
parent | 46fc6a6e3b8c16d66b4880cde59dff43ab1792db (diff) | |
download | frameworks_base-9764218ff979f735aee2f1189e3547d5f3b02f83.zip frameworks_base-9764218ff979f735aee2f1189e3547d5f3b02f83.tar.gz frameworks_base-9764218ff979f735aee2f1189e3547d5f3b02f83.tar.bz2 |
Collapse/disable shade when hiding status bar window.
Provide system bar window visibility (showing/hiding) to sysui,
information it did not have before.
Use this new info to disable shade interaction when bars are hiding.
Bug: 8682123
Change-Id: I4105b789866f847582af1c68a703240d773fa71e
Diffstat (limited to 'packages/SystemUI')
6 files changed, 85 insertions, 23 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 43992c8..53041b7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -56,6 +56,7 @@ public class CommandQueue extends IStatusBar.Stub { private static final int MSG_PRELOAD_RECENT_APPS = 14 << MSG_SHIFT; private static final int MSG_CANCEL_PRELOAD_RECENT_APPS = 15 << MSG_SHIFT; private static final int MSG_SET_NAVIGATION_ICON_HINTS = 16 << MSG_SHIFT; + private static final int MSG_SET_WINDOW_STATE = 17 << MSG_SHIFT; public static final int FLAG_EXCLUDE_NONE = 0; public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; @@ -98,6 +99,7 @@ public class CommandQueue extends IStatusBar.Stub { public void hideSearchPanel(); public void cancelPreloadRecentApps(); public void setNavigationIconHints(int hints); + public void setWindowState(int window, int state); } public CommandQueue(Callbacks callbacks, StatusBarIconList list) { @@ -232,6 +234,13 @@ public class CommandQueue extends IStatusBar.Stub { } } + public void setWindowState(int window, int state) { + synchronized (mList) { + mHandler.removeMessages(MSG_SET_WINDOW_STATE); + mHandler.obtainMessage(MSG_SET_WINDOW_STATE, window, state, null).sendToTarget(); + } + } + private final class H extends Handler { public void handleMessage(Message msg) { final int what = msg.what & MSG_MASK; @@ -312,6 +321,9 @@ public class CommandQueue extends IStatusBar.Stub { case MSG_SET_NAVIGATION_ICON_HINTS: mCallbacks.setNavigationIconHints(msg.arg1); break; + case MSG_SET_WINDOW_STATE: + mCallbacks.setWindowState(msg.arg1, msg.arg2); + break; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index d55754b..a3e35d1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -194,6 +194,7 @@ public class PanelBar extends FrameLayout { } else { pv.setExpandedFraction(0); // just in case pv.setVisibility(View.GONE); + pv.cancelPeek(); } } if (DEBUG) LOG("collapseAllPanels: animate=%s waiting=%s", animate, waiting); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 3a17c9c..d0a6385 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -40,8 +40,7 @@ public class PanelView extends FrameLayout { public static final boolean DEBUG_NAN = true; // http://b/7686690 - public final void LOG(String fmt, Object... args) { - if (!DEBUG) return; + private final void logf(String fmt, Object... args) { Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); } @@ -221,7 +220,7 @@ public class PanelView extends FrameLayout { } private void runPeekAnimation() { - if (DEBUG) LOG("peek to height=%.1f", mPeekHeight); + if (DEBUG) logf("peek to height=%.1f", mPeekHeight); if (mTimeAnimator.isStarted()) { return; } @@ -256,8 +255,8 @@ public class PanelView extends FrameLayout { } } else if (dtms > 0) { final float dt = dtms * 0.001f; // ms -> s - if (DEBUG) LOG("tick: v=%.2fpx/s dt=%.4fs", mVel, dt); - if (DEBUG) LOG("tick: before: h=%d", (int) mExpandedHeight); + if (DEBUG) logf("tick: v=%.2fpx/s dt=%.4fs", mVel, dt); + if (DEBUG) logf("tick: before: h=%d", (int) mExpandedHeight); final float fh = getFullHeight(); boolean braking = false; @@ -295,7 +294,7 @@ public class PanelView extends FrameLayout { h = fh; } - if (DEBUG) LOG("tick: new h=%d closing=%s", (int) h, mClosing?"true":"false"); + if (DEBUG) logf("tick: new h=%d closing=%s", (int) h, mClosing?"true":"false"); setExpandedHeightInternal(h); @@ -367,14 +366,14 @@ public class PanelView extends FrameLayout { loadDimens(); - if (DEBUG) LOG("handle view: " + mHandleView); + if (DEBUG) logf("handle view: " + mHandleView); if (mHandleView != null) { mHandleView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { final float y = event.getY(); final float rawY = event.getRawY(); - if (DEBUG) LOG("handle.onTouch: a=%s y=%.1f rawY=%.1f off=%.1f", + if (DEBUG) logf("handle.onTouch: a=%s y=%.1f rawY=%.1f off=%.1f", MotionEvent.actionToString(event.getAction()), y, rawY, mTouchOffset); PanelView.this.getLocationOnScreen(mAbsPos); @@ -461,7 +460,7 @@ public class PanelView extends FrameLayout { vel = -vel; } - if (DEBUG) LOG("gesture: dy=%f vel=(%f,%f) vlinear=%f", + if (DEBUG) logf("gesture: dy=%f vel=(%f,%f) vlinear=%f", deltaY, xVel, yVel, vel); @@ -476,7 +475,7 @@ public class PanelView extends FrameLayout { } public void fling(float vel, boolean always) { - if (DEBUG) LOG("fling: vel=%.3f, this=%s", vel, this); + if (DEBUG) logf("fling: vel=%.3f, this=%s", vel, this); mVel = vel; if (always||mVel != 0) { @@ -496,7 +495,7 @@ public class PanelView extends FrameLayout { @Override protected void onViewAdded(View child) { - if (DEBUG) LOG("onViewAdded: " + child); + if (DEBUG) logf("onViewAdded: " + child); } public View getHandle() { @@ -508,7 +507,7 @@ public class PanelView extends FrameLayout { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (DEBUG) LOG("onMeasure(%d, %d) -> (%d, %d)", + if (DEBUG) logf("onMeasure(%d, %d) -> (%d, %d)", widthMeasureSpec, heightMeasureSpec, getMeasuredWidth(), getMeasuredHeight()); // Did one of our children change size? @@ -528,7 +527,7 @@ public class PanelView extends FrameLayout { public void setExpandedHeight(float height) { - if (DEBUG) LOG("setExpandedHeight(%.1f)", height); + if (DEBUG) logf("setExpandedHeight(%.1f)", height); mRubberbanding = false; if (mTimeAnimator.isStarted()) { post(mStopAnimator); @@ -539,7 +538,7 @@ public class PanelView extends FrameLayout { @Override protected void onLayout (boolean changed, int left, int top, int right, int bottom) { - if (DEBUG) LOG("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom, (int)mExpandedHeight, mFullHeight); + if (DEBUG) logf("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom, (int)mExpandedHeight, mFullHeight); super.onLayout(changed, left, top, right, bottom); } @@ -563,7 +562,7 @@ public class PanelView extends FrameLayout { mExpandedHeight = h; - if (DEBUG) LOG("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f"); + if (DEBUG) logf("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f"); requestLayout(); // FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); @@ -575,7 +574,7 @@ public class PanelView extends FrameLayout { private float getFullHeight() { if (mFullHeight <= 0) { - if (DEBUG) LOG("Forcing measure() since fullHeight=" + mFullHeight); + if (DEBUG) logf("Forcing measure() since fullHeight=" + mFullHeight); measure(MeasureSpec.makeMeasureSpec(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, MeasureSpec.EXACTLY)); } @@ -620,7 +619,7 @@ public class PanelView extends FrameLayout { public void collapse() { // TODO: abort animation or ongoing touch - if (DEBUG) LOG("collapse: " + this); + if (DEBUG) logf("collapse: " + this); if (!isFullyCollapsed()) { mTimeAnimator.cancel(); mClosing = true; @@ -631,12 +630,18 @@ public class PanelView extends FrameLayout { } public void expand() { - if (DEBUG) LOG("expand: " + this); + if (DEBUG) logf("expand: " + this); if (isFullyCollapsed()) { mBar.startOpeningPanel(this); fling(mSelfExpandVelocityPx, /*always=*/ true); } else if (DEBUG) { - if (DEBUG) LOG("skipping expansion: is expanded"); + if (DEBUG) logf("skipping expansion: is expanded"); + } + } + + public void cancelPeek() { + if (mPeekAnimator != null && mPeekAnimator.isStarted()) { + mPeekAnimator.cancel(); } } 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 e8b8dc1..d1ccde1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -164,6 +164,7 @@ public class PhoneStatusBar extends BaseStatusBar { StatusBarWindowView mStatusBarWindow; PhoneStatusBarView mStatusBarView; + private int mStatusBarWindowState; int mPixelFormat; Object mQueueLock = new Object(); @@ -227,6 +228,7 @@ public class PhoneStatusBar extends BaseStatusBar { // on-screen navigation buttons private NavigationBarView mNavigationBarView = null; + private int mNavigationBarWindowState; // the tracker view int mTrackingPosition; // the position of the top of the tracking view. @@ -1363,9 +1365,14 @@ public class PhoneStatusBar extends BaseStatusBar { } }; + boolean panelsEnabled() { + return ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0 + && mStatusBarWindowState != StatusBarManager.WINDOW_STATE_HIDING); + } + void makeExpandedVisible() { if (SPEW) Log.d(TAG, "Make expanded visible: expanded visible=" + mExpandedVisible); - if (mExpandedVisible) { + if (mExpandedVisible || !panelsEnabled()) { return; } @@ -1466,7 +1473,7 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public void animateExpandNotificationsPanel() { if (SPEW) Log.d(TAG, "animateExpand: mExpandedVisible=" + mExpandedVisible); - if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) { + if (!panelsEnabled()) { return ; } @@ -1521,7 +1528,7 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public void animateExpandSettingsPanel() { if (SPEW) Log.d(TAG, "animateExpand: mExpandedVisible=" + mExpandedVisible); - if ((mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) { + if (!panelsEnabled()) { return; } @@ -1840,6 +1847,39 @@ public class PhoneStatusBar extends BaseStatusBar { } @Override // CommandQueue + public void setWindowState(int window, int state) { + if (mStatusBarWindow != null + && window == StatusBarManager.WINDOW_STATUS_BAR + && mStatusBarWindowState != state) { + mStatusBarWindowState = state; + if (DEBUG) Log.d(TAG, "Status bar window " + stateString(state)); + if (state == StatusBarManager.WINDOW_STATE_HIDING) { + mStatusBarWindow.setEnabled(false); + mStatusBarView.collapseAllPanels(false); + } else if (state == StatusBarManager.WINDOW_STATE_SHOWING) { + mStatusBarWindow.setEnabled(true); + } + } + if (mNavigationBarView != null + && window == StatusBarManager.WINDOW_NAVIGATION_BAR + && mNavigationBarWindowState != state) { + mNavigationBarWindowState = state; + if (DEBUG) Log.d(TAG, "Navigation bar window " + stateString(state)); + if (state == StatusBarManager.WINDOW_STATE_HIDING) { + mNavigationBarView.setEnabled(false); + } else if (state == StatusBarManager.WINDOW_STATE_SHOWING) { + mNavigationBarView.setEnabled(true); + } + } + } + + private static String stateString(int state) { + if (state == StatusBarManager.WINDOW_STATE_HIDING) return "hiding"; + if (state == StatusBarManager.WINDOW_STATE_SHOWING) return "showing"; + return "unknown"; + } + + @Override // CommandQueue public void setSystemUiVisibility(int vis, int mask) { final int oldVal = mSystemUiVisibility; final int newVal = (oldVal&~mask) | (vis&mask); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index da12a67..247d8aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -89,7 +89,7 @@ public class PhoneStatusBarView extends PanelBar { @Override public boolean panelsEnabled() { - return ((mBar.mDisabled & StatusBarManager.DISABLE_EXPAND) == 0); + return mBar.panelsEnabled(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java index 64a4a0e..a53b25a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java @@ -92,6 +92,10 @@ public class TvStatusBar extends BaseStatusBar { public void setNavigationIconHints(int hints) { } + @Override // CommandQueue + public void setWindowState(int window, int state) { + } + @Override protected void createAndAddWindows() { } |