summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiger Huang <tigerhuang@google.com>2021-01-13 03:28:32 +0800
committerTiger Huang <tigerhuang@google.com>2021-01-19 23:33:21 +0800
commitd878909a9b5c4bb88e9dea50be02b1d41400e866 (patch)
treee3bbbdbba3342e4ded4327682f8ef06ea1c95d32
parentbfcc7e5f4f0a18471f5493c4dcae9d54347474f0 (diff)
Add BEHAVIOR_DEFAULT for visual immersive mode
BEHAVIOR_DEFAULT lets the user can use single gesture to navigate while system bars are hidden in gesture navigation mode. The user doesn't need to make navigation bar visible before performing navigation. BEHAVIOR_DEFAULT will be the default behavior, which means if there is no system bar behavior (or any legacy sysui flag about immersive) specified, the behavior will be BEHAVIOR_DEFAULT instead of BEHAVIOR_SHOW_BARS_BY_TOUCH. BEHAVIOR_SHOW_BARS_BY_TOUCH and BEHAVIOR_SHOW_BARS_BY_SWIPE are deprecated. Their behavior is equivalent to BEHAVIOR_DEFAULT now. The logic about HideNavInputEventReceiver is removed. Bug: 168913586 Test: atest WindowInsetsControllerTests ViewRootImplTest DisplayPolicyTests CommandQueueTest LightsOutNotifControllerTest RegisterStatusBarResultTest Change-Id: Ic818e323abbb38b57bef9fc36fb1afef2a007f1b
-rw-r--r--core/api/current.txt5
-rw-r--r--core/java/android/view/InsetsFlags.java10
-rw-r--r--core/java/android/view/PendingInsetsController.java3
-rw-r--r--core/java/android/view/View.java2
-rw-r--r--core/java/android/view/ViewRootImpl.java8
-rw-r--r--core/java/android/view/WindowInsetsController.java29
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl10
-rw-r--r--core/java/com/android/internal/statusbar/RegisterStatusBarResult.java14
-rw-r--r--core/tests/coretests/src/android/view/ViewRootImplTest.java4
-rw-r--r--core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java73
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java36
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java29
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java37
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java9
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java75
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java108
-rw-r--r--services/core/java/com/android/server/wm/InputMonitor.java30
-rw-r--r--services/core/java/com/android/server/wm/InsetsPolicy.java1
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java45
-rw-r--r--tests/WindowInsetsTests/res/values/strings.xml2
-rw-r--r--tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java2
27 files changed, 189 insertions, 421 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 1eeb9275b0b2..ddd97e0cf819 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -49378,8 +49378,9 @@ package android.view {
method public void show(int);
field public static final int APPEARANCE_LIGHT_NAVIGATION_BARS = 16; // 0x10
field public static final int APPEARANCE_LIGHT_STATUS_BARS = 8; // 0x8
- field public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
- field public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+ field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+ field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
}
diff --git a/core/java/android/view/InsetsFlags.java b/core/java/android/view/InsetsFlags.java
index 5a64a5d5b3a6..a334907c04bc 100644
--- a/core/java/android/view/InsetsFlags.java
+++ b/core/java/android/view/InsetsFlags.java
@@ -21,7 +21,7 @@ import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_STATUS_BARS;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
+import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import android.view.WindowInsetsController.Appearance;
@@ -60,13 +60,13 @@ public class InsetsFlags {
@ViewDebug.ExportedProperty(flagMapping = {
@ViewDebug.FlagToString(
- mask = BEHAVIOR_SHOW_BARS_BY_SWIPE,
- equals = BEHAVIOR_SHOW_BARS_BY_SWIPE,
- name = "SHOW_BARS_BY_SWIPE"),
+ mask = BEHAVIOR_DEFAULT,
+ equals = BEHAVIOR_DEFAULT,
+ name = "DEFAULT"),
@ViewDebug.FlagToString(
mask = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
equals = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
name = "SHOW_TRANSIENT_BARS_BY_SWIPE")
})
- public @Behavior int behavior;
+ public @Behavior int behavior = BEHAVIOR_DEFAULT;
}
diff --git a/core/java/android/view/PendingInsetsController.java b/core/java/android/view/PendingInsetsController.java
index c018d1cf1782..c61baf6fb40c 100644
--- a/core/java/android/view/PendingInsetsController.java
+++ b/core/java/android/view/PendingInsetsController.java
@@ -100,6 +100,9 @@ public class PendingInsetsController implements WindowInsetsController {
if (mReplayedInsetsController != null) {
return mReplayedInsetsController.getSystemBarsBehavior();
}
+ if (mBehavior == KEEP_BEHAVIOR) {
+ return BEHAVIOR_DEFAULT;
+ }
return mBehavior;
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 25967b3ebcff..b8840ba9e43a 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3790,7 +3790,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* <p>Since this flag is a modifier for {@link #SYSTEM_UI_FLAG_HIDE_NAVIGATION}, it only
* has an effect when used in combination with that flag.</p>
*
- * @deprecated Use {@link WindowInsetsController#BEHAVIOR_SHOW_BARS_BY_SWIPE} instead.
+ * @deprecated Use {@link WindowInsetsController#BEHAVIOR_DEFAULT} instead.
*/
@Deprecated
public static final int SYSTEM_UI_FLAG_IMMERSIVE = 0x00000800;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7e0ebbcc61d2..625ace2a7cd0 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -26,7 +26,6 @@ import static android.view.InsetsState.SIZE;
import static android.view.View.PFLAG_DRAW_ANIMATION;
import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;
import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE;
import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
@@ -55,8 +54,7 @@ import static android.view.WindowCallbacks.RESIZE_MODE_FREEFORM;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH;
+import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
@@ -2167,10 +2165,8 @@ public final class ViewRootImpl implements ViewParent,
if ((sysUiVis & SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0
|| (flags & FLAG_FULLSCREEN) != 0) {
inOutParams.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
- } else if ((sysUiVis & SYSTEM_UI_FLAG_IMMERSIVE) != 0) {
- inOutParams.insetsFlags.behavior = BEHAVIOR_SHOW_BARS_BY_SWIPE;
} else {
- inOutParams.insetsFlags.behavior = BEHAVIOR_SHOW_BARS_BY_TOUCH;
+ inOutParams.insetsFlags.behavior = BEHAVIOR_DEFAULT;
}
}
diff --git a/core/java/android/view/WindowInsetsController.java b/core/java/android/view/WindowInsetsController.java
index e879bb4bff95..fb9bcbd2fcb2 100644
--- a/core/java/android/view/WindowInsetsController.java
+++ b/core/java/android/view/WindowInsetsController.java
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.Insets;
import android.inputmethodservice.InputMethodService;
+import android.os.Build;
import android.os.CancellationSignal;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsets.Type;
@@ -77,22 +78,41 @@ public interface WindowInsetsController {
}
/**
- * The default option for {@link #setSystemBarsBehavior(int)}. System bars will be forcibly
- * shown on any user interaction on the corresponding display if navigation bars are hidden by
+ * Option for {@link #setSystemBarsBehavior(int)}. System bars will be forcibly shown on any
+ * user interaction on the corresponding display if navigation bars are hidden by
* {@link #hide(int)} or
* {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)}.
+ * @deprecated This is not supported on Android {@link Build.VERSION_CODES#S} and later. Use
+ * {@link #BEHAVIOR_DEFAULT} or {@link #BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE}
+ * instead.
*/
+ @Deprecated
int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0;
/**
+ * The default option for {@link #setSystemBarsBehavior(int)}: Window would like to remain
+ * interactive when hiding navigation bars by calling {@link #hide(int)} or
+ * {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)}.
+ *
+ * <p>When system bars are hidden in this mode, they can be revealed with system gestures, such
+ * as swiping from the edge of the screen where the bar is hidden from.</p>
+ *
+ * <p>When the gesture navigation is enabled, the system gestures can be triggered regardless
+ * the visibility of system bars.</p>
+ */
+ int BEHAVIOR_DEFAULT = 1;
+
+ /**
* Option for {@link #setSystemBarsBehavior(int)}: Window would like to remain interactive when
* hiding navigation bars by calling {@link #hide(int)} or
* {@link WindowInsetsAnimationController#setInsetsAndAlpha(Insets, float, float)}.
*
* <p>When system bars are hidden in this mode, they can be revealed with system gestures, such
* as swiping from the edge of the screen where the bar is hidden from.</p>
+ * @deprecated Use {@link #BEHAVIOR_DEFAULT} instead.
*/
- int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1;
+ @Deprecated
+ int BEHAVIOR_SHOW_BARS_BY_SWIPE = BEHAVIOR_DEFAULT;
/**
* Option for {@link #setSystemBarsBehavior(int)}: Window would like to remain interactive when
@@ -111,8 +131,7 @@ public interface WindowInsetsController {
* @hide
*/
@Retention(RetentionPolicy.SOURCE)
- @IntDef(value = {BEHAVIOR_SHOW_BARS_BY_TOUCH, BEHAVIOR_SHOW_BARS_BY_SWIPE,
- BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE})
+ @IntDef(value = {BEHAVIOR_DEFAULT, BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE})
@interface Behavior {
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index b9c2fd532d0f..200e0dd6e65b 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -41,7 +41,6 @@ oneway interface IStatusBar
void showWirelessChargingAnimation(int batteryLevel);
- void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive);
void setImeWindowStatus(int displayId, in IBinder token, int vis, int backDisposition,
boolean showImeSwitcher, boolean isMultiClientImeEnabled);
void setWindowState(int display, int window, int state);
@@ -167,7 +166,7 @@ oneway interface IStatusBar
void onRecentsAnimationStateChanged(boolean running);
/**
- * Notifies System UI side of system bar appearance change on the specified display.
+ * Notifies System UI side of system bar attribute change on the specified display.
*
* @param displayId the ID of the display to notify
* @param appearance the appearance of the focused window. The light top bar appearance is not
@@ -177,9 +176,12 @@ oneway interface IStatusBar
* bar, that the bar can have partial appearances in corresponding
* 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.
*/
- void onSystemBarAppearanceChanged(int displayId, int appearance,
- in AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme);
+ void onSystemBarAttributesChanged(int displayId, int appearance,
+ in AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ int behavior, boolean isFullscreen);
/**
* Notifies System UI to show transient bars. The transient bars are system bars, e.g., status
diff --git a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
index 9095f05543da..8fb2f9cd8bf9 100644
--- a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
+++ b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
@@ -38,14 +38,14 @@ public final class RegisterStatusBarResult implements Parcelable {
public final int mDisabledFlags2; // switch[6]
public final IBinder mImeToken;
public final boolean mNavbarColorManagedByIme;
+ public final int mBehavior;
public final boolean mAppFullscreen;
- public final boolean mAppImmersive;
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, boolean appFullscreen, boolean appImmersive,
+ boolean navbarColorManagedByIme, int behavior, boolean appFullscreen,
@NonNull int[] transientBarTypes) {
mIcons = new ArrayMap<>(icons);
mDisabledFlags1 = disabledFlags1;
@@ -57,8 +57,8 @@ public final class RegisterStatusBarResult implements Parcelable {
mDisabledFlags2 = disabledFlags2;
mImeToken = imeToken;
mNavbarColorManagedByIme = navbarColorManagedByIme;
+ mBehavior = behavior;
mAppFullscreen = appFullscreen;
- mAppImmersive = appImmersive;
mTransientBarTypes = transientBarTypes;
}
@@ -79,8 +79,8 @@ public final class RegisterStatusBarResult implements Parcelable {
dest.writeInt(mDisabledFlags2);
dest.writeStrongBinder(mImeToken);
dest.writeBoolean(mNavbarColorManagedByIme);
+ dest.writeInt(mBehavior);
dest.writeBoolean(mAppFullscreen);
- dest.writeBoolean(mAppImmersive);
dest.writeIntArray(mTransientBarTypes);
}
@@ -103,13 +103,13 @@ public final class RegisterStatusBarResult implements Parcelable {
final int disabledFlags2 = source.readInt();
final IBinder imeToken = source.readStrongBinder();
final boolean navbarColorManagedByIme = source.readBoolean();
+ final int behavior = source.readInt();
final boolean appFullscreen = source.readBoolean();
- final boolean appImmersive = source.readBoolean();
final int[] transientBarTypes = source.createIntArray();
return new RegisterStatusBarResult(icons, disabledFlags1, appearance,
appearanceRegions, imeWindowVis, imeBackDisposition, showImeSwitcher,
- disabledFlags2, imeToken, navbarColorManagedByIme, appFullscreen,
- appImmersive, transientBarTypes);
+ disabledFlags2, imeToken, navbarColorManagedByIme, behavior,
+ appFullscreen, transientBarTypes);
}
@Override
diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java
index f371a7ffce23..17adb858728a 100644
--- a/core/tests/coretests/src/android/view/ViewRootImplTest.java
+++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java
@@ -23,7 +23,7 @@ import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
import static android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
import static android.view.View.SYSTEM_UI_FLAG_LOW_PROFILE;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_STATUS_BARS;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
+import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
@@ -180,7 +180,7 @@ public class ViewRootImplTest {
public void adjustLayoutParamsForCompatibility_noAdjustBehavior() {
final WindowInsetsController controller = mViewRootImpl.getInsetsController();
final WindowManager.LayoutParams attrs = mViewRootImpl.mWindowAttributes;
- final int behavior = BEHAVIOR_SHOW_BARS_BY_SWIPE;
+ final int behavior = BEHAVIOR_DEFAULT;
controller.setSystemBarsBehavior(behavior);
attrs.systemUiVisibility = SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);
diff --git a/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java b/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
index 7eca320d4aeb..272f2287dd6e 100644
--- a/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
+++ b/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
@@ -16,6 +16,8 @@
package com.android.internal.statusbar;
+import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
+
import static com.google.common.truth.Truth.assertThat;
import android.os.Binder;
@@ -56,8 +58,8 @@ public class RegisterStatusBarResultTest {
0x20 /* disabledFlags2 */,
new Binder() /* imeToken */,
true /* navbarColorManagedByIme */,
+ BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
true /* appFullscreen */,
- true /* appImmersive */,
new int[0] /* transientBarTypes */);
final RegisterStatusBarResult copy = clone(original);
@@ -76,8 +78,8 @@ public class RegisterStatusBarResultTest {
assertThat(copy.mDisabledFlags2).isEqualTo(original.mDisabledFlags2);
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.mAppImmersive).isEqualTo(original.mAppImmersive);
assertThat(copy.mTransientBarTypes).isEqualTo(original.mTransientBarTypes);
}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java b/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
index 61951cc0b5e9..169a9c0c6eac 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/PhoneStateMonitor.java
@@ -112,7 +112,7 @@ public final class PhoneStateMonitor {
} else if (mLauncherShowing) {
phoneState = getPhoneLauncherState();
} else {
- phoneState = getPhoneAppState();
+ phoneState = PHONE_STATE_APP_IMMERSIVE;
}
return phoneState;
}
@@ -161,16 +161,6 @@ public final class PhoneStateMonitor {
}
}
- private int getPhoneAppState() {
- if (isAppImmersive()) {
- return PHONE_STATE_APP_IMMERSIVE;
- } else if (isAppFullscreen()) {
- return PHONE_STATE_APP_FULLSCREEN;
- } else {
- return PHONE_STATE_APP_DEFAULT;
- }
- }
-
private boolean isShadeFullscreen() {
int statusBarState = mStatusBarStateController.getState();
return statusBarState == StatusBarState.KEYGUARD
@@ -189,14 +179,6 @@ public final class PhoneStateMonitor {
}
}
- private boolean isAppImmersive() {
- return mStatusBarOptionalLazy.get().get().inImmersiveMode();
- }
-
- private boolean isAppFullscreen() {
- return mStatusBarOptionalLazy.get().get().inFullscreenMode();
- }
-
private boolean isBouncerShowing() {
return mStatusBarOptionalLazy.map(
statusBarLazy -> statusBarLazy.get().isBouncerShowing()).orElse(false);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index a23b07c5d685..34d1f6e1789c 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -28,6 +28,7 @@ import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.InsetsState.containsType;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
+import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
@@ -37,6 +38,7 @@ import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BA
import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
+import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
@@ -91,6 +93,7 @@ import android.view.Surface;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -159,6 +162,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
private static final String EXTRA_DISABLE_STATE = "disabled_state";
private static final String EXTRA_DISABLE2_STATE = "disabled2_state";
private static final String EXTRA_APPEARANCE = "appearance";
+ private static final String EXTRA_BEHAVIOR = "behavior";
private static final String EXTRA_TRANSIENT_STATE = "transient_state";
/** Allow some time inbetween the long press for back and recents. */
@@ -209,9 +213,12 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
private boolean mForceNavBarHandleOpaque;
private boolean mIsCurrentUserSetup;
- /** @see android.view.WindowInsetsController#setSystemBarsAppearance(int) */
+ /** @see android.view.WindowInsetsController#setSystemBarsAppearance(int, int) */
private @Appearance int mAppearance;
+ /** @see android.view.WindowInsetsController#setSystemBarsBehavior(int) */
+ private @Behavior int mBehavior;
+
private boolean mTransientShown;
private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
private LightBarController mLightBarController;
@@ -489,6 +496,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
mDisabledFlags1 = savedState.getInt(EXTRA_DISABLE_STATE, 0);
mDisabledFlags2 = savedState.getInt(EXTRA_DISABLE2_STATE, 0);
mAppearance = savedState.getInt(EXTRA_APPEARANCE, 0);
+ mBehavior = savedState.getInt(EXTRA_BEHAVIOR, 0);
mTransientShown = savedState.getBoolean(EXTRA_TRANSIENT_STATE, false);
}
mSavedState = savedState;
@@ -629,6 +637,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
outState.putInt(EXTRA_DISABLE_STATE, mDisabledFlags1);
outState.putInt(EXTRA_DISABLE2_STATE, mDisabledFlags2);
outState.putInt(EXTRA_APPEARANCE, mAppearance);
+ outState.putInt(EXTRA_BEHAVIOR, mBehavior);
outState.putBoolean(EXTRA_TRANSIENT_STATE, mTransientShown);
if (mNavigationBarView != null) {
mNavigationBarView.getLightTransitionsController().saveState(outState);
@@ -889,8 +898,9 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
}
@Override
- public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
+ public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
if (displayId != mDisplayId) {
return;
}
@@ -906,6 +916,10 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
mNavigationBarMode, navbarColorManagedByIme);
}
+ if (mBehavior != behavior) {
+ mBehavior = behavior;
+ updateSystemUiStateFlags(-1);
+ }
}
@Override
@@ -1319,6 +1333,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
.setFlag(SYSUI_STATE_NAV_BAR_HIDDEN, !isNavBarWindowVisible())
.setFlag(SYSUI_STATE_IME_SHOWING,
(mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0)
+ .setFlag(SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY,
+ allowSystemGestureIgnoringBarVisibility())
.commitUpdate(mDisplayId);
registerAction(clickable, SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON);
registerAction(longClickable, SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON_CHOOSER);
@@ -1421,6 +1437,10 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
return mNavigationBarWindowState == WINDOW_STATE_SHOWING;
}
+ private boolean allowSystemGestureIgnoringBarVisibility() {
+ return mBehavior != BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
+ }
+
/**
* Checks current navigation bar mode and make transitions.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index fbb80428d68c..c4fa6df56775 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -34,7 +34,6 @@ import android.app.StatusBarManager.WindowType;
import android.app.StatusBarManager.WindowVisibleState;
import android.content.ComponentName;
import android.content.Context;
-import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.IBiometricSysuiReceiver;
import android.hardware.biometrics.PromptInfo;
import android.hardware.display.DisplayManager;
@@ -50,6 +49,7 @@ import android.util.Pair;
import android.util.SparseArray;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import androidx.annotation.NonNull;
@@ -90,7 +90,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
private static final int MSG_EXPAND_NOTIFICATIONS = 3 << MSG_SHIFT;
private static final int MSG_COLLAPSE_PANELS = 4 << MSG_SHIFT;
private static final int MSG_EXPAND_SETTINGS = 5 << MSG_SHIFT;
- private static final int MSG_SYSTEM_BAR_APPEARANCE_CHANGED = 6 << MSG_SHIFT;
+ private static final int MSG_SYSTEM_BAR_CHANGED = 6 << MSG_SHIFT;
private static final int MSG_DISPLAY_READY = 7 << MSG_SHIFT;
private static final int MSG_SHOW_IME_BUTTON = 8 << MSG_SHIFT;
private static final int MSG_TOGGLE_RECENT_APPS = 9 << MSG_SHIFT;
@@ -131,17 +131,16 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
private static final int MSG_RECENTS_ANIMATION_STATE_CHANGED = 47 << MSG_SHIFT;
private static final int MSG_SHOW_TRANSIENT = 48 << MSG_SHIFT;
private static final int MSG_ABORT_TRANSIENT = 49 << MSG_SHIFT;
- private static final int MSG_TOP_APP_WINDOW_CHANGED = 50 << MSG_SHIFT;
- private static final int MSG_SHOW_INATTENTIVE_SLEEP_WARNING = 51 << MSG_SHIFT;
- private static final int MSG_DISMISS_INATTENTIVE_SLEEP_WARNING = 52 << MSG_SHIFT;
- private static final int MSG_SHOW_TOAST = 53 << MSG_SHIFT;
- private static final int MSG_HIDE_TOAST = 54 << MSG_SHIFT;
- private static final int MSG_TRACING_STATE_CHANGED = 55 << MSG_SHIFT;
- private static final int MSG_SUPPRESS_AMBIENT_DISPLAY = 56 << MSG_SHIFT;
- private static final int MSG_REQUEST_WINDOW_MAGNIFICATION_CONNECTION = 57 << MSG_SHIFT;
- private static final int MSG_HANDLE_WINDOW_MANAGER_LOGGING_COMMAND = 58 << MSG_SHIFT;
+ private static final int MSG_SHOW_INATTENTIVE_SLEEP_WARNING = 50 << MSG_SHIFT;
+ private static final int MSG_DISMISS_INATTENTIVE_SLEEP_WARNING = 51 << MSG_SHIFT;
+ private static final int MSG_SHOW_TOAST = 52 << MSG_SHIFT;
+ private static final int MSG_HIDE_TOAST = 53 << MSG_SHIFT;
+ private static final int MSG_TRACING_STATE_CHANGED = 54 << MSG_SHIFT;
+ private static final int MSG_SUPPRESS_AMBIENT_DISPLAY = 55 << MSG_SHIFT;
+ private static final int MSG_REQUEST_WINDOW_MAGNIFICATION_CONNECTION = 56 << MSG_SHIFT;
+ private static final int MSG_HANDLE_WINDOW_MANAGER_LOGGING_COMMAND = 57 << MSG_SHIFT;
//TODO(b/169175022) Update name and when feature name is locked.
- private static final int MSG_EMERGENCY_ACTION_LAUNCH_GESTURE = 59 << MSG_SHIFT;
+ private static final int MSG_EMERGENCY_ACTION_LAUNCH_GESTURE = 58 << MSG_SHIFT;
public static final int FLAG_EXCLUDE_NONE = 0;
public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -308,10 +307,11 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
default void onRecentsAnimationStateChanged(boolean running) { }
/**
- * @see IStatusBar#onSystemBarAppearanceChanged(int, int, AppearanceRegion[], boolean).
+ * @see IStatusBar#onSystemBarAttributesChanged.
*/
- default void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) { }
+ default void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) { }
/**
* @see IStatusBar#showTransient(int, int[]).
@@ -324,12 +324,6 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
default void abortTransient(int displayId, @InternalInsetsType int[] types) { }
/**
- * @see IStatusBar#topAppWindowChanged(int, boolean, boolean).
- */
- default void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive) {
- }
-
- /**
* Called to notify System UI that a warning about the device going to sleep
* due to prolonged user inactivity should be shown.
*/
@@ -547,18 +541,6 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
}
@Override
- public void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive) {
- synchronized (mLock) {
- SomeArgs args = SomeArgs.obtain();
- args.argi1 = displayId;
- args.argi2 = isFullscreen ? 1 : 0;
- args.argi3 = isImmersive ? 1 : 0;
- mHandler.obtainMessage(MSG_TOP_APP_WINDOW_CHANGED, args).sendToTarget();
- }
-
- }
-
- @Override
public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition,
boolean showImeSwitcher, boolean isMultiClientImeEnabled) {
synchronized (mLock) {
@@ -969,15 +951,18 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
}
@Override
- public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
+ public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
synchronized (mLock) {
SomeArgs args = SomeArgs.obtain();
args.argi1 = displayId;
args.argi2 = appearance;
args.argi3 = navbarColorManagedByIme ? 1 : 0;
args.arg1 = appearanceRegions;
- mHandler.obtainMessage(MSG_SYSTEM_BAR_APPEARANCE_CHANGED, args).sendToTarget();
+ args.argi4 = behavior;
+ args.argi5 = isFullscreen ? 1 : 0;
+ mHandler.obtainMessage(MSG_SYSTEM_BAR_CHANGED, args).sendToTarget();
}
}
@@ -1328,11 +1313,12 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
mCallbacks.get(i).onRecentsAnimationStateChanged(msg.arg1 > 0);
}
break;
- case MSG_SYSTEM_BAR_APPEARANCE_CHANGED:
+ case MSG_SYSTEM_BAR_CHANGED:
args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onSystemBarAppearanceChanged(args.argi1, args.argi2,
- (AppearanceRegion[]) args.arg1, args.argi3 == 1);
+ mCallbacks.get(i).onSystemBarAttributesChanged(args.argi1, args.argi2,
+ (AppearanceRegion[]) args.arg1, args.argi3 == 1, args.argi4,
+ args.argi5 == 1);
}
args.recycle();
break;
@@ -1352,15 +1338,6 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
}
break;
}
- case MSG_TOP_APP_WINDOW_CHANGED: {
- args = (SomeArgs) msg.obj;
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).topAppWindowChanged(
- args.argi1, args.argi2 != 0, args.argi3 != 0);
- }
- args.recycle();
- break;
- }
case MSG_SHOW_INATTENTIVE_SLEEP_WARNING:
for (int i = 0; i < mCallbacks.size(); i++) {
mCallbacks.get(i).showInattentiveSleepWarning();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
index e9442499a8ce..6ba52156c374 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
@@ -88,11 +88,6 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll
private boolean mIsFullscreen = false;
/**
- * If the navigation bar can stay hidden when the display gets tapped.
- */
- private boolean mIsImmersive = false;
-
- /**
* If the device is currently pulsing (AOD2).
*/
private boolean mPulsing;
@@ -360,13 +355,12 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll
}
@Override
- public void setFullscreenState(boolean isFullscreen, boolean isImmersive) {
- if (mIsFullscreen != isFullscreen || mIsImmersive != isImmersive) {
+ public void setFullscreenState(boolean isFullscreen) {
+ if (mIsFullscreen != isFullscreen) {
mIsFullscreen = isFullscreen;
- mIsImmersive = isImmersive;
synchronized (mListeners) {
for (RankedListener rl : new ArrayList<>(mListeners)) {
- rl.mListener.onFullscreenStateChanged(isFullscreen, isImmersive);
+ rl.mListener.onFullscreenStateChanged(isFullscreen, true /* isImmersive */);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
index 9f8fe35dfbc9..a2e07b289e9d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
@@ -121,7 +121,7 @@ public interface SysuiStatusBarStateController extends StatusBarStateController
/**
* Set the fullscreen state
*/
- void setFullscreenState(boolean isFullscreen, boolean isImmersive);
+ void setFullscreenState(boolean isFullscreen);
/**
* Set pulsing
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
index d27a3d53c0a2..7d134057ee76 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
@@ -22,7 +22,8 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.Nullable;
import android.view.View;
-import android.view.WindowInsetsController;
+import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
@@ -52,7 +53,7 @@ public class LightsOutNotifController {
private final WindowManager mWindowManager;
/** @see android.view.WindowInsetsController#setSystemBarsAppearance(int) */
- @VisibleForTesting @WindowInsetsController.Appearance int mAppearance;
+ @VisibleForTesting @Appearance int mAppearance;
private int mDisplayId;
private View mLightsOutNotifView;
@@ -146,10 +147,9 @@ public class LightsOutNotifController {
private final CommandQueue.Callbacks mCallback = new CommandQueue.Callbacks() {
@Override
- public void onSystemBarAppearanceChanged(int displayId,
- @WindowInsetsController.Appearance int appearance,
- AppearanceRegion[] appearanceRegions,
- boolean navbarColorManagedByIme) {
+ public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
if (displayId != mDisplayId) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 8f2382486abd..c981477d8926 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -112,6 +112,7 @@ import android.view.ThreadedRenderer;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityManager;
@@ -444,9 +445,6 @@ public class StatusBar extends SystemUI implements DemoMode,
private boolean mTransientShown;
- private boolean mAppFullscreen;
- private boolean mAppImmersive;
-
private final DisplayMetrics mDisplayMetrics;
// XXX: gesture research
@@ -921,10 +919,8 @@ public class StatusBar extends SystemUI implements DemoMode,
if (containsType(result.mTransientBarTypes, ITYPE_STATUS_BAR)) {
showTransientUnchecked();
}
- onSystemBarAppearanceChanged(mDisplayId, result.mAppearance, result.mAppearanceRegions,
- result.mNavbarColorManagedByIme);
- mAppFullscreen = result.mAppFullscreen;
- mAppImmersive = result.mAppImmersive;
+ onSystemBarAttributesChanged(mDisplayId, result.mAppearance, result.mAppearanceRegions,
+ result.mNavbarColorManagedByIme, result.mBehavior, result.mAppFullscreen);
// StatusBarManagerService has a back up of IME token and it's restored here.
setImeWindowStatus(mDisplayId, result.mImeToken, result.mImeWindowVis,
@@ -2345,8 +2341,9 @@ public class StatusBar extends SystemUI implements DemoMode,
}
@Override
- public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
+ public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
if (displayId != mDisplayId) {
return;
}
@@ -2359,6 +2356,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mStatusBarMode, navbarColorManagedByIme);
updateBubblesVisibility();
+ mStatusBarStateController.setFullscreenState(isFullscreen);
}
@Override
@@ -2432,16 +2430,6 @@ public class StatusBar extends SystemUI implements DemoMode,
}
@Override
- public void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive) {
- if (displayId != mDisplayId) {
- return;
- }
- mAppFullscreen = isFullscreen;
- mAppImmersive = isImmersive;
- mStatusBarStateController.setFullscreenState(isFullscreen, isImmersive);
- }
-
- @Override
public void showWirelessChargingAnimation(int batteryLevel) {
showChargingAnimation(batteryLevel, UNKNOWN_BATTERY_LEVEL, 0);
}
@@ -2551,16 +2539,6 @@ public class StatusBar extends SystemUI implements DemoMode,
}
}
- /** Returns whether the top activity is in fullscreen mode. */
- public boolean inFullscreenMode() {
- return mAppFullscreen;
- }
-
- /** Returns whether the top activity is in immersive mode. */
- public boolean inImmersiveMode() {
- return mAppImmersive;
- }
-
public static String viewInfo(View v) {
return "[(" + v.getLeft() + "," + v.getTop() + ")(" + v.getRight() + "," + v.getBottom()
+ ") " + v.getWidth() + "x" + v.getHeight() + "]";
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index d2d57087485c..2917dfafd6a6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -17,6 +17,7 @@ package com.android.systemui.statusbar;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
+import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Matchers.eq;
@@ -30,6 +31,7 @@ import android.hardware.biometrics.IBiometricSysuiReceiver;
import android.hardware.biometrics.PromptInfo;
import android.os.Bundle;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import androidx.test.filters.SmallTest;
@@ -116,24 +118,27 @@ public class CommandQueueTest extends SysuiTestCase {
}
@Test
- public void testOnSystemBarAppearanceChanged() {
- doTestOnSystemBarAppearanceChanged(DEFAULT_DISPLAY, 1,
- new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false);
+ public void testOnSystemBarAttributesChanged() {
+ doTestOnSystemBarAttributesChanged(DEFAULT_DISPLAY, 1,
+ new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
+ BEHAVIOR_DEFAULT, false);
}
@Test
- public void testOnSystemBarAppearanceChangedForSecondaryDisplay() {
- doTestOnSystemBarAppearanceChanged(SECONDARY_DISPLAY, 1,
- new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false);
+ public void testOnSystemBarAttributesChangedForSecondaryDisplay() {
+ doTestOnSystemBarAttributesChanged(SECONDARY_DISPLAY, 1,
+ new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
+ BEHAVIOR_DEFAULT, false);
}
- private void doTestOnSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
- mCommandQueue.onSystemBarAppearanceChanged(displayId, appearance, appearanceRegions,
- navbarColorManagedByIme);
+ private void doTestOnSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
+ mCommandQueue.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
+ navbarColorManagedByIme, behavior, isFullscreen);
waitForIdleSync();
- verify(mCallbacks).onSystemBarAppearanceChanged(eq(displayId), eq(appearance),
- eq(appearanceRegions), eq(navbarColorManagedByIme));
+ verify(mCallbacks).onSystemBarAttributesChanged(eq(displayId), eq(appearance),
+ eq(appearanceRegions), eq(navbarColorManagedByIme), eq(behavior), eq(isFullscreen));
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
index dbb451277535..cdfab1eec609 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone;
import static android.service.notification.NotificationListenerService.REASON_CANCEL_ALL;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
+import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
@@ -95,21 +96,25 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
@Test
public void testAreLightsOut_lightsOut() {
- mCallbacks.onSystemBarAppearanceChanged(
+ mCallbacks.onSystemBarAttributesChanged(
mDisplayId /* display id */,
LIGHTS_OUT /* appearance */,
null /* appearanceRegions */,
- false /* navbarColorManagedByIme */);
+ false /* navbarColorManagedByIme */,
+ BEHAVIOR_DEFAULT,
+ false /* isFullscreen */);
assertTrue(mLightsOutNotifController.areLightsOut());
}
@Test
public void testAreLightsOut_lightsOn() {
- mCallbacks.onSystemBarAppearanceChanged(
+ mCallbacks.onSystemBarAttributesChanged(
mDisplayId /* display id */,
LIGHTS_ON /* appearance */,
null /* appearanceRegions */,
- false /* navbarColorManagedByIme */);
+ false /* navbarColorManagedByIme */,
+ BEHAVIOR_DEFAULT,
+ false /* isFullscreen */);
assertFalse(mLightsOutNotifController.areLightsOut());
}
@@ -128,16 +133,18 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
}
@Test
- public void testLightsOut_withNotifs_onSystemBarAppearanceChanged() {
+ public void testLightsOut_withNotifs_onSystemBarAttributesChanged() {
// GIVEN active visible notifications
when(mEntryManager.hasActiveNotifications()).thenReturn(true);
// WHEN lights out
- mCallbacks.onSystemBarAppearanceChanged(
+ mCallbacks.onSystemBarAttributesChanged(
mDisplayId /* display id */,
LIGHTS_OUT /* appearance */,
null /* appearanceRegions */,
- false /* navbarColorManagedByIme */);
+ false /* navbarColorManagedByIme */,
+ BEHAVIOR_DEFAULT,
+ false /* isFullscreen */);
// THEN we should show dot
assertTrue(mLightsOutNotifController.shouldShowDot());
@@ -145,16 +152,18 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
}
@Test
- public void testLightsOut_withoutNotifs_onSystemBarAppearanceChanged() {
+ public void testLightsOut_withoutNotifs_onSystemBarAttributesChanged() {
// GIVEN no active visible notifications
when(mEntryManager.hasActiveNotifications()).thenReturn(false);
// WHEN lights out
- mCallbacks.onSystemBarAppearanceChanged(
+ mCallbacks.onSystemBarAttributesChanged(
mDisplayId /* display id */,
LIGHTS_OUT /* appearance */,
null /* appearanceRegions */,
- false /* navbarColorManagedByIme */);
+ false /* navbarColorManagedByIme */,
+ BEHAVIOR_DEFAULT,
+ false /* isFullscreen */);
// THEN we shouldn't show the dot
assertFalse(mLightsOutNotifController.shouldShowDot());
@@ -162,16 +171,18 @@ public class LightsOutNotifControllerTest extends SysuiTestCase {
}
@Test
- public void testLightsOn_afterLightsOut_onSystemBarAppearanceChanged() {
+ public void testLightsOn_afterLightsOut_onSystemBarAttributesChanged() {
// GIVEN active visible notifications
when(mEntryManager.hasActiveNotifications()).thenReturn(true);
// WHEN lights on
- mCallbacks.onSystemBarAppearanceChanged(
+ mCallbacks.onSystemBarAttributesChanged(
mDisplayId /* display id */,
LIGHTS_ON /* appearance */,
null /* appearanceRegions */,
- false /* navbarColorManagedByIme */);
+ false /* navbarColorManagedByIme */,
+ BEHAVIOR_DEFAULT,
+ false /* isFullscreen */);
// THEN we shouldn't show the dot
assertFalse(mLightsOutNotifController.shouldShowDot());
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 00ab973b9c90..7523671fb3a7 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -23,6 +23,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import com.android.internal.view.AppearanceRegion;
import com.android.server.notification.NotificationDelegate;
@@ -84,7 +85,6 @@ public interface StatusBarManagerInternal {
void startAssist(Bundle args);
void onCameraLaunchGestureDetected(int source);
- void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive);
void setDisableFlags(int displayId, int flags, String cause);
void toggleSplitScreen();
void appTransitionFinished(int displayId);
@@ -128,9 +128,10 @@ public interface StatusBarManagerInternal {
*/
void onRecentsAnimationStateChanged(boolean running);
- /** @see com.android.internal.statusbar.IStatusBar#onSystemBarAppearanceChanged */
- void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme);
+ /** @see com.android.internal.statusbar.IStatusBar#onSystemBarAttributesChanged */
+ void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen);
/** @see com.android.internal.statusbar.IStatusBar#showTransient */
void showTransient(int displayId, @InternalInsetsType int[] types);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 3ee8dd7e9d81..6306c5cdd082 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -57,6 +57,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.view.InsetsState.InternalInsetsType;
import android.view.WindowInsetsController.Appearance;
+import android.view.WindowInsetsController.Behavior;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
@@ -302,11 +303,6 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
@Override
- public void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive) {
- StatusBarManagerService.this.topAppWindowChanged(displayId, isFullscreen, isImmersive);
- }
-
- @Override
public void setDisableFlags(int displayId, int flags, String cause) {
StatusBarManagerService.this.setDisableFlags(displayId, flags, cause);
}
@@ -521,16 +517,15 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
@Override
- public void onSystemBarAppearanceChanged(int displayId, @Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
- final UiState state = getUiState(displayId);
- if (!state.appearanceEquals(appearance, appearanceRegions, navbarColorManagedByIme)) {
- state.setAppearance(appearance, appearanceRegions, navbarColorManagedByIme);
- }
+ public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
+ getUiState(displayId).setBarAttributes(appearance, appearanceRegions,
+ navbarColorManagedByIme, behavior, isFullscreen);
if (mBar != null) {
try {
- mBar.onSystemBarAppearanceChanged(displayId, appearance, appearanceRegions,
- navbarColorManagedByIme);
+ mBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
+ navbarColorManagedByIme, behavior, isFullscreen);
} catch (RemoteException ex) { }
}
}
@@ -981,27 +976,6 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
}
- /**
- * Enables System UI to know whether the top app is fullscreen or not, and whether this app is
- * in immersive mode or not.
- */
- private void topAppWindowChanged(int displayId, boolean isFullscreen, boolean isImmersive) {
- enforceStatusBar();
-
- synchronized(mLock) {
- getUiState(displayId).setFullscreen(isFullscreen);
- getUiState(displayId).setImmersive(isImmersive);
- mHandler.post(() -> {
- if (mBar != null) {
- try {
- mBar.topAppWindowChanged(displayId, isFullscreen, isImmersive);
- } catch (RemoteException ex) {
- }
- }
- });
- }
- }
-
@Override
public void setImeWindowStatus(int displayId, final IBinder token, final int vis,
final int backDisposition, final boolean showImeSwitcher,
@@ -1068,8 +1042,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
private AppearanceRegion[] mAppearanceRegions = new AppearanceRegion[0];
private ArraySet<Integer> mTransientBarTypes = new ArraySet<>();
private boolean mNavbarColorManagedByIme = false;
+ private @Behavior int mBehavior;
private boolean mFullscreen = false;
- private boolean mImmersive = false;
private int mDisabled1 = 0;
private int mDisabled2 = 0;
private int mImeWindowVis = 0;
@@ -1077,25 +1051,14 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
private boolean mShowImeSwitcher = false;
private IBinder mImeToken = null;
- private void setAppearance(@Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
+ private void setBarAttributes(@Appearance int appearance,
+ AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
+ @Behavior int behavior, boolean isFullscreen) {
mAppearance = appearance;
mAppearanceRegions = appearanceRegions;
mNavbarColorManagedByIme = navbarColorManagedByIme;
- }
-
- private boolean appearanceEquals(@Appearance int appearance,
- AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme) {
- if (mAppearance != appearance || mAppearanceRegions.length != appearanceRegions.length
- || mNavbarColorManagedByIme != navbarColorManagedByIme) {
- return false;
- }
- for (int i = appearanceRegions.length - 1; i >= 0; i--) {
- if (!mAppearanceRegions[i].equals(appearanceRegions[i])) {
- return false;
- }
- }
- return true;
+ mBehavior = behavior;
+ mFullscreen = isFullscreen;
}
private void showTransient(@InternalInsetsType int[] types) {
@@ -1110,14 +1073,6 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
}
- private void setFullscreen(boolean isFullscreen) {
- mFullscreen = isFullscreen;
- }
-
- private void setImmersive(boolean isImmersive) {
- mImmersive = isImmersive;
- }
-
private int getDisabled1() {
return mDisabled1;
}
@@ -1200,7 +1155,7 @@ 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.mFullscreen, state.mImmersive,
+ state.mNavbarColorManagedByIme, state.mBehavior, state.mFullscreen,
transientBarTypes);
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index fb005b33f1e2..94630416fc7b 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -42,10 +42,6 @@ import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_STATUS_BARS;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
-import static android.view.WindowManager.INPUT_CONSUMER_NAVIGATION;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
@@ -121,7 +117,6 @@ import android.graphics.Insets;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Region;
-import android.hardware.input.InputManager;
import android.hardware.power.Boost;
import android.os.Handler;
import android.os.IBinder;
@@ -136,16 +131,10 @@ import android.util.Slog;
import android.util.SparseArray;
import android.view.DisplayCutout;
import android.view.Gravity;
-import android.view.InputChannel;
-import android.view.InputDevice;
-import android.view.InputEvent;
-import android.view.InputEventReceiver;
import android.view.InsetsFlags;
import android.view.InsetsSource;
import android.view.InsetsState;
import android.view.InsetsState.InternalInsetsType;
-import android.view.MotionEvent;
-import android.view.PointerIcon;
import android.view.Surface;
import android.view.View;
import android.view.ViewDebug;
@@ -334,7 +323,6 @@ public class DisplayPolicy {
// What we last reported to system UI about whether the focused window is fullscreen/immersive.
private boolean mLastFocusIsFullscreen = false;
- private boolean mLastFocusIsImmersive = false;
// If nonzero, a panic gesture was performed at that time in uptime millis and is still pending.
private long mPendingPanicGestureUptime;
@@ -363,9 +351,6 @@ public class DisplayPolicy {
private boolean mDreamingLockscreen;
private boolean mAllowLockscreenWhenOn;
- @VisibleForTesting
- EventReceiverInputConsumer mInputConsumer;
-
private PointerLocationView mPointerLocationView;
/**
@@ -1437,49 +1422,6 @@ public class DisplayPolicy {
return mForceShowSystemBars;
}
- /**
- * Input handler used while nav bar is hidden. Captures any touch on the screen,
- * to determine when the nav bar should be shown and prevent applications from
- * receiving those touches.
- */
- private final class HideNavInputEventReceiver extends InputEventReceiver {
- HideNavInputEventReceiver(InputChannel inputChannel, Looper looper) {
- super(inputChannel, looper);
- }
-
- @Override
- public void onInputEvent(InputEvent event) {
- try {
- if (event instanceof MotionEvent
- && (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- final MotionEvent motionEvent = (MotionEvent) event;
- if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
- // When the user taps down, we re-show the nav bar.
- boolean changed = false;
- synchronized (mLock) {
- if (mInputConsumer == null) {
- return;
- }
- showSystemBars();
- }
- }
- }
- } finally {
- finishInputEvent(event, false /* handled */);
- }
- }
-
- private void showSystemBars() {
- final InsetsSourceProvider provider = mDisplayContent.getInsetsStateController()
- .peekSourceProvider(ITYPE_NAVIGATION_BAR);
- final InsetsControlTarget target =
- provider != null ? provider.getControlTarget() : null;
- if (target != null) {
- target.showInsets(Type.systemBars(), false /* fromIme */);
- }
- }
- }
-
private void simulateLayoutDecorWindow(WindowState win, DisplayFrames displayFrames,
InsetsState insetsState, WindowFrames simulatedWindowFrames,
SparseArray<Rect> contentFrames, Consumer<Rect> layout) {
@@ -1529,48 +1471,10 @@ public class DisplayPolicy {
displayFrames.onBeginLayout(mDisplayContent.getInsetsStateController().getRawInsetsState());
mSystemGestures.screenWidth = displayFrames.mUnrestricted.width();
mSystemGestures.screenHeight = displayFrames.mUnrestricted.height();
-
- updateHideNavInputEventReceiver();
-
layoutNavigationBar(displayFrames, uiMode, null /* simulatedContentFrame */);
layoutStatusBar(displayFrames, null /* simulatedContentFrame */);
}
- void updateHideNavInputEventReceiver() {
- final InsetsSourceProvider provider = mDisplayContent.getInsetsStateController()
- .peekSourceProvider(ITYPE_NAVIGATION_BAR);
- final InsetsControlTarget navControlTarget =
- provider != null ? provider.getControlTarget() : null;
- final WindowState navControllingWin =
- navControlTarget instanceof WindowState ? (WindowState) navControlTarget : null;
- final boolean navVisible = navControllingWin != null
- ? navControllingWin.getRequestedVisibility(ITYPE_NAVIGATION_BAR)
- : InsetsState.getDefaultVisibility(ITYPE_NAVIGATION_BAR);
- final boolean showBarsByTouch = navControllingWin != null
- && navControllingWin.mAttrs.insetsFlags.behavior == BEHAVIOR_SHOW_BARS_BY_TOUCH;
- // 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
- // nav bar and ensure the application doesn't see the event.
- if (navVisible || !showBarsByTouch) {
- if (mInputConsumer != null) {
- mInputConsumer.dismiss();
- mHandler.sendMessage(
- mHandler.obtainMessage(MSG_DISPOSE_INPUT_CONSUMER, mInputConsumer));
- mInputConsumer = null;
- Slog.v(TAG, INPUT_CONSUMER_NAVIGATION + " dismissed.");
- }
- } else if (mInputConsumer == null && getStatusBar() != null && canHideNavigationBar()) {
- mInputConsumer = mDisplayContent.getInputMonitor().createInputConsumer(
- mHandler.getLooper(),
- INPUT_CONSUMER_NAVIGATION,
- HideNavInputEventReceiver::new);
- Slog.v(TAG, INPUT_CONSUMER_NAVIGATION + " created.");
- // As long as mInputConsumer is active, hover events are not dispatched to the app
- // and the pointer icon is likely to become stale. Hide it to avoid confusion.
- InputManager.getInstance().setPointerIconType(PointerIcon.TYPE_NULL);
- }
- }
-
private void layoutStatusBar(DisplayFrames displayFrames, Rect simulatedContentFrame) {
// decide where the status bar goes ahead of time
if (mStatusBar == null) {
@@ -2645,8 +2549,6 @@ public class DisplayPolicy {
mTopFullscreenOpaqueOrDimmingWindowState,
mDisplayContent.mInputMethodWindow, navColorWin) | opaqueAppearance;
final int behavior = win.mAttrs.insetsFlags.behavior;
- final boolean isImmersive = behavior == BEHAVIOR_SHOW_BARS_BY_SWIPE
- || behavior == BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
final boolean isFullscreen = !win.getRequestedVisibility(ITYPE_STATUS_BAR)
|| !win.getRequestedVisibility(ITYPE_NAVIGATION_BAR);
if (mLastDisableFlags == disableFlags
@@ -2655,7 +2557,6 @@ public class DisplayPolicy {
&& mLastDockedAppearance == dockedAppearance
&& mLastBehavior == behavior
&& mLastFocusIsFullscreen == isFullscreen
- && mLastFocusIsImmersive == isImmersive
&& mLastNonDockedStackBounds.equals(mNonDockedStackBounds)
&& mLastDockedStackBounds.equals(mDockedStackBounds)) {
return false;
@@ -2671,7 +2572,6 @@ public class DisplayPolicy {
mLastDockedAppearance = dockedAppearance;
mLastBehavior = behavior;
mLastFocusIsFullscreen = isFullscreen;
- mLastFocusIsImmersive = isImmersive;
mLastNonDockedStackBounds.set(mNonDockedStackBounds);
mLastDockedStackBounds.set(mDockedStackBounds);
final Rect fullscreenStackBounds = new Rect(mNonDockedStackBounds);
@@ -2688,9 +2588,8 @@ public class DisplayPolicy {
if (statusBar != null) {
final int displayId = getDisplayId();
statusBar.setDisableFlags(displayId, disableFlags, cause);
- statusBar.onSystemBarAppearanceChanged(displayId, appearance,
- appearanceRegions, isNavbarColorManagedByIme);
- statusBar.topAppWindowChanged(displayId, isFullscreen, isImmersive);
+ statusBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
+ isNavbarColorManagedByIme, behavior, isFullscreen);
}
});
@@ -2922,11 +2821,8 @@ public class DisplayPolicy {
if (win == null) {
return false;
}
- final int behavior = win.mAttrs.insetsFlags.behavior;
return getNavigationBar() != null
&& canHideNavigationBar()
- && (behavior == BEHAVIOR_SHOW_BARS_BY_SWIPE
- || behavior == BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE)
&& getInsetsPolicy().isHidden(ITYPE_NAVIGATION_BAR)
&& win != getNotificationShade()
&& !win.isActivityTypeDream();
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index 560547ed1a20..a20d924de058 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -19,7 +19,6 @@ package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.Display.INVALID_DISPLAY;
-import static android.view.WindowManager.INPUT_CONSUMER_NAVIGATION;
import static android.view.WindowManager.INPUT_CONSUMER_PIP;
import static android.view.WindowManager.INPUT_CONSUMER_RECENTS_ANIMATION;
import static android.view.WindowManager.INPUT_CONSUMER_WALLPAPER;
@@ -53,7 +52,6 @@ import android.graphics.Region;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
-import android.os.Process;
import android.os.Trace;
import android.os.UserHandle;
import android.util.ArrayMap;
@@ -232,24 +230,6 @@ final class InputMonitor {
}
}
- EventReceiverInputConsumer createInputConsumer(Looper looper, String name,
- InputEventReceiver.Factory inputEventReceiverFactory) {
- if (!name.contentEquals(INPUT_CONSUMER_NAVIGATION)) {
- throw new IllegalArgumentException("Illegal input consumer : " + name
- + ", display: " + mDisplayId);
- }
-
- if (mInputConsumers.containsKey(name)) {
- throw new IllegalStateException("Existing input consumer found with name: " + name
- + ", display: " + mDisplayId);
- }
- final EventReceiverInputConsumer consumer = new EventReceiverInputConsumer(mService,
- this, looper, name, inputEventReceiverFactory, Process.myPid(),
- UserHandle.SYSTEM, mDisplayId);
- addInputConsumer(name, consumer);
- return consumer;
- }
-
void createInputConsumer(IBinder token, String name, InputChannel inputChannel, int clientPid,
UserHandle clientUser) {
if (mInputConsumers.containsKey(name)) {
@@ -472,12 +452,10 @@ final class InputMonitor {
}
private final class UpdateInputForAllWindowsConsumer implements Consumer<WindowState> {
- InputConsumerImpl mNavInputConsumer;
InputConsumerImpl mPipInputConsumer;
InputConsumerImpl mWallpaperInputConsumer;
InputConsumerImpl mRecentsAnimationInputConsumer;
- private boolean mAddNavInputConsumerHandle;
private boolean mAddPipInputConsumerHandle;
private boolean mAddWallpaperInputConsumerHandle;
private boolean mAddRecentsAnimationInputConsumerHandle;
@@ -487,12 +465,10 @@ final class InputMonitor {
private void updateInputWindows(boolean inDrag) {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateInputWindows");
- mNavInputConsumer = getInputConsumer(INPUT_CONSUMER_NAVIGATION);
mPipInputConsumer = getInputConsumer(INPUT_CONSUMER_PIP);
mWallpaperInputConsumer = getInputConsumer(INPUT_CONSUMER_WALLPAPER);
mRecentsAnimationInputConsumer = getInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION);
- mAddNavInputConsumerHandle = mNavInputConsumer != null;
mAddPipInputConsumerHandle = mPipInputConsumer != null;
mAddWallpaperInputConsumerHandle = mWallpaperInputConsumer != null;
mAddRecentsAnimationInputConsumerHandle = mRecentsAnimationInputConsumer != null;
@@ -557,12 +533,6 @@ final class InputMonitor {
}
}
- if (mAddNavInputConsumerHandle) {
- // We set the layer to z=MAX-1 so that it's always on top.
- mNavInputConsumer.show(mInputTransaction, Integer.MAX_VALUE - 1);
- mAddNavInputConsumerHandle = false;
- }
-
if (mAddWallpaperInputConsumerHandle) {
if (w.mAttrs.type == TYPE_WALLPAPER && w.isVisible()) {
// Add the wallpaper input consumer above the first visible wallpaper.
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index ee150c31184c..94a7ebd37760 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -142,7 +142,6 @@ class InsetsPolicy {
getFakeControlTarget(focusedWin, navControlTarget));
mStatusBar.updateVisibility(statusControlTarget, ITYPE_STATUS_BAR);
mNavBar.updateVisibility(navControlTarget, ITYPE_NAVIGATION_BAR);
- mPolicy.updateHideNavInputEventReceiver();
}
boolean isHidden(@InternalInsetsType int type) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
index 79b2da187680..ec9073bcc354 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
@@ -22,8 +22,6 @@ import static android.view.Surface.ROTATION_0;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE;
-import static android.view.WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
@@ -32,13 +30,11 @@ import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_BOTTOM;
import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_RIGHT;
@@ -47,7 +43,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -293,46 +288,6 @@ public class DisplayPolicyTests extends WindowTestsBase {
return win;
}
- @UseTestDisplay(
- addWindows = { W_ACTIVITY, W_STATUS_BAR, W_NAVIGATION_BAR, W_NOTIFICATION_SHADE })
- @Test
- public void testUpdateHideNavInputEventReceiver() {
- final InsetsPolicy insetsPolicy = mDisplayContent.getInsetsPolicy();
- final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
- displayPolicy.addWindowLw(mStatusBarWindow, mStatusBarWindow.mAttrs);
- displayPolicy.addWindowLw(mNavBarWindow, mNavBarWindow.mAttrs);
- displayPolicy.addWindowLw(mNotificationShadeWindow, mNotificationShadeWindow.mAttrs);
- spyOn(displayPolicy);
- doReturn(true).when(displayPolicy).hasNavigationBar();
-
- // App doesn't request to hide navigation bar.
- insetsPolicy.updateBarControlTarget(mAppWindow);
- assertNull(displayPolicy.mInputConsumer);
-
- // App requests to hide navigation bar.
- final InsetsState requestedState = new InsetsState();
- requestedState.getSource(ITYPE_NAVIGATION_BAR).setVisible(false);
- mAppWindow.updateRequestedVisibility(requestedState);
- insetsPolicy.onInsetsModified(mAppWindow);
- assertNotNull(displayPolicy.mInputConsumer);
-
- // App still requests to hide navigation bar, but without BEHAVIOR_SHOW_BARS_BY_TOUCH.
- mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_BARS_BY_SWIPE;
- insetsPolicy.updateBarControlTarget(mAppWindow);
- assertNull(displayPolicy.mInputConsumer);
-
- // App still requests to hide navigation bar, but with BEHAVIOR_SHOW_BARS_BY_TOUCH.
- mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_BARS_BY_TOUCH;
- insetsPolicy.updateBarControlTarget(mAppWindow);
- assertNotNull(displayPolicy.mInputConsumer);
-
- // App still requests to hide navigation bar with BEHAVIOR_SHOW_BARS_BY_TOUCH,
- // but notification shade forcibly shows navigation bar
- mNotificationShadeWindow.mAttrs.privateFlags |= PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
- insetsPolicy.updateBarControlTarget(mAppWindow);
- assertNull(displayPolicy.mInputConsumer);
- }
-
@UseTestDisplay(addWindows = { W_NAVIGATION_BAR, W_INPUT_METHOD })
@Test
public void testImeMinimalSourceFrame() {
diff --git a/tests/WindowInsetsTests/res/values/strings.xml b/tests/WindowInsetsTests/res/values/strings.xml
index 1a236c6f751d..d6355f5a0464 100644
--- a/tests/WindowInsetsTests/res/values/strings.xml
+++ b/tests/WindowInsetsTests/res/values/strings.xml
@@ -23,7 +23,7 @@
<!-- The item positions should match the flag values respectively. -->
<string-array name="behaviors">
<item>BEHAVIOR_SHOW_BARS_BY_TOUCH</item>
- <item>BEHAVIOR_SHOW_BARS_BY_SWIPE</item>
+ <item>BEHAVIOR_DEFAULT</item>
<item>BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE</item>
</string-array>
</resources>
diff --git a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
index beb4049cb230..95fd959e5587 100644
--- a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
+++ b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
@@ -53,6 +53,8 @@ public class ControllerActivity extends Activity implements View.OnApplyWindowIn
R.array.behaviors, android.R.layout.simple_spinner_item);
adapterBehavior.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerBehavior.setAdapter(adapterBehavior);
+ spinnerBehavior.setSelection(
+ spinnerBehavior.getWindowInsetsController().getSystemBarsBehavior());
spinnerBehavior.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {