diff options
| author | 2023-02-08 15:01:08 +0000 | |
|---|---|---|
| committer | 2023-02-08 15:01:08 +0000 | |
| commit | dd94099564d59fd9b6cabe5deffed30fd781b327 (patch) | |
| tree | 7be3019a09f52ac7ceeb6f615bfbea0bc5560974 | |
| parent | f35090ee0088418c5da630415a5606cbe35a2f07 (diff) | |
| parent | 0b5d2db6e9ee488153f38e8e7a7263874dc10019 (diff) | |
Merge "Handle tranlucent strategy on back" into tm-qpr-dev am: 0b5d2db6e9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21154290
Change-Id: I4061c23e953b05b7fd8176d9d69d5b876980a0f1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
3 files changed, 26 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index f7b9d8b2d856..056b144a90b9 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -3906,6 +3906,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } + boolean isFinishing() { + return finishing; + } + /** * This method is to only be called from the client via binder when the activity is destroyed * AND finished. diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 9681789347cf..1aa0ec3c1280 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -105,6 +105,7 @@ import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType; import java.io.PrintWriter; import java.util.function.BooleanSupplier; +import java.util.function.Predicate; /** Controls behaviour of the letterbox UI for {@link mActivityRecord}. */ // TODO(b/185262487): Improve test coverage of this class. Parts of it are tested in @@ -114,6 +115,9 @@ import java.util.function.BooleanSupplier; // TODO(b/263021211): Consider renaming to more generic CompatUIController. final class LetterboxUiController { + private static final Predicate<ActivityRecord> FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE = + activityRecord -> activityRecord.fillsParent() && !activityRecord.isFinishing(); + private static final String TAG = TAG_WITH_CLASS_NAME ? "LetterboxUiController" : TAG_ATM; private static final float UNDEFINED_ASPECT_RATIO = 0f; @@ -1390,7 +1394,8 @@ final class LetterboxUiController { return; } final ActivityRecord firstOpaqueActivityBeneath = mActivityRecord.getTask().getActivity( - ActivityRecord::fillsParent, mActivityRecord, false /* includeBoundary */, + FIRST_OPAQUE_NOT_FINISHING_ACTIVITY_PREDICATE /* callback */, + mActivityRecord /* boundary */, false /* includeBoundary */, true /* traverseTopToBottom */); if (firstOpaqueActivityBeneath == null) { // We skip letterboxing if the translucent activity doesn't have any opaque diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index fb5fda16408e..2c4f1663153c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -255,6 +255,22 @@ public class SizeCompatTests extends WindowTestsBase { } @Test + public void testCheckOpaqueIsLetterboxedWhenStrategyIsApplied() { + mWm.mLetterboxConfiguration.setTranslucentLetterboxingOverrideEnabled(true); + setUpDisplaySizeWithApp(2000, 1000); + prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT); + mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); + // Translucent Activity + final ActivityRecord translucentActivity = new ActivityBuilder(mAtm) + .setLaunchedFromUid(mActivity.getUid()) + .build(); + doReturn(false).when(translucentActivity).fillsParent(); + spyOn(mActivity); + mTask.addChild(translucentActivity); + verify(mActivity).isFinishing(); + } + + @Test public void testRestartProcessIfVisible() { setUpDisplaySizeWithApp(1000, 2500); doNothing().when(mSupervisor).scheduleRestartTimeout(mActivity); |