summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tarandeep Singh <tarandeep@google.com> 2019-04-22 12:28:43 -0700
committer Tarandeep Singh <tarandeep@google.com> 2019-04-30 14:41:23 -0700
commite439dec155be12865b49602146a89fa87f90fd73 (patch)
tree49ccf4874fc24e548f62818a03135aef6472610e
parent7f39f77d6c042dcb2889c7ab6db2daf3ca98c635 (diff)
Propagate light nav bar info
When SystemUI (notification UI) is pulled down, the windows behind are dimmed, including navigation bar. At this point of time, navigationbar color could be controlled by IME and system overrides it. With this fix, we check if IME is already controlling navbar color. Change-Id: I9f25860a5b7858f1d17d2921816910a938c656bb Fix: 122439339 Test: Manually verified using steps in bug.
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl4
-rw-r--r--core/java/com/android/internal/statusbar/RegisterStatusBarResult.java8
-rw-r--r--core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoHideControllerTest.java9
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java4
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java3
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java37
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java16
15 files changed, 117 insertions, 50 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index cfc32cf67016..7e501d27d30f 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -50,9 +50,11 @@ oneway interface IStatusBar
* @param mask which flags to change
* @param fullscreenBounds the current bounds of the fullscreen stack, in screen coordinates
* @param dockedBounds the current bounds of the docked stack, in screen coordinates
+ * @param navbarColorManagedByIme {@code true} if navigation bar color is managed by IME.
*/
void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis, int dockedStackVis,
- int mask, in Rect fullscreenBounds, in Rect dockedBounds);
+ int mask, in Rect fullscreenBounds, in Rect dockedBounds,
+ boolean navbarColorManagedByIme);
void topAppWindowChanged(int displayId, boolean menuVisible);
void setImeWindowStatus(int displayId, in IBinder token, int vis, int backDisposition,
diff --git a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
index ff94264d9b90..6b0f8b2f5dc9 100644
--- a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
+++ b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
@@ -39,12 +39,13 @@ public final class RegisterStatusBarResult implements Parcelable {
public final IBinder mImeToken;
public final Rect mFullscreenStackBounds;
public final Rect mDockedStackBounds;
+ public final boolean mNavbarColorManagedByIme;
public RegisterStatusBarResult(ArrayMap<String, StatusBarIcon> icons, int disabledFlags1,
int systemUiVisibility, boolean menuVisible, int imeWindowVis, int imeBackDisposition,
boolean showImeSwitcher, int disabledFlags2, int fullscreenStackSysUiVisibility,
int dockedStackSysUiVisibility, IBinder imeToken, Rect fullscreenStackBounds,
- Rect dockedStackBounds) {
+ Rect dockedStackBounds, boolean navbarColorManagedByIme) {
mIcons = new ArrayMap<>(icons);
mDisabledFlags1 = disabledFlags1;
mSystemUiVisibility = systemUiVisibility;
@@ -58,6 +59,7 @@ public final class RegisterStatusBarResult implements Parcelable {
mImeToken = imeToken;
mFullscreenStackBounds = fullscreenStackBounds;
mDockedStackBounds = dockedStackBounds;
+ mNavbarColorManagedByIme = navbarColorManagedByIme;
}
@Override
@@ -80,6 +82,7 @@ public final class RegisterStatusBarResult implements Parcelable {
dest.writeStrongBinder(mImeToken);
dest.writeTypedObject(mFullscreenStackBounds, flags);
dest.writeTypedObject(mDockedStackBounds, flags);
+ dest.writeBoolean(mNavbarColorManagedByIme);
}
/**
@@ -103,11 +106,12 @@ public final class RegisterStatusBarResult implements Parcelable {
final IBinder imeToken = source.readStrongBinder();
final Rect fullscreenStackBounds = source.readTypedObject(Rect.CREATOR);
final Rect dockedStackBounds = source.readTypedObject(Rect.CREATOR);
+ final boolean navbarColorManagedByIme = source.readBoolean();
return new RegisterStatusBarResult(icons, disabledFlags1, systemUiVisibility,
menuVisible, imeWindowVis, imeBackDisposition, showImeSwitcher,
disabledFlags2, fullscreenStackSysUiVisibility,
dockedStackSysUiVisibility, imeToken, fullscreenStackBounds,
- dockedStackBounds);
+ dockedStackBounds, navbarColorManagedByIme);
}
@Override
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 3cb1e187fef1..b93c3a7a17e2 100644
--- a/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
+++ b/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
@@ -57,7 +57,8 @@ public class RegisterStatusBarResultTest {
0x80 /* dockedStackSysUiVisibility */,
new Binder() /* imeToken */,
new Rect(0x100, 0x200, 0x400, 0x800) /* fullscreenStackBounds */,
- new Rect(0x1000, 0x2000, 0x4000, 0x8000) /* dockedStackBounds */);
+ new Rect(0x1000, 0x2000, 0x4000, 0x8000) /* dockedStackBounds */,
+ true /* navbarColorManagedByIme */);
final RegisterStatusBarResult copy = clone(original);
@@ -80,6 +81,7 @@ public class RegisterStatusBarResultTest {
assertThat(copy.mImeToken).isSameAs(original.mImeToken);
assertThat(copy.mFullscreenStackBounds).isEqualTo(original.mFullscreenStackBounds);
assertThat(copy.mDockedStackBounds).isEqualTo(original.mDockedStackBounds);
+ assertThat(copy.mNavbarColorManagedByIme).isEqualTo(original.mNavbarColorManagedByIme);
}
private RegisterStatusBarResult clone(RegisterStatusBarResult original) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index a688f36b47a6..9f8ab61306e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -175,9 +175,11 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
* @param fullscreenStackBounds The current bounds of the fullscreen stack, in screen
* coordinates.
* @param dockedStackBounds The current bounds of the docked stack, in screen coordinates.
+ * @param navbarColorManagedByIme {@code true} if navigation bar color is managed by IME.
*/
default void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
+ boolean navbarColorManagedByIme) {
}
/**
@@ -459,7 +461,8 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
@Override
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
+ boolean navbarColorManagedByIme) {
synchronized (mLock) {
// Don't coalesce these, since it might have one time flags set such as
// STATUS_BAR_UNHIDE which might get lost.
@@ -469,6 +472,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
args.argi3 = fullscreenStackVis;
args.argi4 = dockedStackVis;
args.argi5 = mask;
+ args.argi6 = navbarColorManagedByIme ? 1 : 0;
args.arg1 = fullscreenStackBounds;
args.arg2 = dockedStackBounds;
mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, args).sendToTarget();
@@ -879,7 +883,8 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
mCallbacks.get(i).setSystemUiVisibility(args.argi1, args.argi2, args.argi3,
- args.argi4, args.argi5, (Rect) args.arg1, (Rect) args.arg2);
+ args.argi4, args.argi5, (Rect) args.arg1, (Rect) args.arg2,
+ args.argi6 == 1);
}
args.recycle();
break;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
index fdf8ccee3f62..5912cd7b6433 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java
@@ -95,7 +95,8 @@ public class AutoHideController implements CommandQueue.Callbacks {
@Override
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
+ boolean navbarColorManagedByIme) {
if (displayId != mDisplayId) {
return;
}
@@ -119,7 +120,7 @@ public class AutoHideController implements CommandQueue.Callbacks {
if (mSystemUiVisibility != newVal) {
mCommandQueue.setSystemUiVisibility(mDisplayId, mSystemUiVisibility,
fullscreenStackVis, dockedStackVis, mask, fullscreenStackBounds,
- dockedStackBounds);
+ dockedStackBounds, navbarColorManagedByIme);
}
notifySystemUiVisibilityChanged(mSystemUiVisibility);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
index b590ca7f4df0..b0b656a1a951 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -79,6 +79,9 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
private final Rect mLastDockedBounds = new Rect();
private boolean mQsCustomizing;
+ private boolean mDirectReplying;
+ private boolean mNavbarColorManagedByIme;
+
@Inject
public LightBarController(Context ctx, DarkIconDispatcher darkIconDispatcher,
BatteryController batteryController) {
@@ -100,7 +103,7 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
public void onSystemUiVisibilityChanged(int fullscreenStackVis, int dockedStackVis,
int mask, Rect fullscreenStackBounds, Rect dockedStackBounds, boolean sbModeChanged,
- int statusBarMode) {
+ int statusBarMode, boolean navbarColorManagedByIme) {
int oldFullscreen = mFullscreenStackVisibility;
int newFullscreen = (oldFullscreen & ~mask) | (fullscreenStackVis & mask);
int diffFullscreen = newFullscreen ^ oldFullscreen;
@@ -122,12 +125,13 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
mFullscreenStackVisibility = newFullscreen;
mDockedStackVisibility = newDocked;
mLastStatusBarMode = statusBarMode;
+ mNavbarColorManagedByIme = navbarColorManagedByIme;
mLastFullscreenBounds.set(fullscreenStackBounds);
mLastDockedBounds.set(dockedStackBounds);
}
public void onNavigationVisibilityChanged(int vis, int mask, boolean nbModeChanged,
- int navigationBarMode) {
+ int navigationBarMode, boolean navbarColorManagedByIme) {
int oldVis = mSystemUiVisibility;
int newVis = (oldVis & ~mask) | (vis & mask);
int diffVis = newVis ^ oldVis;
@@ -136,21 +140,24 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
boolean last = mNavigationLight;
mHasLightNavigationBar = isLight(vis, navigationBarMode,
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
- mNavigationLight = mHasLightNavigationBar && !mForceDarkForScrim && !mQsCustomizing;
+ mNavigationLight = mHasLightNavigationBar
+ && (mDirectReplying && mNavbarColorManagedByIme || !mForceDarkForScrim)
+ && !mQsCustomizing;
if (mNavigationLight != last) {
updateNavigation();
}
}
mSystemUiVisibility = newVis;
mLastNavigationBarMode = navigationBarMode;
+ mNavbarColorManagedByIme = navbarColorManagedByIme;
}
private void reevaluate() {
onSystemUiVisibilityChanged(mFullscreenStackVisibility,
mDockedStackVisibility, 0 /* mask */, mLastFullscreenBounds, mLastDockedBounds,
- true /* sbModeChange*/, mLastStatusBarMode);
+ true /* sbModeChange*/, mLastStatusBarMode, mNavbarColorManagedByIme);
onNavigationVisibilityChanged(mSystemUiVisibility, 0 /* mask */, true /* nbModeChanged */,
- mLastNavigationBarMode);
+ mLastNavigationBarMode, mNavbarColorManagedByIme);
}
public void setQsCustomizing(boolean customizing) {
@@ -159,6 +166,16 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
reevaluate();
}
+ /**
+ * Sets whether the direct-reply is in use or not.
+ * @param directReplying {@code true} when the direct-reply is in-use.
+ */
+ public void setDirectReplying(boolean directReplying) {
+ if (mDirectReplying == directReplying) return;
+ mDirectReplying = directReplying;
+ reevaluate();
+ }
+
public void setScrimState(ScrimState scrimState, float scrimBehindAlpha,
GradientColors scrimInFrontColor) {
boolean forceDarkForScrimLast = mForceDarkForScrim;
@@ -260,7 +277,9 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
pw.print(" mLastNavigationBarMode="); pw.println(mLastNavigationBarMode);
pw.print(" mForceDarkForScrim="); pw.print(mForceDarkForScrim);
- pw.print(" mQsCustomizing="); pw.println(mQsCustomizing);
+ pw.print(" mQsCustomizing="); pw.print(mQsCustomizing);
+ pw.print(" mDirectReplying="); pw.println(mDirectReplying);
+ pw.print(" mNavbarColorManagedByIme="); pw.println(mNavbarColorManagedByIme);
pw.println();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index de57066d80ba..514cb412c456 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -512,12 +512,13 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
mAutoHideController.touchAutoHide();
mLightBarController.onNavigationVisibilityChanged(mSystemUiVisibility, 0 /* mask */,
- true /* nbModeChanged */, mNavigationBarMode);
+ true /* nbModeChanged */, mNavigationBarMode, false /* navbarColorManagedByIme */);
}
@Override
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
+ boolean navbarColorManagedByIme) {
if (displayId != mDisplayId) {
return;
}
@@ -545,7 +546,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
}
}
mLightBarController.onNavigationVisibilityChanged(
- vis, mask, nbModeChanged, mNavigationBarMode);
+ vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme);
}
private @TransitionMode int computeBarMode(int oldVis, int newVis) {
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 2babfe3ca544..761bc8b5385b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -710,7 +710,8 @@ public class StatusBar extends SystemUI implements DemoMode,
setSystemUiVisibility(mDisplayId, result.mSystemUiVisibility,
result.mFullscreenStackSysUiVisibility, result.mDockedStackSysUiVisibility,
- 0xffffffff, result.mFullscreenStackBounds, result.mDockedStackBounds);
+ 0xffffffff, result.mFullscreenStackBounds, result.mDockedStackBounds,
+ result.mNavbarColorManagedByIme);
topAppWindowChanged(mDisplayId, result.mMenuVisible);
// StatusBarManagerService has a back up of IME token and it's restored here.
setImeWindowStatus(mDisplayId, result.mImeToken, result.mImeWindowVis,
@@ -2089,7 +2090,8 @@ public class StatusBar extends SystemUI implements DemoMode,
@Override // CommandQueue
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
+ boolean navbarColorManagedByIme) {
if (displayId != mDisplayId) {
return;
}
@@ -2126,7 +2128,8 @@ public class StatusBar extends SystemUI implements DemoMode,
}
}
mLightBarController.onSystemUiVisibilityChanged(fullscreenStackVis, dockedStackVis,
- mask, fullscreenStackBounds, dockedStackBounds, sbModeChanged, mStatusBarMode);
+ mask, fullscreenStackBounds, dockedStackBounds, sbModeChanged, mStatusBarMode,
+ navbarColorManagedByIme);
}
@Override
@@ -2247,11 +2250,12 @@ public class StatusBar extends SystemUI implements DemoMode,
Log.v(TAG, "setLightsOn(" + on + ")");
if (on) {
setSystemUiVisibility(mDisplayId, 0, 0, 0, View.SYSTEM_UI_FLAG_LOW_PROFILE,
- mLastFullscreenStackBounds, mLastDockedStackBounds);
+ mLastFullscreenStackBounds, mLastDockedStackBounds,
+ false /* navbarColorManagedByIme */);
} else {
setSystemUiVisibility(mDisplayId, View.SYSTEM_UI_FLAG_LOW_PROFILE, 0, 0,
View.SYSTEM_UI_FLAG_LOW_PROFILE, mLastFullscreenStackBounds,
- mLastDockedStackBounds);
+ mLastDockedStackBounds, false /* navbarColorManagedByIme */);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index c1950a21d10f..43795dc08c91 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -63,6 +63,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry.EditedSuggestionInfo;
import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
+import com.android.systemui.statusbar.phone.LightBarController;
import java.util.function.Consumer;
@@ -516,10 +517,12 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private final Drawable mBackground;
private RemoteInputView mRemoteInputView;
boolean mShowImeOnInputConnection;
+ private LightBarController mLightBarController;
public RemoteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mBackground = getBackground();
+ mLightBarController = Dependency.get(LightBarController.class);
}
private void defocusIfNeeded(boolean animate) {
@@ -558,6 +561,9 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
if (!focused) {
defocusIfNeeded(true /* animate */);
}
+ if (!mRemoteInputView.mRemoved) {
+ mLightBarController.setDirectReplying(focused);
+ }
}
@Override
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 c2f55e2f9b99..2bde5f678c3b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -112,19 +112,19 @@ public class CommandQueueTest extends SysuiTestCase {
@Test
public void testSetSystemUiVisibility() {
Rect r = new Rect();
- mCommandQueue.setSystemUiVisibility(DEFAULT_DISPLAY, 1, 2, 3, 4, null, r);
+ mCommandQueue.setSystemUiVisibility(DEFAULT_DISPLAY, 1, 2, 3, 4, null, r, false);
waitForIdleSync();
verify(mCallbacks).setSystemUiVisibility(eq(DEFAULT_DISPLAY), eq(1), eq(2), eq(3), eq(4),
- eq(null), eq(r));
+ eq(null), eq(r), eq(false));
}
@Test
public void testSetSystemUiVisibilityForSecondaryDisplay() {
Rect r = new Rect();
- mCommandQueue.setSystemUiVisibility(SECONDARY_DISPLAY, 1, 2, 3, 4, null, r);
+ mCommandQueue.setSystemUiVisibility(SECONDARY_DISPLAY, 1, 2, 3, 4, null, r, false);
waitForIdleSync();
verify(mCallbacks).setSystemUiVisibility(eq(SECONDARY_DISPLAY), eq(1), eq(2), eq(3), eq(4),
- eq(null), eq(r));
+ eq(null), eq(r), eq(false));
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoHideControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoHideControllerTest.java
index 1b34a7584994..f614354a7691 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoHideControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoHideControllerTest.java
@@ -70,7 +70,7 @@ public class AutoHideControllerTest extends SysuiTestCase {
@Test
public void testSetSystemUiVisibilityEarlyReturnWithDifferentDisplay() {
- mAutoHideController.setSystemUiVisibility(1, 1, 2, 3, 4, null, new Rect());
+ mAutoHideController.setSystemUiVisibility(1, 1, 2, 3, 4, null, new Rect(), false);
verify(mAutoHideController, never()).notifySystemUiVisibilityChanged(anyInt());
}
@@ -78,7 +78,8 @@ public class AutoHideControllerTest extends SysuiTestCase {
@Test
public void testSetSystemUiVisibilityEarlyReturnWithSameVisibility() {
mAutoHideController
- .setSystemUiVisibility(DEFAULT_DISPLAY, View.VISIBLE, 2, 3, 4, null, new Rect());
+ .setSystemUiVisibility(
+ DEFAULT_DISPLAY, View.VISIBLE, 2, 3, 4, null, new Rect(), false);
verify(mAutoHideController, never()).notifySystemUiVisibilityChanged(anyInt());
}
@@ -92,7 +93,7 @@ public class AutoHideControllerTest extends SysuiTestCase {
View.SYSTEM_UI_FLAG_FULLSCREEN | View.STATUS_BAR_UNHIDE;
mAutoHideController.setSystemUiVisibility(
- DEFAULT_DISPLAY, expectedStatus, 2, 3, FULL_MASK, null, new Rect());
+ DEFAULT_DISPLAY, expectedStatus, 2, 3, FULL_MASK, null, new Rect(), false);
assertEquals("System UI visibility should not be changed",
expectedStatus, mAutoHideController.mSystemUiVisibility);
@@ -109,7 +110,7 @@ public class AutoHideControllerTest extends SysuiTestCase {
mAutoHideController.setSystemUiVisibility(
DEFAULT_DISPLAY, View.STATUS_BAR_UNHIDE | View.NAVIGATION_BAR_UNHIDE,
- 2, 3, FULL_MASK, null, new Rect());
+ 2, 3, FULL_MASK, null, new Rect(), false);
int expectedStatus = View.VISIBLE;
assertEquals(expectedStatus, mAutoHideController.mSystemUiVisibility);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
index 8bf1606d5b7b..bc468bf2fb82 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
@@ -42,6 +42,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
+import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.util.Assert;
import org.junit.After;
@@ -67,6 +68,7 @@ public class RemoteInputViewTest extends SysuiTestCase {
@Mock private RemoteInputController mController;
@Mock private ShortcutManager mShortcutManager;
@Mock private RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
+ @Mock private LightBarController mLightBarController;
private BlockingQueueIntentReceiver mReceiver;
private RemoteInputView mView;
@@ -77,6 +79,8 @@ public class RemoteInputViewTest extends SysuiTestCase {
mDependency.injectTestDependency(RemoteInputQuickSettingsDisabler.class,
mRemoteInputQuickSettingsDisabler);
+ mDependency.injectTestDependency(LightBarController.class,
+ mLightBarController);
mReceiver = new BlockingQueueIntentReceiver();
mContext.registerReceiver(mReceiver, new IntentFilter(TEST_ACTION), null,
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index b9b5aae03587..7734d6bd30a7 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -77,7 +77,8 @@ public interface StatusBarManagerInternal {
void onCameraLaunchGestureDetected(int source);
void topAppWindowChanged(int displayId, boolean menuVisible);
void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis, int dockedStackVis,
- int mask, Rect fullscreenBounds, Rect dockedBounds, String cause);
+ int mask, Rect fullscreenBounds, Rect dockedBounds, boolean isNavbarColorManagedByIme,
+ String cause);
void toggleSplitScreen();
void appTransitionFinished(int displayId);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index a5656c3e40f0..b2d7084fcd05 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -262,9 +262,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
@Override
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
int dockedStackVis, int mask, Rect fullscreenBounds, Rect dockedBounds,
- String cause) {
+ boolean isNavbarColorManagedByIme, String cause) {
StatusBarManagerService.this.setSystemUiVisibility(displayId, vis, fullscreenStackVis,
- dockedStackVis, mask, fullscreenBounds, dockedBounds, cause);
+ dockedStackVis, mask, fullscreenBounds, dockedBounds, isNavbarColorManagedByIme,
+ cause);
}
@Override
@@ -872,11 +873,13 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
public void setSystemUiVisibility(int displayId, int vis, int mask, String cause) {
final UiState state = getUiState(displayId);
setSystemUiVisibility(displayId, vis, 0, 0, mask,
- state.mFullscreenStackBounds, state.mDockedStackBounds, cause);
+ state.mFullscreenStackBounds, state.mDockedStackBounds,
+ state.mNavbarColorManagedByIme, cause);
}
private void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
- int dockedStackVis, int mask, Rect fullscreenBounds, Rect dockedBounds, String cause) {
+ int dockedStackVis, int mask, Rect fullscreenBounds, Rect dockedBounds,
+ boolean isNavbarColorManagedByIme, String cause) {
// also allows calls from window manager which is in this process.
enforceStatusBarService();
@@ -884,7 +887,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
synchronized (mLock) {
updateUiVisibilityLocked(displayId, vis, fullscreenStackVis, dockedStackVis, mask,
- fullscreenBounds, dockedBounds);
+ fullscreenBounds, dockedBounds, isNavbarColorManagedByIme);
disableLocked(
displayId,
mCurrentUserId,
@@ -896,17 +899,19 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
private void updateUiVisibilityLocked(final int displayId, final int vis,
final int fullscreenStackVis, final int dockedStackVis, final int mask,
- final Rect fullscreenBounds, final Rect dockedBounds) {
+ final Rect fullscreenBounds, final Rect dockedBounds,
+ final boolean isNavbarColorManagedByIme) {
final UiState state = getUiState(displayId);
if (!state.systemUiStateEquals(vis, fullscreenStackVis, dockedStackVis,
- fullscreenBounds, dockedBounds)) {
+ fullscreenBounds, dockedBounds, isNavbarColorManagedByIme)) {
state.setSystemUiState(vis, fullscreenStackVis, dockedStackVis, fullscreenBounds,
- dockedBounds);
+ dockedBounds, isNavbarColorManagedByIme);
mHandler.post(() -> {
if (mBar != null) {
try {
mBar.setSystemUiVisibility(displayId, vis, fullscreenStackVis,
- dockedStackVis, mask, fullscreenBounds, dockedBounds);
+ dockedStackVis, mask, fullscreenBounds, dockedBounds,
+ isNavbarColorManagedByIme);
} catch (RemoteException ex) {
Log.w(TAG, "Can not get StatusBar!");
}
@@ -945,6 +950,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
private int mImeBackDisposition = 0;
private boolean mShowImeSwitcher = false;
private IBinder mImeToken = null;
+ private boolean mNavbarColorManagedByIme = false;
private int getDisabled1() {
return mDisabled1;
@@ -972,21 +978,25 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
private void setSystemUiState(final int vis, final int fullscreenStackVis,
- final int dockedStackVis, final Rect fullscreenBounds, final Rect dockedBounds) {
+ final int dockedStackVis, final Rect fullscreenBounds, final Rect dockedBounds,
+ final boolean navbarColorManagedByIme) {
mSystemUiVisibility = vis;
mFullscreenStackSysUiVisibility = fullscreenStackVis;
mDockedStackSysUiVisibility = dockedStackVis;
mFullscreenStackBounds.set(fullscreenBounds);
mDockedStackBounds.set(dockedBounds);
+ mNavbarColorManagedByIme = navbarColorManagedByIme;
}
private boolean systemUiStateEquals(final int vis, final int fullscreenStackVis,
- final int dockedStackVis, final Rect fullscreenBounds, final Rect dockedBounds) {
+ final int dockedStackVis, final Rect fullscreenBounds, final Rect dockedBounds,
+ final boolean navbarColorManagedByIme) {
return mSystemUiVisibility == vis
&& mFullscreenStackSysUiVisibility == fullscreenStackVis
&& mDockedStackSysUiVisibility == dockedStackVis
&& mFullscreenStackBounds.equals(fullscreenBounds)
- && mDockedStackBounds.equals(dockedBounds);
+ && mDockedStackBounds.equals(dockedBounds)
+ && mNavbarColorManagedByIme == navbarColorManagedByIme;
}
private void setImeWindowState(final int vis, final int backDisposition,
@@ -1051,7 +1061,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
state.mImeBackDisposition, state.mShowImeSwitcher,
gatherDisableActionsLocked(mCurrentUserId, 2),
state.mFullscreenStackSysUiVisibility, state.mDockedStackSysUiVisibility,
- state.mImeToken, state.mFullscreenStackBounds, state.mDockedStackBounds);
+ state.mImeToken, state.mFullscreenStackBounds, state.mDockedStackBounds,
+ state.mNavbarColorManagedByIme);
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 3bb365338749..32d0b32956cf 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -112,7 +112,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Px;
import android.app.ActivityManager;
-import android.app.ActivityManagerInternal;
import android.app.ActivityThread;
import android.app.LoadedApk;
import android.app.ResourcesManager;
@@ -133,6 +132,7 @@ import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.ArraySet;
+import android.util.Pair;
import android.util.PrintWriterPrinter;
import android.util.Slog;
import android.view.DisplayCutout;
@@ -3113,7 +3113,9 @@ public class DisplayPolicy {
WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mNonDockedStackBounds);
mService.getStackBounds(
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, mDockedStackBounds);
- final int visibility = updateSystemBarsLw(win, mLastSystemUiFlags, tmpVisibility);
+ final Pair<Integer, Boolean> result =
+ updateSystemBarsLw(win, mLastSystemUiFlags, tmpVisibility);
+ final int visibility = result.first;
final int diff = visibility ^ mLastSystemUiFlags;
final int fullscreenDiff = fullscreenVisibility ^ mLastFullscreenStackSysUiFlags;
final int dockedDiff = dockedVisibility ^ mLastDockedStackSysUiFlags;
@@ -3133,13 +3135,14 @@ public class DisplayPolicy {
mLastDockedStackBounds.set(mDockedStackBounds);
final Rect fullscreenStackBounds = new Rect(mNonDockedStackBounds);
final Rect dockedStackBounds = new Rect(mDockedStackBounds);
+ final boolean isNavbarColorManagedByIme = result.second;
mHandler.post(() -> {
StatusBarManagerInternal statusBar = getStatusBarManagerInternal();
if (statusBar != null) {
final int displayId = getDisplayId();
statusBar.setSystemUiVisibility(displayId, visibility, fullscreenVisibility,
dockedVisibility, 0xffffffff, fullscreenStackBounds,
- dockedStackBounds, win.toString());
+ dockedStackBounds, isNavbarColorManagedByIme, win.toString());
statusBar.topAppWindowChanged(displayId, needsMenu);
}
});
@@ -3222,7 +3225,7 @@ public class DisplayPolicy {
return vis;
}
- private int updateSystemBarsLw(WindowState win, int oldVis, int vis) {
+ private Pair<Integer, Boolean> updateSystemBarsLw(WindowState win, int oldVis, int vis) {
final boolean dockedStackVisible =
mDisplayContent.isStackVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
final boolean freeformStackVisible =
@@ -3355,8 +3358,11 @@ public class DisplayPolicy {
vis = updateLightNavigationBarLw(vis, mTopFullscreenOpaqueWindowState,
mTopFullscreenOpaqueOrDimmingWindowState,
mDisplayContent.mInputMethodWindow, navColorWin);
+ // Navbar color is controlled by the IME.
+ final boolean isManagedByIme =
+ navColorWin != null && navColorWin == mDisplayContent.mInputMethodWindow;
- return vis;
+ return Pair.create(vis, isManagedByIme);
}
private boolean drawsBarBackground(int vis, WindowState win, BarController controller,