summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java7
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java48
2 files changed, 54 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 9fa68e959810..491612d449bf 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7988,7 +7988,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// orientation with insets applied.
return;
}
-
+ // TODO(b/232898850): always respect fixed-orientation request.
+ // Ignore orientation request for activity in ActivityEmbedding split.
+ final TaskFragment organizedTf = getOrganizedTaskFragment();
+ if (organizedTf != null && !organizedTf.fillsParent()) {
+ return;
+ }
if (windowingMode == WINDOWING_MODE_PINNED) {
// PiP bounds have higher priority than the requested orientation. Otherwise the
// activity may be squeezed into a small piece.
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
index b2043c38d00a..3ed484ac7391 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -20,6 +20,9 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -428,4 +431,49 @@ public class TaskFragmentTest extends WindowTestsBase {
assertFalse(taskFragment.isAllowedToBeEmbeddedInTrustedMode());
}
+
+ @Test
+ public void testIgnoreRequestedOrientationForActivityEmbeddingSplit() {
+ // Setup two activities in ActivityEmbedding split.
+ final Task task = createTask(mDisplayContent);
+ final TaskFragment tf0 = new TaskFragmentBuilder(mAtm)
+ .setParentTask(task)
+ .createActivityCount(1)
+ .setOrganizer(mOrganizer)
+ .setFragmentToken(new Binder())
+ .build();
+ final TaskFragment tf1 = new TaskFragmentBuilder(mAtm)
+ .setParentTask(task)
+ .createActivityCount(1)
+ .setOrganizer(mOrganizer)
+ .setFragmentToken(new Binder())
+ .build();
+ tf0.setAdjacentTaskFragment(tf1, false /* moveAdjacentTogether */);
+ tf0.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
+ tf1.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
+ task.setBounds(0, 0, 1200, 1000);
+ tf0.setBounds(0, 0, 600, 1000);
+ tf1.setBounds(600, 0, 1200, 1000);
+ final ActivityRecord activity0 = tf0.getTopMostActivity();
+ final ActivityRecord activity1 = tf1.getTopMostActivity();
+
+ // Assert fixed orientation request is ignored for activity in ActivityEmbedding split.
+ activity0.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+
+ assertFalse(activity0.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation());
+
+ activity1.setRequestedOrientation(SCREEN_ORIENTATION_PORTRAIT);
+
+ assertFalse(activity1.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation());
+
+ // Also verify the behavior on device that ignore orientation request.
+ mDisplayContent.setIgnoreOrientationRequest(true);
+ task.onConfigurationChanged(task.getParent().getConfiguration());
+
+ assertFalse(activity0.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertFalse(activity1.isLetterboxedForFixedOrientationAndAspectRatio());
+ assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation());
+ }
}