Merge "Don't flash system bars while showing an immersive app on lockscreen" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-07-27 23:03:19 +00:00
committed by Android (Google) Code Review
4 changed files with 30 additions and 8 deletions

View File

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

View File

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

View File

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

View File

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