Merge "Don't flash system bars while showing an immersive app on lockscreen" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
11768fd80f
@@ -1692,6 +1692,15 @@ public interface WindowManager extends ViewManager {
|
||||
@RequiresPermission(permission.STATUS_BAR_SERVICE)
|
||||
public static final int PRIVATE_FLAG_IS_SCREEN_DECOR = 0x00400000;
|
||||
|
||||
/**
|
||||
* Flag to indicate that the status bar window is now in an explicit expanded state, meaning
|
||||
* that status bar will not be hidden by any window with flag {@link #FLAG_FULLSCREEN} or
|
||||
* {@link View#SYSTEM_UI_FLAG_FULLSCREEN} set.
|
||||
* This can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
|
||||
* @hide
|
||||
*/
|
||||
public static final int PRIVATE_FLAG_STATUS_BAR_EXPANDED = 0x00800000;
|
||||
|
||||
/**
|
||||
* Control flags that are private to the platform.
|
||||
* @hide
|
||||
@@ -1780,7 +1789,11 @@ public interface WindowManager extends ViewManager {
|
||||
@ViewDebug.FlagToString(
|
||||
mask = PRIVATE_FLAG_IS_SCREEN_DECOR,
|
||||
equals = PRIVATE_FLAG_IS_SCREEN_DECOR,
|
||||
name = "IS_SCREEN_DECOR")
|
||||
name = "IS_SCREEN_DECOR"),
|
||||
@ViewDebug.FlagToString(
|
||||
mask = PRIVATE_FLAG_STATUS_BAR_EXPANDED,
|
||||
equals = PRIVATE_FLAG_STATUS_BAR_EXPANDED,
|
||||
name = "STATUS_BAR_EXPANDED")
|
||||
})
|
||||
@TestApi
|
||||
public int privateFlags;
|
||||
|
||||
@@ -180,6 +180,15 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
|
||||
mLpChanged.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
||||
}
|
||||
|
||||
private void applyExpandedFlag(State state) {
|
||||
if (state.panelExpanded || state.isKeyguardShowingAndNotOccluded() || state.bouncerShowing
|
||||
|| ENABLE_REMOTE_INPUT && state.remoteInputActive) {
|
||||
mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
|
||||
} else {
|
||||
mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
|
||||
}
|
||||
}
|
||||
|
||||
private void applyHeight(State state) {
|
||||
boolean expanded = isExpanded(state);
|
||||
if (state.forcePluginOpen) {
|
||||
@@ -234,6 +243,7 @@ public class StatusBarWindowManager implements RemoteInputController.Callback, D
|
||||
applyKeyguardFlags(state);
|
||||
applyForceStatusBarVisibleFlag(state);
|
||||
applyFocusableFlag(state);
|
||||
applyExpandedFlag(state);
|
||||
adjustScreenOrientation(state);
|
||||
applyHeight(state);
|
||||
applyUserActivityTimeout(state);
|
||||
|
||||
@@ -196,7 +196,7 @@ public class BarController {
|
||||
}
|
||||
|
||||
protected boolean skipAnimation() {
|
||||
return false;
|
||||
return !mWin.isDrawnLw();
|
||||
}
|
||||
|
||||
private int computeStateLw(boolean wasVis, boolean wasAnim, WindowState win, boolean change) {
|
||||
|
||||
@@ -76,6 +76,7 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CO
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_STATUS_BAR_EXPANDED;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
|
||||
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
|
||||
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
|
||||
@@ -4684,8 +4685,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
navTranslucent &= areTranslucentBarsAllowed();
|
||||
}
|
||||
boolean statusBarExpandedNotKeyguard = !isKeyguardShowing && mStatusBar != null
|
||||
&& mStatusBar.getAttrs().height == MATCH_PARENT
|
||||
&& mStatusBar.getAttrs().width == MATCH_PARENT;
|
||||
&& (mStatusBar.getAttrs().privateFlags & PRIVATE_FLAG_STATUS_BAR_EXPANDED) != 0;
|
||||
|
||||
// When the navigation bar isn't visible, we put up a fake input window to catch all
|
||||
// touch events. This way we can detect when the user presses anywhere to bring back the
|
||||
@@ -5688,7 +5688,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
|
||||
// Take note if a window wants to acquire a sleep token.
|
||||
if (win.isVisibleLw() && (attrs.privateFlags & PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN) != 0
|
||||
if ((attrs.privateFlags & PRIVATE_FLAG_ACQUIRES_SLEEP_TOKEN) != 0
|
||||
&& win.canAcquireSleepToken()) {
|
||||
mWindowSleepTokenNeeded = true;
|
||||
}
|
||||
@@ -5744,9 +5744,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
mStatusBarController.setShowTransparent(true /* transparent */);
|
||||
}
|
||||
|
||||
WindowManager.LayoutParams statusBarAttrs = mStatusBar.getAttrs();
|
||||
boolean statusBarExpanded = statusBarAttrs.height == MATCH_PARENT
|
||||
&& statusBarAttrs.width == MATCH_PARENT;
|
||||
boolean statusBarExpanded =
|
||||
(mStatusBar.getAttrs().privateFlags & PRIVATE_FLAG_STATUS_BAR_EXPANDED) != 0;
|
||||
boolean topAppHidesStatusBar = topAppHidesStatusBar();
|
||||
if (mForceStatusBar || mForceStatusBarFromKeyguard || mForceStatusBarTransparent
|
||||
|| statusBarExpanded) {
|
||||
|
||||
Reference in New Issue
Block a user