Merge "Send more system bar attributes to System UI for logging" into sc-v2-dev am: c3d3e0ea33

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15229896

Change-Id: If0adf5f4f92b5b975ea5a4cfde023d0ccbb13ecd
This commit is contained in:
Tiger Huang
2021-07-12 20:19:25 +00:00
committed by Automerger Merge Worker
16 changed files with 126 additions and 48 deletions

View File

@@ -25,6 +25,7 @@ import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.service.notification.StatusBarNotification;
import android.view.InsetsState;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.view.AppearanceRegion;
@@ -182,7 +183,7 @@ oneway interface IStatusBar
/**
* Notifies System UI side of system bar attribute change on the specified display.
*
* @param displayId the ID of the display to notify
* @param displayId the ID of the display to notify.
* @param appearance the appearance of the focused window. The light top bar appearance is not
* controlled here, but primaryAppearance and secondaryAppearance.
* @param appearanceRegions a set of appearances which will be only applied in their own bounds.
@@ -191,11 +192,12 @@ oneway interface IStatusBar
* stacks.
* @param navbarColorManagedByIme {@code true} if navigation bar color is managed by IME.
* @param behavior the behavior of the focused window.
* @param isFullscreen whether any of status or navigation bar is requested invisible.
* @param requestedState the collection of the requested visibilities of system insets.
* @param packageName the package name of the focused app.
*/
void onSystemBarAttributesChanged(int displayId, int appearance,
in AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
int behavior, boolean isFullscreen);
int behavior, in InsetsState requestedVisibilities, String packageName);
/**
* Notifies System UI to show transient bars. The transient bars are system bars, e.g., status

View File

@@ -21,6 +21,7 @@ import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArrayMap;
import android.view.InsetsState;
import com.android.internal.view.AppearanceRegion;
@@ -39,14 +40,15 @@ public final class RegisterStatusBarResult implements Parcelable {
public final IBinder mImeToken;
public final boolean mNavbarColorManagedByIme;
public final int mBehavior;
public final boolean mAppFullscreen;
public final InsetsState mRequestedState;
public final String mPackageName;
public final int[] mTransientBarTypes;
public RegisterStatusBarResult(ArrayMap<String, StatusBarIcon> icons, int disabledFlags1,
int appearance, AppearanceRegion[] appearanceRegions, int imeWindowVis,
int imeBackDisposition, boolean showImeSwitcher, int disabledFlags2, IBinder imeToken,
boolean navbarColorManagedByIme, int behavior, boolean appFullscreen,
@NonNull int[] transientBarTypes) {
boolean navbarColorManagedByIme, int behavior, InsetsState requestedState,
String packageName, @NonNull int[] transientBarTypes) {
mIcons = new ArrayMap<>(icons);
mDisabledFlags1 = disabledFlags1;
mAppearance = appearance;
@@ -58,7 +60,8 @@ public final class RegisterStatusBarResult implements Parcelable {
mImeToken = imeToken;
mNavbarColorManagedByIme = navbarColorManagedByIme;
mBehavior = behavior;
mAppFullscreen = appFullscreen;
mRequestedState = requestedState;
mPackageName = packageName;
mTransientBarTypes = transientBarTypes;
}
@@ -80,7 +83,8 @@ public final class RegisterStatusBarResult implements Parcelable {
dest.writeStrongBinder(mImeToken);
dest.writeBoolean(mNavbarColorManagedByIme);
dest.writeInt(mBehavior);
dest.writeBoolean(mAppFullscreen);
dest.writeTypedObject(mRequestedState, 0);
dest.writeString(mPackageName);
dest.writeIntArray(mTransientBarTypes);
}
@@ -104,12 +108,13 @@ public final class RegisterStatusBarResult implements Parcelable {
final IBinder imeToken = source.readStrongBinder();
final boolean navbarColorManagedByIme = source.readBoolean();
final int behavior = source.readInt();
final boolean appFullscreen = source.readBoolean();
final InsetsState requestedState = source.readTypedObject(InsetsState.CREATOR);
final String packageName = source.readString();
final int[] transientBarTypes = source.createIntArray();
return new RegisterStatusBarResult(icons, disabledFlags1, appearance,
appearanceRegions, imeWindowVis, imeBackDisposition, showImeSwitcher,
disabledFlags2, imeToken, navbarColorManagedByIme, behavior,
appFullscreen, transientBarTypes);
requestedState, packageName, transientBarTypes);
}
@Override

View File

@@ -24,6 +24,7 @@ import android.os.Binder;
import android.os.Parcel;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.view.InsetsState;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -59,7 +60,8 @@ public class RegisterStatusBarResultTest {
new Binder() /* imeToken */,
true /* navbarColorManagedByIme */,
BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
true /* appFullscreen */,
new InsetsState() /* requestedState */,
"test" /* packageName */,
new int[0] /* transientBarTypes */);
final RegisterStatusBarResult copy = clone(original);
@@ -79,7 +81,8 @@ public class RegisterStatusBarResultTest {
assertThat(copy.mImeToken).isSameInstanceAs(original.mImeToken);
assertThat(copy.mNavbarColorManagedByIme).isEqualTo(original.mNavbarColorManagedByIme);
assertThat(copy.mBehavior).isEqualTo(original.mBehavior);
assertThat(copy.mAppFullscreen).isEqualTo(original.mAppFullscreen);
assertThat(copy.mRequestedState).isEqualTo(original.mRequestedState);
assertThat(copy.mPackageName).isEqualTo(original.mPackageName);
assertThat(copy.mTransientBarTypes).isEqualTo(original.mTransientBarTypes);
}

