Merge "Fix letterbox for SCREEN_ORIENTATION_BEHIND" into tm-qpr-dev

This commit is contained in:
Massimo Carli
2022-10-13 21:27:10 +00:00
committed by Android (Google) Code Review
2 changed files with 41 additions and 0 deletions

View File

@@ -7638,6 +7638,31 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */);
}
/**
* Returns the requested {@link Configuration.Orientation} for the current activity.
*
* <p>When The current orientation is set to {@link SCREEN_ORIENTATION_BEHIND} it returns the
* requested orientation for the activity below which is the first activity with an explicit
* (different from {@link SCREEN_ORIENTATION_UNSET}) orientation which is not {@link
* SCREEN_ORIENTATION_BEHIND}.
*/
@Configuration.Orientation
@Override
int getRequestedConfigurationOrientation(boolean forDisplay) {
if (mOrientation == SCREEN_ORIENTATION_BEHIND && task != null) {
// We use Task here because we want to be consistent with what happens in
// multi-window mode where other tasks orientations are ignored.
final ActivityRecord belowCandidate = task.getActivity(
a -> a.mOrientation != SCREEN_ORIENTATION_UNSET && !a.finishing
&& a.mOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND, this,
false /* includeBoundary */, true /* traverseTopToBottom */);
if (belowCandidate != null) {
return belowCandidate.getRequestedConfigurationOrientation(forDisplay);
}
}
return super.getRequestedConfigurationOrientation(forDisplay);
}
@Override
void onCancelFixedRotationTransform(int originalDisplayRotation) {
if (this != mDisplayContent.getLastOrientationSource()) {

View File

@@ -2319,6 +2319,22 @@ public class ActivityRecordTests extends WindowTestsBase {
assertTrue(activity1.getTask().getTaskInfo().launchCookies.contains(launchCookie));
}
@Test
public void testOrientationForScreenOrientationBehind() {
final Task task = createTask(mDisplayContent);
// Activity below
new ActivityBuilder(mAtm)
.setTask(task)
.setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
.build();
final ActivityRecord activityTop = new ActivityBuilder(mAtm)
.setTask(task)
.setScreenOrientation(SCREEN_ORIENTATION_BEHIND)
.build();
final int topOrientation = activityTop.getRequestedConfigurationOrientation();
assertEquals(SCREEN_ORIENTATION_PORTRAIT, topOrientation);
}
private void verifyProcessInfoUpdate(ActivityRecord activity, State state,
boolean shouldUpdate, boolean activityChange) {
reset(activity.app);