diff options
| author | 2022-07-29 15:22:06 +0000 | |
|---|---|---|
| committer | 2022-07-29 15:22:06 +0000 | |
| commit | fbb2c1876a5e15e5dbae31fee4dad8c70f9f2375 (patch) | |
| tree | 21bdad7343cdbbf534eab6da8a58dee8417b35f1 | |
| parent | 33ea586e9c5bae8a1f51f396e839e15e6cc8cf8b (diff) | |
| parent | c0640e93803f8d1854ab4982b7a3ee6bfe282a2c (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>
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(); + } } |