am 33b02ef2: am 03fdca1b: Merge "Fixed a bug where the heads-up would not show when full screen" into mnc-dev

* commit '33b02ef23b38675807f14d1d06270fd247acba2d':
  Fixed a bug where the heads-up would not show when full screen
This commit is contained in:
Selim Cinek
2015-05-08 16:39:48 +00:00
committed by Android Git Automerger
6 changed files with 86 additions and 15 deletions

View File

@@ -21,7 +21,6 @@ import android.annotation.SystemApi;
import android.app.Presentation; import android.app.Presentation;
import android.content.Context; import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.graphics.Insets;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.IBinder; import android.os.IBinder;
@@ -1119,6 +1118,15 @@ public interface WindowManager extends ViewManager {
*/ */
public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800; public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800;
/**
* Flag to force the status bar window to be visible all the time. If the bar is hidden when
* this flag is set it will be shown again and the bar will have a transparent background.
* This can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
*
* {@hide}
*/
public static final int PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT = 0x00001000;
/** /**
* Control flags that are private to the platform. * Control flags that are private to the platform.
* @hide * @hide

View File

@@ -157,7 +157,8 @@ public class CommandQueue extends IStatusBar.Stub {
public void setSystemUiVisibility(int vis, int mask) { public void setSystemUiVisibility(int vis, int mask) {
synchronized (mList) { synchronized (mList) {
mHandler.removeMessages(MSG_SET_SYSTEMUI_VISIBILITY); // Don't coalesce these, since it might have one time flags set such as
// STATUS_BAR_UNHIDE which might get lost.
mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, vis, mask, null).sendToTarget(); mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, vis, mask, null).sendToTarget();
} }
} }

View File

@@ -529,6 +529,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
= new HashMap<>(); = new HashMap<>();
private HashSet<Entry> mHeadsUpEntriesToRemoveOnSwitch = new HashSet<>(); private HashSet<Entry> mHeadsUpEntriesToRemoveOnSwitch = new HashSet<>();
private RankingMap mLatestRankingMap; private RankingMap mLatestRankingMap;
private boolean mNoAnimationOnNextBarModeChange;
@Override @Override
public void start() { public void start() {
@@ -1709,6 +1710,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
* State is one or more of the DISABLE constants from StatusBarManager. * State is one or more of the DISABLE constants from StatusBarManager.
*/ */
public void disable(int state1, int state2, boolean animate) { public void disable(int state1, int state2, boolean animate) {
animate &= mStatusBarWindowState != WINDOW_STATE_HIDDEN;
mDisabledUnmodified1 = state1; mDisabledUnmodified1 = state1;
mDisabledUnmodified2 = state2; mDisabledUnmodified2 = state2;
state1 = adjustDisableFlags(state1); state1 = adjustDisableFlags(state1);
@@ -1868,6 +1870,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) { public void onHeadsUpPinnedModeChanged(boolean inPinnedMode) {
if (inPinnedMode) { if (inPinnedMode) {
mStatusBarWindowManager.setHeadsUpShowing(true); mStatusBarWindowManager.setHeadsUpShowing(true);
mStatusBarWindowManager.setForceStatusBarVisible(true);
} else { } else {
Runnable endRunnable = new Runnable() { Runnable endRunnable = new Runnable() {
@Override @Override
@@ -2132,6 +2135,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// Shrink the window to the size of the status bar only // Shrink the window to the size of the status bar only
mStatusBarWindowManager.setStatusBarExpanded(false); mStatusBarWindowManager.setStatusBarExpanded(false);
mStatusBarWindowManager.setForceStatusBarVisible(false);
mStatusBarView.setFocusable(true); mStatusBarView.setFocusable(true);
// Close any "App info" popups that might have snuck on-screen // Close any "App info" popups that might have snuck on-screen
@@ -2272,6 +2276,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
setAreThereNotifications(); setAreThereNotifications();
} }
// ready to unhide
if ((vis & View.STATUS_BAR_UNHIDE) != 0) {
mSystemUiVisibility &= ~View.STATUS_BAR_UNHIDE;
mNoAnimationOnNextBarModeChange = true;
}
// update status bar mode // update status bar mode
final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(), final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT); View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT);
@@ -2303,10 +2313,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
} }
} }
// ready to unhide
if ((vis & View.STATUS_BAR_UNHIDE) != 0) {
mSystemUiVisibility &= ~View.STATUS_BAR_UNHIDE;
}
if ((vis & View.NAVIGATION_BAR_UNHIDE) != 0) { if ((vis & View.NAVIGATION_BAR_UNHIDE) != 0) {
mSystemUiVisibility &= ~View.NAVIGATION_BAR_UNHIDE; mSystemUiVisibility &= ~View.NAVIGATION_BAR_UNHIDE;
} }
@@ -2351,17 +2357,21 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private void checkBarModes() { private void checkBarModes() {
if (mDemoMode) return; if (mDemoMode) return;
checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions()); checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions(),
mNoAnimationOnNextBarModeChange);
if (mNavigationBarView != null) { if (mNavigationBarView != null) {
checkBarMode(mNavigationBarMode, checkBarMode(mNavigationBarMode,
mNavigationBarWindowState, mNavigationBarView.getBarTransitions()); mNavigationBarWindowState, mNavigationBarView.getBarTransitions(),
mNoAnimationOnNextBarModeChange);
} }
mNoAnimationOnNextBarModeChange = false;
} }
private void checkBarMode(int mode, int windowState, BarTransitions transitions) { private void checkBarMode(int mode, int windowState, BarTransitions transitions,
boolean noAnimation) {
final boolean powerSave = mBatteryController.isPowerSave(); final boolean powerSave = mBatteryController.isPowerSave();
final boolean anim = (mScreenOn == null || mScreenOn) && windowState != WINDOW_STATE_HIDDEN final boolean anim = !noAnimation && (mScreenOn == null || mScreenOn)
&& !powerSave; && windowState != WINDOW_STATE_HIDDEN && !powerSave;
if (powerSave && getBarState() == StatusBarState.SHADE) { if (powerSave && getBarState() == StatusBarState.SHADE) {
mode = MODE_WARNING; mode = MODE_WARNING;
} }

View File

@@ -166,6 +166,7 @@ public class StatusBarWindowManager {
private void apply(State state) { private void apply(State state) {
applyKeyguardFlags(state); applyKeyguardFlags(state);
applyForceStatusBarVisibleFlag(state);
applyFocusableFlag(state); applyFocusableFlag(state);
adjustScreenOrientation(state); adjustScreenOrientation(state);
applyHeight(state); applyHeight(state);
@@ -178,6 +179,16 @@ public class StatusBarWindowManager {
} }
} }
private void applyForceStatusBarVisibleFlag(State state) {
if (state.forceStatusBarVisible) {
mLpChanged.privateFlags |= WindowManager
.LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
} else {
mLpChanged.privateFlags &= ~WindowManager
.LayoutParams.PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT;
}
}
private void applyModalFlag(State state) { private void applyModalFlag(State state) {
if (state.headsUpShowing) { if (state.headsUpShowing) {
mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
@@ -240,6 +251,11 @@ public class StatusBarWindowManager {
apply(mCurrentState); apply(mCurrentState);
} }
public void setForceStatusBarVisible(boolean forceStatusBarVisible) {
mCurrentState.forceStatusBarVisible = forceStatusBarVisible;
apply(mCurrentState);
}
private static class State { private static class State {
boolean keyguardShowing; boolean keyguardShowing;
boolean keyguardOccluded; boolean keyguardOccluded;
@@ -250,6 +266,7 @@ public class StatusBarWindowManager {
boolean keyguardFadingAway; boolean keyguardFadingAway;
boolean qsExpanded; boolean qsExpanded;
boolean headsUpShowing; boolean headsUpShowing;
boolean forceStatusBarVisible;
/** /**
* The {@link BaseStatusBar} state from the status bar. * The {@link BaseStatusBar} state from the status bar.

View File

@@ -58,6 +58,9 @@ public class BarController {
private int mTransientBarState; private int mTransientBarState;
private boolean mPendingShow; private boolean mPendingShow;
private long mLastTranslucent; private long mLastTranslucent;
private boolean mShowTransparent;
private boolean mSetUnHideFlagWhenNextTransparent;
private boolean mNoAnimationOnNextShow;
public BarController(String tag, int transientFlag, int unhideFlag, int translucentFlag, public BarController(String tag, int transientFlag, int unhideFlag, int translucentFlag,
int statusBarManagerId, int translucentWmFlag) { int statusBarManagerId, int translucentWmFlag) {
@@ -74,6 +77,14 @@ public class BarController {
mWin = win; mWin = win;
} }
public void setShowTransparent(boolean transparent) {
if (transparent != mShowTransparent) {
mShowTransparent = transparent;
mSetUnHideFlagWhenNextTransparent = transparent;
mNoAnimationOnNextShow = true;
}
}
public void showTransient() { public void showTransient() {
if (mWin != null) { if (mWin != null) {
setTransientBarState(TRANSIENT_BAR_SHOW_REQUESTED); setTransientBarState(TRANSIENT_BAR_SHOW_REQUESTED);
@@ -135,7 +146,9 @@ public class BarController {
} }
final boolean wasVis = mWin.isVisibleLw(); final boolean wasVis = mWin.isVisibleLw();
final boolean wasAnim = mWin.isAnimatingLw(); final boolean wasAnim = mWin.isAnimatingLw();
final boolean change = show ? mWin.showLw(true) : mWin.hideLw(true); final boolean change = show ? mWin.showLw(!mNoAnimationOnNextShow)
: mWin.hideLw(!mNoAnimationOnNextShow);
mNoAnimationOnNextShow = false;
final int state = computeStateLw(wasVis, wasAnim, mWin, change); final int state = computeStateLw(wasVis, wasAnim, mWin, change);
final boolean stateChanged = updateStateLw(state); final boolean stateChanged = updateStateLw(state);
return change || stateChanged; return change || stateChanged;
@@ -233,6 +246,13 @@ public class BarController {
setTransientBarState(TRANSIENT_BAR_NONE); // request denied setTransientBarState(TRANSIENT_BAR_NONE); // request denied
} }
} }
if (mShowTransparent) {
vis |= View.SYSTEM_UI_TRANSPARENT;
if (mSetUnHideFlagWhenNextTransparent) {
vis |= mUnhideFlag;
mSetUnHideFlagWhenNextTransparent = false;
}
}
if (mTransientBarState != TRANSIENT_BAR_NONE) { if (mTransientBarState != TRANSIENT_BAR_NONE) {
vis |= mTransientFlag; // ignore clear requests until transition completes vis |= mTransientFlag; // ignore clear requests until transition completes
vis &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; // never show transient bars in low profile vis &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; // never show transient bars in low profile

View File

@@ -476,6 +476,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
boolean mTopIsFullscreen; boolean mTopIsFullscreen;
boolean mForceStatusBar; boolean mForceStatusBar;
boolean mForceStatusBarFromKeyguard; boolean mForceStatusBarFromKeyguard;
private boolean mForceStatusBarTransparent;
boolean mHideLockScreen; boolean mHideLockScreen;
boolean mForcingShowNavBar; boolean mForcingShowNavBar;
int mForcingShowNavBarLayer; int mForcingShowNavBarLayer;
@@ -4129,6 +4130,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mAppsThatDismissKeyguard.clear(); mAppsThatDismissKeyguard.clear();
mForceStatusBar = false; mForceStatusBar = false;
mForceStatusBarFromKeyguard = false; mForceStatusBarFromKeyguard = false;
mForceStatusBarTransparent = false;
mForcingShowNavBar = false; mForcingShowNavBar = false;
mForcingShowNavBarLayer = -1; mForcingShowNavBarLayer = -1;
@@ -4154,8 +4156,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mForcingShowNavBar = true; mForcingShowNavBar = true;
mForcingShowNavBarLayer = win.getSurfaceLayer(); mForcingShowNavBarLayer = win.getSurfaceLayer();
} }
if (attrs.type == TYPE_STATUS_BAR && (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) { if (attrs.type == TYPE_STATUS_BAR) {
mForceStatusBarFromKeyguard = true; if ((attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
mForceStatusBarFromKeyguard = true;
}
if ((attrs.privateFlags & PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT) != 0) {
mForceStatusBarTransparent = true;
}
} }
boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
@@ -4302,7 +4309,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (DEBUG_LAYOUT) Slog.i(TAG, "force=" + mForceStatusBar if (DEBUG_LAYOUT) Slog.i(TAG, "force=" + mForceStatusBar
+ " forcefkg=" + mForceStatusBarFromKeyguard + " forcefkg=" + mForceStatusBarFromKeyguard
+ " top=" + mTopFullscreenOpaqueWindowState); + " top=" + mTopFullscreenOpaqueWindowState);
if (mForceStatusBar || mForceStatusBarFromKeyguard) { boolean shouldBeTransparent = mForceStatusBarTransparent
&& !mForceStatusBar
&& !mForceStatusBarFromKeyguard;
if (!shouldBeTransparent) {
mStatusBarController.setShowTransparent(false /* transparent */);
} else if (!mStatusBar.isVisibleLw()) {
mStatusBarController.setShowTransparent(true /* transparent */);
}
if (mForceStatusBar || mForceStatusBarFromKeyguard || mForceStatusBarTransparent) {
if (DEBUG_LAYOUT) Slog.v(TAG, "Showing status bar: forced"); if (DEBUG_LAYOUT) Slog.v(TAG, "Showing status bar: forced");
if (mStatusBarController.setBarShowingLw(true)) { if (mStatusBarController.setBarShowingLw(true)) {
changes |= FINISH_LAYOUT_REDO_LAYOUT; changes |= FINISH_LAYOUT_REDO_LAYOUT;