View File

@@ -92,6 +92,7 @@ import android.view.Display;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.IWindowManager;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -954,7 +955,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
@Override
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
if (displayId != mDisplayId) {
return;
}

View File

@@ -26,6 +26,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_I
import android.inputmethodservice.InputMethodService;
import android.os.IBinder;
import android.view.InsetsState;
import com.android.internal.view.AppearanceRegion;
import com.android.systemui.model.SysUiState;
@@ -108,7 +109,7 @@ public class TaskbarDelegate implements CommandQueue.Callbacks {
@Override
public void onSystemBarAttributesChanged(int displayId, int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
boolean isFullscreen) {
InsetsState requestedState, String packageName) {
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
}
}

View File

@@ -50,6 +50,7 @@ import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
@@ -337,7 +338,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
*/
default void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) { }
@Behavior int behavior, InsetsState requestedState, String packageName) { }
/**
* @see IStatusBar#showTransient(int, int[]).
@@ -996,7 +997,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
@Override
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
synchronized (mLock) {
SomeArgs args = SomeArgs.obtain();
args.argi1 = displayId;
@@ -1004,7 +1005,8 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
args.argi3 = navbarColorManagedByIme ? 1 : 0;
args.arg1 = appearanceRegions;
args.argi4 = behavior;
args.argi5 = isFullscreen ? 1 : 0;
args.arg2 = requestedState;
args.arg3 = packageName;
mHandler.obtainMessage(MSG_SYSTEM_BAR_CHANGED, args).sendToTarget();
}
}
@@ -1387,7 +1389,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
for (int i = 0; i < mCallbacks.size(); i++) {
mCallbacks.get(i).onSystemBarAttributesChanged(args.argi1, args.argi2,
(AppearanceRegion[]) args.arg1, args.argi3 == 1, args.argi4,
args.argi5 == 1);
(InsetsState) args.arg2, (String) args.arg3);
}
args.recycle();
break;

View File

@@ -16,6 +16,10 @@
package com.android.systemui.statusbar;
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_TRANSITION_FROM_AOD;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_TRANSITION_TO_AOD;
@@ -23,10 +27,16 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.SystemProperties;
import android.text.format.DateFormat;
import android.util.FloatProperty;
import android.util.Log;
import android.view.InsetsFlags;
import android.view.InsetsState;
import android.view.View;
import android.view.ViewDebug;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
import android.view.animation.Interpolator;
import androidx.annotation.NonNull;
@@ -56,6 +66,9 @@ import javax.inject.Inject;
public class StatusBarStateControllerImpl implements SysuiStatusBarStateController,
CallbackController<StateListener>, Dumpable {
private static final String TAG = "SbStateController";
private static final boolean DEBUG_IMMERSIVE_APPS =
SystemProperties.getBoolean("persist.debug.immersive_apps", false);
// Must be a power of 2
private static final int HISTORY_SIZE = 32;
@@ -420,7 +433,10 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll
}
@Override
public void setFullscreenState(boolean isFullscreen) {
public void setSystemBarAttributes(@Appearance int appearance, @Behavior int behavior,
InsetsState requestedState, String packageName) {
boolean isFullscreen = !requestedState.getSourceOrDefaultVisibility(ITYPE_STATUS_BAR)
|| !requestedState.getSourceOrDefaultVisibility(ITYPE_NAVIGATION_BAR);
if (mIsFullscreen != isFullscreen) {
mIsFullscreen = isFullscreen;
synchronized (mListeners) {
@@ -429,6 +445,19 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll
}
}
}
// TODO (b/190543382): Finish the logging logic.
// This section can be removed if we don't need to print it on logcat.
if (DEBUG_IMMERSIVE_APPS) {
boolean dim = (appearance & APPEARANCE_LOW_PROFILE_BARS) != 0;
String behaviorName = ViewDebug.flagsToString(InsetsFlags.class, "behavior", behavior);
String requestedVisibilityString = requestedState.toSourceVisibilityString();
if (requestedVisibilityString.isEmpty()) {
requestedVisibilityString = "none";
}
Log.d(TAG, packageName + " dim=" + dim + " behavior=" + behaviorName
+ " requested visibilities: " + requestedVisibilityString);
}
}
@Override

View File

@@ -19,7 +19,10 @@ package com.android.systemui.statusbar;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
import android.view.InsetsState;
import android.view.View;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
@@ -155,9 +158,10 @@ public interface SysuiStatusBarStateController extends StatusBarStateController
boolean isKeyguardRequested();
/**
* Set the fullscreen state
* Set the system bar attributes
*/
void setFullscreenState(boolean isFullscreen);
void setSystemBarAttributes(@Appearance int appearance, @Behavior int behavior,
InsetsState requestedState, String packageName);
/**
* Set pulsing

View File

@@ -21,6 +21,7 @@ import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.Nullable;
import android.view.InsetsState;
import android.view.View;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
@@ -149,7 +150,7 @@ public class LightsOutNotifController {
@Override
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
if (displayId != mDisplayId) {
return;
}

View File

@@ -104,6 +104,7 @@ import android.util.Slog;
import android.view.Display;
import android.view.IRemoteAnimationRunner;
import android.view.IWindowManager;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -984,7 +985,8 @@ public class StatusBar extends SystemUI implements DemoMode,
showTransientUnchecked();
}
onSystemBarAttributesChanged(mDisplayId, result.mAppearance, result.mAppearanceRegions,
result.mNavbarColorManagedByIme, result.mBehavior, result.mAppFullscreen);
result.mNavbarColorManagedByIme, result.mBehavior, result.mRequestedState,
result.mPackageName);
// StatusBarManagerService has a back up of IME token and it's restored here.
setImeWindowStatus(mDisplayId, result.mImeToken, result.mImeWindowVis,
@@ -2477,7 +2479,7 @@ public class StatusBar extends SystemUI implements DemoMode,
@Override
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
if (displayId != mDisplayId) {
return;
}
@@ -2490,7 +2492,8 @@ public class StatusBar extends SystemUI implements DemoMode,
mStatusBarMode, navbarColorManagedByIme);
updateBubblesVisibility();
mStatusBarStateController.setFullscreenState(isFullscreen);
mStatusBarStateController.setSystemBarAttributes(
appearance, behavior, requestedState, packageName);
}
@Override

View File

@@ -33,6 +33,7 @@ import android.hardware.biometrics.IBiometricSysuiReceiver;
import android.hardware.biometrics.PromptInfo;
import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Bundle;
import android.view.InsetsState;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
@@ -124,24 +125,25 @@ public class CommandQueueTest extends SysuiTestCase {
public void testOnSystemBarAttributesChanged() {
doTestOnSystemBarAttributesChanged(DEFAULT_DISPLAY, 1,
new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
BEHAVIOR_DEFAULT, false);
BEHAVIOR_DEFAULT, new InsetsState(), "test");
}
@Test
public void testOnSystemBarAttributesChangedForSecondaryDisplay() {
doTestOnSystemBarAttributesChanged(SECONDARY_DISPLAY, 1,
new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
BEHAVIOR_DEFAULT, false);
BEHAVIOR_DEFAULT, new InsetsState(), "test");
}
private void doTestOnSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
mCommandQueue.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
navbarColorManagedByIme, behavior, isFullscreen);
navbarColorManagedByIme, behavior, requestedState, packageName);
waitForIdleSync();
verify(mCallbacks).onSystemBarAttributesChanged(eq(displayId), eq(appearance),
eq(appearanceRegions), eq(navbarColorManagedByIme), eq(behavior), eq(isFullscreen));
eq(appearanceRegions), eq(navbarColorManagedByIme), eq(behavior),
eq(requestedState), eq(packageName));
}
@Test

View File

@@ -102,7 +102,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
null /* appearanceRegions */,
false /* navbarColorManagedByIme */,
BEHAVIOR_DEFAULT,
false /* isFullscreen */);
null /* requestedState */,
null /* packageName */);
assertTrue(mLightsOutNotifController.areLightsOut());
}
@@ -114,7 +115,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
null /* appearanceRegions */,
false /* navbarColorManagedByIme */,
BEHAVIOR_DEFAULT,
false /* isFullscreen */);
null /* requestedState */,
null /* packageName */);
assertFalse(mLightsOutNotifController.areLightsOut());
}
@@ -144,7 +146,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
null /* appearanceRegions */,
false /* navbarColorManagedByIme */,
BEHAVIOR_DEFAULT,
false /* isFullscreen */);
null /* requestedState */,
null /* packageName */);
// THEN we should show dot
assertTrue(mLightsOutNotifController.shouldShowDot());
@@ -163,7 +166,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
null /* appearanceRegions */,
false /* navbarColorManagedByIme */,
BEHAVIOR_DEFAULT,
false /* isFullscreen */);
null /* requestedState */,
null /* packageName */);
// THEN we shouldn't show the dot
assertFalse(mLightsOutNotifController.shouldShowDot());
@@ -182,7 +186,8 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
null /* appearanceRegions */,
false /* navbarColorManagedByIme */,
BEHAVIOR_DEFAULT,
false /* isFullscreen */);
null /* requestedState */,
null /* packageName */);
// THEN we shouldn't show the dot
assertFalse(mLightsOutNotifController.shouldShowDot());

