Merge "Do not apply letterbox when entering PiP" into udc-dev am: cceba8e25c am: f382b873db

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23628060

Change-Id: I9c32fe6d17a61983a89e97d6c152395ad1082ec0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Riddle Hsu
2023-06-13 10:43:26 +00:00
committed by Automerger Merge Worker
4 changed files with 23 additions and 8 deletions

View File

@@ -8301,6 +8301,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
mIsAspectRatioApplied = false;
mIsEligibleForFixedOrientationLetterbox = false;
mLetterboxBoundsForFixedOrientationAndAspectRatio = null;
// Can't use resolvedConfig.windowConfiguration.getWindowingMode() because it can be
// different from windowing mode of the task (PiP) during transition from fullscreen to PiP
@@ -8310,8 +8312,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final boolean isFixedOrientationLetterboxAllowed =
parentWindowingMode == WINDOWING_MODE_MULTI_WINDOW
|| parentWindowingMode == WINDOWING_MODE_FULLSCREEN
// Switching from PiP to fullscreen.
|| (parentWindowingMode == WINDOWING_MODE_PINNED
// When starting to switch between PiP and fullscreen, the task is pinned
// and the activity is fullscreen. But only allow to apply letterbox if the
// activity is exiting PiP because an entered PiP should fill the task.
|| (!mWaitForEnteringPinnedMode
&& parentWindowingMode == WINDOWING_MODE_PINNED
&& resolvedConfig.windowConfiguration.getWindowingMode()
== WINDOWING_MODE_FULLSCREEN);
// TODO(b/181207944): Consider removing the if condition and always run
@@ -8705,8 +8710,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
* in this method.
*/
private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) {
mLetterboxBoundsForFixedOrientationAndAspectRatio = null;
mIsEligibleForFixedOrientationLetterbox = false;
final Rect parentBounds = newParentConfig.windowConfiguration.getBounds();
final Rect stableBounds = new Rect();
// If orientation is respected when insets are applied, then stableBounds will be empty.

View File

@@ -2013,7 +2013,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
// from doing work and changing the activity visuals while animating
// TODO(task-org): Figure-out more structured way to do this long term.
r.setWindowingMode(r.getWindowingMode());
r.mWaitForEnteringPinnedMode = true;
final TaskFragment organizedTf = r.getOrganizedTaskFragment();
final boolean singleActivity = task.getNonFinishingActivityCount() == 1;
@@ -2140,6 +2139,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
rootTask.setDeferTaskAppear(false);
// After setting this, it is not expected to change activity configuration until the
// transition animation is finished. So the activity can keep consistent appearance
// when animating.
r.mWaitForEnteringPinnedMode = true;
// Reset the state that indicates it can enter PiP while pausing after we've moved it
// to the root pinned task
r.supportsEnterPipOnTaskSwitch = false;

View File

@@ -3887,15 +3887,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
}
/**
* @return {@code true} if activity bounds are letterboxed or letterboxed for display cutout.
* Note that it's always {@code false} if the activity is in pip mode.
* Returns {@code true} if activity bounds are letterboxed or letterboxed for display cutout.
*
* <p>Note that letterbox UI may not be shown even when this returns {@code true}. See {@link
* LetterboxUiController#shouldShowLetterboxUi} for more context.
*/
boolean areAppWindowBoundsLetterboxed() {
return mActivityRecord != null
&& !mActivityRecord.inPinnedWindowingMode()
&& (mActivityRecord.areBoundsLetterboxed() || isLetterboxedForDisplayCutout());
}

View File

@@ -337,6 +337,17 @@ public class RootWindowContainerTests extends WindowTestsBase {
// Ensure a task has moved over.
ensureTaskPlacement(task, activity);
assertTrue(task.inPinnedWindowingMode());
// The activity with fixed orientation should not apply letterbox when entering PiP.
final int requestedOrientation = task.getConfiguration().orientation
== Configuration.ORIENTATION_PORTRAIT
? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT;
doReturn(requestedOrientation).when(activity).getRequestedConfigurationOrientation();
doReturn(false).when(activity).handlesOrientationChangeFromDescendant(anyInt());
final Rect bounds = new Rect(task.getBounds());
bounds.scale(0.5f);
task.setBounds(bounds);
assertFalse(activity.isLetterboxedForFixedOrientationAndAspectRatio());
}
/**