Make embedded TF provide override orientation only when visible
TF override orientation caused performance regression, because it also
reported the override orientation when invisible.
Bug: 331945991
Bug: 334529359
Test: atest TaskFragmentTest TaskFragmentOrganizerControllerTest
Change-Id: I2d728bc94942f34e53d4b7ec6c47119eb22be68f
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index fc85af5..7a8bea0 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1971,6 +1971,15 @@
return SCREEN_ORIENTATION_UNSET;
}
+ @ActivityInfo.ScreenOrientation
+ @Override
+ protected int getOverrideOrientation() {
+ if (isEmbedded() && !isVisibleRequested()) {
+ return SCREEN_ORIENTATION_UNSPECIFIED;
+ }
+ return super.getOverrideOrientation();
+ }
+
/**
* Whether or not to allow this container to specify an app requested orientation.
*
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
index 002a3d5..65a81c4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
@@ -1050,6 +1050,8 @@
// TaskFragment override orientation should be set for a system organizer.
final TaskFragment taskFragment = mWindowOrganizerController.getTaskFragment(fragmentToken);
assertNotNull(taskFragment);
+
+ taskFragment.setVisibleRequested(true);
assertEquals(SCREEN_ORIENTATION_BEHIND, taskFragment.getOverrideOrientation());
}
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 4837fcb..a90a158 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -757,6 +757,7 @@
final Task task = createTask(mDisplayContent);
final TaskFragment tf = createTaskFragmentWithActivity(task);
final ActivityRecord activity = tf.getTopMostActivity();
+ tf.setVisibleRequested(true);
tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND);
// Should report the override orientation
@@ -768,6 +769,26 @@
}
@Test
+ public void testGetOrientation_reportOverrideOrientation_whenInvisible() {
+ final Task task = createTask(mDisplayContent);
+ final TaskFragment tf = createTaskFragmentWithActivity(task);
+ final ActivityRecord activity = tf.getTopMostActivity();
+ tf.setVisibleRequested(false);
+ tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND);
+
+ // Should report SCREEN_ORIENTATION_UNSPECIFIED for the override orientation when invisible
+ assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, tf.getOverrideOrientation());
+
+ // Should report SCREEN_ORIENTATION_UNSET for the orientation
+ assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET));
+
+ // Should report SCREEN_ORIENTATION_UNSET even if the activity requests a different
+ // value
+ activity.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+ assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET));
+ }
+
+ @Test
public void testUpdateImeParentForActivityEmbedding() {
// Setup two activities in ActivityEmbedding.
final Task task = createTask(mDisplayContent);