From cfc359a9e6798dc7595380314eac7fcfeda14d76 Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Thu, 5 Sep 2013 10:42:03 -0400 Subject: [PATCH] Remove opaque-on-interaction from nav bar. And decouple it from the status bar opaque-on-interaction logic. It's still important to track nav bar interaction for hideybar suspension purposes. Also fix a sysui NPE that can occur when restarting SystemUI (vs the shell). Bug:10606136 Change-Id: I66a15e02cff352e26b25aebc1c42fb58c042effa --- .../systemui/statusbar/BaseStatusBar.java | 2 +- .../statusbar/DelegateViewHelper.java | 5 ++-- .../statusbar/phone/PhoneStatusBar.java | 23 +++++++++++-------- .../statusbar/phone/PhoneStatusBarView.java | 1 + .../policy/impl/PhoneWindowManager.java | 4 +++- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index ff85cb4b479e5..54c9f5d84c756 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -1097,7 +1097,7 @@ public abstract class BaseStatusBar extends SystemUI implements return km.inKeyguardRestrictedInputMode(); } - public void setInteracting(boolean interacting) { + public void setInteracting(int barWindow, boolean interacting) { // hook for subclasses } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java index eef4f4456da8d..900e1e08c8ce2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.app.StatusBarManager; import android.graphics.RectF; import android.view.MotionEvent; import android.view.View; @@ -86,9 +87,9 @@ public class DelegateViewHelper { } if (action == MotionEvent.ACTION_DOWN) { - mBar.setInteracting(true); + mBar.setInteracting(StatusBarManager.WINDOW_NAVIGATION_BAR, true); } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { - mBar.setInteracting(false); + mBar.setInteracting(StatusBarManager.WINDOW_NAVIGATION_BAR, false); } mDelegateView.getLocationOnScreen(mTempPoint); 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 01e6c842b2dc7..9db28051d2945 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -306,7 +306,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } }; - private boolean mInteracting; + private int mInteractingWindows; private boolean mAutohideSuspended; private int mStatusBarMode; private int mNavigationBarMode; @@ -1378,7 +1378,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { visibilityChanged(true); - setInteracting(true); + setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true); } public void animateCollapsePanels() { @@ -1662,7 +1662,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { mPostCollapseCleanup = null; } - setInteracting(false); + setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false); } /** @@ -1738,7 +1738,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } if (mStatusBarWindowState == WINDOW_STATE_SHOWING) { - setInteracting(true); + setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true); } return false; } @@ -1871,7 +1871,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private void checkBarModes() { if (mDemoMode) return; - checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions()); + checkBarMode((mInteractingWindows & StatusBarManager.WINDOW_STATUS_BAR) != 0 ? MODE_OPAQUE + : mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions()); if (mNavigationBarView != null) { checkBarMode(mNavigationBarMode, mNavigationBarWindowState, mNavigationBarView.getBarTransitions()); @@ -1880,7 +1881,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private void checkBarMode(int mode, int windowState, BarTransitions transitions) { final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0; - final int finalMode = imeVisible || mInteracting ? MODE_OPAQUE : mode; + final int finalMode = imeVisible ? MODE_OPAQUE : mode; final boolean animate = windowState == WINDOW_STATE_SHOWING; transitions.transitionTo(finalMode, animate); } @@ -1892,9 +1893,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { }}; @Override - public void setInteracting(boolean interacting) { - mInteracting = interacting; - if (mInteracting) { + public void setInteracting(int barWindow, boolean interacting) { + mInteractingWindows = interacting + ? (mInteractingWindows | barWindow) + : (mInteractingWindows & ~barWindow); + if (mInteractingWindows != 0) { suspendAutohide(); } else { resumeSuspendedAutohide(); @@ -2117,7 +2120,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { + " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY()); } - pw.print(" mInteracting="); pw.println(mInteracting); + pw.print(" mInteractingWindows="); pw.println(mInteractingWindows); pw.print(" mStatusBarWindowState="); pw.println(windowStateToString(mStatusBarWindowState)); pw.print(" mStatusBarMode="); 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 fa494c2ae705d..63e0c7acf6979 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -95,6 +95,7 @@ public class PhoneStatusBarView extends PanelBar { } private void applyMode(int mode, boolean animate) { + if (mLeftSide == null || mRightSide == null) return; float newAlpha = getAlphaFor(mode); if (animate) { ObjectAnimator lhs = animateTransitionTo(mLeftSide, newAlpha); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index c58ed6fc24499..488f79a66b8db 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -5055,7 +5055,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (statusBarHasFocus) { int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_IMMERSIVE; + | View.SYSTEM_UI_FLAG_IMMERSIVE + | View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS + | View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION; vis = (vis & ~flags) | (mLastSystemUiFlags & flags); }