summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Christian Göllner <chrisgollner@google.com> 2022-07-29 15:22:06 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-07-29 15:22:06 +0000
commitfbb2c1876a5e15e5dbae31fee4dad8c70f9f2375 (patch)
tree21bdad7343cdbbf534eab6da8a58dee8417b35f1
parent33ea586e9c5bae8a1f51f396e839e15e6cc8cf8b (diff)
parentc0640e93803f8d1854ab4982b7a3ee6bfe282a2c (diff)
Merge "Create WM letterbox background color API" into tm-qpr-dev am: 8ac996fd0d am: c0640e9380
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19416409 Change-Id: If0e27f0f6d69290becfabf42666e925733cc79da Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--core/java/android/view/IWindowManager.aidl14
-rw-r--r--services/core/java/com/android/server/wm/LetterboxConfiguration.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java33
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java22
4 files changed, 70 insertions, 1 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 58a041aec894..8aa113dfc8e6 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -958,4 +958,18 @@ interface IWindowManager
* means the recents app can control the SystemUI flags, and vice-versa.
*/
void setRecentsAppBehindSystemBars(boolean behindSystemBars);
+
+ /**
+ * Gets the background color of the letterbox. Considered invalid if the background has
+ * multiple colors {@link #isLetterboxBackgroundMultiColored}. Should be called by SystemUI when
+ * computing the letterbox appearance for status bar treatment.
+ */
+ int getLetterboxBackgroundColorInArgb();
+
+ /**
+ * Whether the outer area of the letterbox has multiple colors (e.g. blurred background).
+ * Should be called by SystemUI when computing the letterbox appearance for status bar
+ * treatment.
+ */
+ boolean isLetterboxBackgroundMultiColored();
}
diff --git a/services/core/java/com/android/server/wm/LetterboxConfiguration.java b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
index 91b2fb63a543..57c60f4ffc33 100644
--- a/services/core/java/com/android/server/wm/LetterboxConfiguration.java
+++ b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
@@ -300,7 +300,7 @@ final class LetterboxConfiguration {
/**
* Gets color of letterbox background which is used when {@link
* #getLetterboxBackgroundType()} is {@link #LETTERBOX_BACKGROUND_SOLID_COLOR} or as
- * fallback for other backfround types.
+ * fallback for other background types.
*/
Color getLetterboxBackgroundColor() {
if (mLetterboxBackgroundColorOverride != null) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 889fb965d273..6527bbb67099 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -117,6 +117,10 @@ import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_W
import static com.android.server.wm.ActivityTaskManagerService.POWER_MODE_REASON_CHANGE_DISPLAY;
import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL;
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
@@ -9287,4 +9291,33 @@ public class WindowManagerService extends IWindowManager.Stub
Binder.restoreCallingIdentity(token);
}
}
+
+ /**
+ * Gets the background color of the letterbox. Considered invalid if the background has
+ * multiple colors {@link #isLetterboxBackgroundMultiColored}
+ */
+ @Override
+ public int getLetterboxBackgroundColorInArgb() {
+ return mLetterboxConfiguration.getLetterboxBackgroundColor().toArgb();
+ }
+
+ /**
+ * Whether the outer area of the letterbox has multiple colors (e.g. blurred background).
+ */
+ @Override
+ public boolean isLetterboxBackgroundMultiColored() {
+ @LetterboxConfiguration.LetterboxBackgroundType int letterboxBackgroundType =
+ mLetterboxConfiguration.getLetterboxBackgroundType();
+ switch (letterboxBackgroundType) {
+ case LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING:
+ case LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND:
+ case LETTERBOX_BACKGROUND_WALLPAPER:
+ return true;
+ case LETTERBOX_BACKGROUND_SOLID_COLOR:
+ return false;
+ default:
+ throw new AssertionError(
+ "Unexpected letterbox background type: " + letterboxBackgroundType);
+ }
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index c94c9fc6d3ec..05cc0cf14081 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -33,6 +33,10 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
import static com.google.common.truth.Truth.assertThat;
@@ -375,6 +379,18 @@ public class WindowManagerServiceTests extends WindowTestsBase {
assertThat(wct).isNull();
}
+ @Test
+ public void testisLetterboxBackgroundMultiColored() {
+ assertThat(setupLetterboxConfigurationWithBackgroundType(
+ LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING)).isTrue();
+ assertThat(setupLetterboxConfigurationWithBackgroundType(
+ LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND)).isTrue();
+ assertThat(setupLetterboxConfigurationWithBackgroundType(
+ LETTERBOX_BACKGROUND_WALLPAPER)).isTrue();
+ assertThat(setupLetterboxConfigurationWithBackgroundType(
+ LETTERBOX_BACKGROUND_SOLID_COLOR)).isFalse();
+ }
+
private void setupActivityWithLaunchCookie(IBinder launchCookie, WindowContainerToken wct) {
final WindowContainer.RemoteToken remoteToken = mock(WindowContainer.RemoteToken.class);
when(remoteToken.toWindowContainerToken()).thenReturn(wct);
@@ -384,4 +400,10 @@ public class WindowManagerServiceTests extends WindowTestsBase {
testActivity.mLaunchCookie = launchCookie;
testActivity.getTask().mRemoteToken = remoteToken;
}
+
+ private boolean setupLetterboxConfigurationWithBackgroundType(
+ @LetterboxConfiguration.LetterboxBackgroundType int letterboxBackgroundType) {
+ mWm.mLetterboxConfiguration.setLetterboxBackgroundType(letterboxBackgroundType);
+ return mWm.isLetterboxBackgroundMultiColored();
+ }
}