summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Darryl Johnson <darryljohnson@google.com> 2020-04-30 00:18:02 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-04-30 00:18:02 +0000
commit77fae23490a6cec82786bb7edfe52f435bcc3a61 (patch)
treea30401e27ccbd360d82e60a605ed2e93c2bdf44e
parent5a4a5682a28f585a25ceaa8093593299a13de624 (diff)
parent78d4e6dc7be59fcbf2be83ebd6a87dd371cb4fb6 (diff)
Merge "Add test to ensure virtual display orientation doesn't change when device rotates." into rvc-dev
-rw-r--r--core/java/android/app/ActivityThread.java5
-rw-r--r--core/tests/coretests/src/android/app/activity/ActivityThreadTest.java72
2 files changed, 71 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 51eaff1ae99f..e19d5ecdd7d2 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3087,6 +3087,11 @@ public final class ActivityThread extends ClientTransactionHandler {
return mActivities.get(token);
}
+ @VisibleForTesting(visibility = PACKAGE)
+ public Configuration getConfiguration() {
+ return mConfiguration;
+ }
+
@Override
public void updatePendingConfiguration(Configuration config) {
synchronized (mResourcesManager) {
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index c328d720426d..34417e68f11c 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -18,6 +18,8 @@ package android.app.activity;
import static android.content.Intent.ACTION_EDIT;
import static android.content.Intent.ACTION_VIEW;
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
import static com.google.common.truth.Truth.assertThat;
@@ -31,6 +33,7 @@ import android.app.Activity;
import android.app.ActivityThread;
import android.app.IApplicationThread;
import android.app.PictureInPictureParams;
+import android.app.ResourcesManager;
import android.app.servertransaction.ActivityConfigurationChangeItem;
import android.app.servertransaction.ActivityRelaunchItem;
import android.app.servertransaction.ClientTransaction;
@@ -38,8 +41,10 @@ import android.app.servertransaction.ClientTransactionItem;
import android.app.servertransaction.NewIntentItem;
import android.app.servertransaction.ResumeActivityItem;
import android.app.servertransaction.StopActivityItem;
+import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.hardware.display.DisplayManager;
import android.os.IBinder;
import android.util.MergedConfiguration;
import android.view.Display;
@@ -230,9 +235,9 @@ public class ActivityThreadTest {
final ActivityThread activityThread = activity.getActivityThread();
final Configuration pendingConfig = new Configuration();
- pendingConfig.orientation = orientation == Configuration.ORIENTATION_LANDSCAPE
- ? Configuration.ORIENTATION_PORTRAIT
- : Configuration.ORIENTATION_LANDSCAPE;
+ pendingConfig.orientation = orientation == ORIENTATION_LANDSCAPE
+ ? ORIENTATION_PORTRAIT
+ : ORIENTATION_LANDSCAPE;
pendingConfig.seq = seq + 2;
activityThread.updatePendingActivityConfiguration(activity.getActivityToken(),
pendingConfig);
@@ -257,7 +262,7 @@ public class ActivityThreadTest {
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
final Configuration config = new Configuration();
config.seq = BASE_SEQ;
- config.orientation = Configuration.ORIENTATION_PORTRAIT;
+ config.orientation = ORIENTATION_PORTRAIT;
activityThread.handleActivityConfigurationChanged(activity.getActivityToken(),
config, Display.INVALID_DISPLAY);
@@ -307,6 +312,61 @@ public class ActivityThreadTest {
}
@Test
+ public void testOrientationChanged_DoesntOverrideVirtualDisplayOrientation() {
+ final TestActivity activity = mActivityTestRule.launchActivity(new Intent());
+ final ActivityThread activityThread = activity.getActivityThread();
+
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+ Context appContext = activity.getApplication();
+ Configuration originalAppConfig =
+ new Configuration(appContext.getResources().getConfiguration());
+ DisplayManager dm = appContext.getSystemService(DisplayManager.class);
+
+ int virtualDisplayWidth;
+ int virtualDisplayHeight;
+ if (originalAppConfig.orientation == ORIENTATION_PORTRAIT) {
+ virtualDisplayWidth = 100;
+ virtualDisplayHeight = 200;
+ } else {
+ virtualDisplayWidth = 200;
+ virtualDisplayHeight = 100;
+ }
+ Display virtualDisplay = dm.createVirtualDisplay("virtual-display",
+ virtualDisplayWidth, virtualDisplayHeight, 200, null, 0).getDisplay();
+ Context virtualDisplayContext = appContext.createDisplayContext(virtualDisplay);
+ int originalVirtualDisplayOrientation = virtualDisplayContext.getResources()
+ .getConfiguration().orientation;
+
+ Configuration newAppConfig = new Configuration(originalAppConfig);
+ newAppConfig.seq++;
+ newAppConfig.orientation = newAppConfig.orientation == ORIENTATION_PORTRAIT
+ ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT;
+
+ activityThread.updatePendingConfiguration(newAppConfig);
+ activityThread.handleConfigurationChanged(newAppConfig);
+
+ try {
+ assertEquals("Virtual display orientation should not change when process"
+ + " configuration orientation changes.",
+ originalVirtualDisplayOrientation,
+ virtualDisplayContext.getResources().getConfiguration().orientation);
+ } finally {
+ // Make sure to reset the process config to prevent side effects to other
+ // tests.
+ Configuration activityThreadConfig = activityThread.getConfiguration();
+ activityThreadConfig.seq = originalAppConfig.seq - 1;
+
+ Configuration resourceManagerConfig = ResourcesManager.getInstance()
+ .getConfiguration();
+ resourceManagerConfig.seq = originalAppConfig.seq - 1;
+
+ activityThread.updatePendingConfiguration(originalAppConfig);
+ activityThread.handleConfigurationChanged(originalAppConfig);
+ }
+ });
+ }
+
+ @Test
public void testResumeAfterNewIntent() {
final Activity activity = mActivityTestRule.launchActivity(new Intent());
final ActivityThread activityThread = activity.getActivityThread();
@@ -386,7 +446,7 @@ public class ActivityThreadTest {
final int numOfConfig = activity.mNumOfConfigChanges;
Configuration config = new Configuration();
- config.orientation = Configuration.ORIENTATION_PORTRAIT;
+ config.orientation = ORIENTATION_PORTRAIT;
config.seq = seq;
activityThread.handleActivityConfigurationChanged(activity.getActivityToken(), config,
Display.INVALID_DISPLAY);
@@ -396,7 +456,7 @@ public class ActivityThreadTest {
}
config = new Configuration();
- config.orientation = Configuration.ORIENTATION_LANDSCAPE;
+ config.orientation = ORIENTATION_LANDSCAPE;
config.seq = seq + 1;
activityThread.handleActivityConfigurationChanged(activity.getActivityToken(), config,
Display.INVALID_DISPLAY);