View File

@@ -22,6 +22,7 @@ import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
@@ -132,7 +133,7 @@ public interface StatusBarManagerInternal {
/** @see com.android.internal.statusbar.IStatusBar#onSystemBarAttributesChanged */
void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen);
@Behavior int behavior, InsetsState requestedState, String packageName);
/** @see com.android.internal.statusbar.IStatusBar#showTransient */
void showTransient(int displayId, @InternalInsetsType int[] types);

View File

@@ -59,6 +59,7 @@ import android.util.ArraySet;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
import android.view.WindowInsetsController.Behavior;
@@ -526,13 +527,13 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
@Override
public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
getUiState(displayId).setBarAttributes(appearance, appearanceRegions,
navbarColorManagedByIme, behavior, isFullscreen);
navbarColorManagedByIme, behavior, requestedState, packageName);
if (mBar != null) {
try {
mBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
navbarColorManagedByIme, behavior, isFullscreen);
navbarColorManagedByIme, behavior, requestedState, packageName);
} catch (RemoteException ex) { }
}
}
@@ -1103,13 +1104,14 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
return state;
}
private class UiState {
private static class UiState {
private @Appearance int mAppearance = 0;
private AppearanceRegion[] mAppearanceRegions = new AppearanceRegion[0];
private ArraySet<Integer> mTransientBarTypes = new ArraySet<>();
private final ArraySet<Integer> mTransientBarTypes = new ArraySet<>();
private boolean mNavbarColorManagedByIme = false;
private @Behavior int mBehavior;
private boolean mFullscreen = false;
private InsetsState mRequestedState = new InsetsState();
private String mPackageName = "none";
private int mDisabled1 = 0;
private int mDisabled2 = 0;
private int mImeWindowVis = 0;
@@ -1119,12 +1121,13 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
private void setBarAttributes(@Appearance int appearance,
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
@Behavior int behavior, boolean isFullscreen) {
@Behavior int behavior, InsetsState requestedState, String packageName) {
mAppearance = appearance;
mAppearanceRegions = appearanceRegions;
mNavbarColorManagedByIme = navbarColorManagedByIme;
mBehavior = behavior;
mFullscreen = isFullscreen;
mRequestedState = requestedState;
mPackageName = packageName;
}
private void showTransient(@InternalInsetsType int[] types) {
@@ -1244,8 +1247,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
state.mAppearance, state.mAppearanceRegions, state.mImeWindowVis,
state.mImeBackDisposition, state.mShowImeSwitcher,
gatherDisableActionsLocked(mCurrentUserId, 2), state.mImeToken,
state.mNavbarColorManagedByIme, state.mBehavior, state.mFullscreen,
transientBarTypes);
state.mNavbarColorManagedByIme, state.mBehavior, state.mRequestedState,
state.mPackageName, transientBarTypes);
}
}

