diff options
| author | 2024-11-01 14:50:11 +0000 | |
|---|---|---|
| committer | 2024-11-01 14:50:11 +0000 | |
| commit | d276eb1b5c5c95df9bc9c258c491373bea1f35f1 (patch) | |
| tree | 2dcf54b6952a637209aa7d256f33a666566bd48d | |
| parent | bdaf3afbc2bc36a9266ea477d256425c0b7d29a4 (diff) | |
| parent | a6b4e3d623fe06a79c38826ebb73679896a87657 (diff) | |
Merge "Fix exit transition from PIP" into main
3 files changed, 21 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/TransparentPolicy.java b/services/core/java/com/android/server/wm/TransparentPolicy.java index 85a118db36eb..edd99243c3ef 100644 --- a/services/core/java/com/android/server/wm/TransparentPolicy.java +++ b/services/core/java/com/android/server/wm/TransparentPolicy.java @@ -196,10 +196,11 @@ class TransparentPolicy { // We evaluate the case when the policy should not be applied. private boolean shouldSkipTransparentPolicy(@Nullable ActivityRecord opaqueActivity) { - if (opaqueActivity == null || opaqueActivity.isEmbedded()) { + if (opaqueActivity == null || opaqueActivity.isEmbedded() + || !opaqueActivity.areBoundsLetterboxed()) { // We skip letterboxing if the translucent activity doesn't have any // opaque activities beneath or the activity below is embedded which - // never has letterbox. + // never has letterbox or the activity is not letterboxed at all. return true; } final AppCompatSizeCompatModePolicy scmPolicy = mActivityRecord.mAppCompatController diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java index b8cfa7c39464..00c9691835db 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java @@ -259,6 +259,10 @@ class AppCompatActivityRobot { doReturn(embedded).when(mActivityStack.top()).isEmbedded(); } + void setTopActivityHasLetterboxedBounds(boolean letterboxed) { + doReturn(letterboxed).when(mActivityStack.top()).areBoundsLetterboxed(); + } + void setTopActivityVisible(boolean isVisible) { doReturn(isVisible).when(mActivityStack.top()).isVisible(); } diff --git a/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java index 5187f87cd6db..42752c326615 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java @@ -217,6 +217,19 @@ public class TransparentPolicyTest extends WindowTestsBase { }); } + @Test + public void testNotApplyStrategyToTranslucentActivitiesOverNotLetterboxedActivities() { + runTestScenario((robot) -> { + robot.transparentActivity((ta) -> { + ta.activity().setTopActivityHasLetterboxedBounds(false); + ta.launchTransparentActivityInTask(); + + ta.checkTopActivityTransparentPolicyStartNotInvoked(); + ta.checkTopActivityTransparentPolicyStateIsRunning(/* running */ false); + }); + }); + } + @EnableFlags(com.android.window.flags.Flags.FLAG_RESPECT_NON_TOP_VISIBLE_FIXED_ORIENTATION) @Test public void testNotRunStrategyToTranslucentActivitiesIfRespectOrientation() { @@ -388,6 +401,7 @@ public class TransparentPolicyTest extends WindowTestsBase { mTransparentActivityRobot = new AppCompatTransparentActivityRobot(activity()); // We always create at least an opaque activity in a Task activity().createNewTaskWithBaseActivity(); + activity().setTopActivityHasLetterboxedBounds(true); } @Override |