Merge "Add test to ensure virtual display orientation doesn't change when device rotates." into rvc-dev am: 77fae23490 am: f0a128ba2b am: 909c1f0431
Change-Id: I729da2372707327c907d908cc3090669e0a5452c
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
@@ -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());
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user