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
This commit is contained in:
John Spurlock
2013-09-05 10:42:03 -04:00
parent d2676f9bd9
commit cfc359a9e6
5 changed files with 21 additions and 14 deletions

View File

@@ -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
}

View File

@@ -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);

View File

@@ -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=");

View File

@@ -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);

View File

@@ -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);
}