Loading core/java/android/app/ActivityThread.java +5 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +66 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -306,6 +311,61 @@ public class ActivityThreadTest { assertEquals(400, activity.mConfig.smallestScreenWidthDp); } @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()); Loading Loading @@ -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); Loading @@ -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); Loading Loading
core/java/android/app/ActivityThread.java +5 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +66 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -306,6 +311,61 @@ public class ActivityThreadTest { assertEquals(400, activity.mConfig.smallestScreenWidthDp); } @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()); Loading Loading @@ -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); Loading @@ -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); Loading