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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user