View File

@@ -175,6 +175,7 @@ import com.android.server.wallpaper.WallpaperManagerInternal;
import com.android.server.wm.InputMonitor.EventReceiverInputConsumer;
import java.io.PrintWriter;
import java.util.Objects;
import java.util.function.Consumer;
/**
@@ -322,17 +323,19 @@ public class DisplayPolicy {
// needs to be opaque.
private WindowState mNavBarBackgroundWindow;
private String mFocusedApp;
private int mLastDisableFlags;
private int mLastAppearance;
private int mLastFullscreenAppearance;
private int mLastDockedAppearance;
private int mLastBehavior;
private final InsetsState mRequestedState = new InsetsState();
private final Rect mNonDockedRootTaskBounds = new Rect();
private final Rect mDockedRootTaskBounds = new Rect();
private final Rect mLastNonDockedRootTaskBounds = new Rect();
private final Rect mLastDockedRootTaskBounds = new Rect();
// What we last reported to system UI about whether the focused window is fullscreen/immersive.
// What we last reported to input dispatcher about whether the focused window is fullscreen.
private boolean mLastFocusIsFullscreen = false;
// If nonzero, a panic gesture was performed at that time in uptime millis and is still pending.
@@ -2683,6 +2686,8 @@ public class DisplayPolicy {
&& mLastFullscreenAppearance == fullscreenAppearance
&& mLastDockedAppearance == dockedAppearance
&& mLastBehavior == behavior
&& mRequestedState.equals(win.getRequestedState())
&& Objects.equals(mFocusedApp, win.mAttrs.packageName)
&& mLastFocusIsFullscreen == isFullscreen
&& mLastNonDockedRootTaskBounds.equals(mNonDockedRootTaskBounds)
&& mLastDockedRootTaskBounds.equals(mDockedRootTaskBounds)) {
@@ -2698,6 +2703,8 @@ public class DisplayPolicy {
mLastFullscreenAppearance = fullscreenAppearance;
mLastDockedAppearance = dockedAppearance;
mLastBehavior = behavior;
mRequestedState.set(win.getRequestedState(), true /* copySources */);
mFocusedApp = win.mAttrs.packageName;
mLastFocusIsFullscreen = isFullscreen;
mLastNonDockedRootTaskBounds.set(mNonDockedRootTaskBounds);
mLastDockedRootTaskBounds.set(mDockedRootTaskBounds);
@@ -2716,7 +2723,7 @@ public class DisplayPolicy {
final int displayId = getDisplayId();
statusBar.setDisableFlags(displayId, disableFlags, cause);
statusBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
isNavbarColorManagedByIme, behavior, isFullscreen);
isNavbarColorManagedByIme, behavior, mRequestedState, mFocusedApp);
}
});

View File

@@ -874,6 +874,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return mRequestedInsetsState.getSourceOrDefaultVisibility(type);
}
/**
* Returns all the requested visibilities.
*
* @return an {@link InsetsState} as the requested visibilities.
*/
InsetsState getRequestedState() {
return mRequestedInsetsState;
}
/**
* @see #getRequestedVisibility(int)
*/