Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78d4e6dc authored by Darryl L Johnson's avatar Darryl L Johnson
Browse files

Add test to ensure virtual display orientation doesn't change when

device rotates.

Bug: 148639826
Bug: 149213586

Test: ActivityThreadTest#testOrientationChangeDoesntOverrideVirtualDisplayOrientation

Change-Id: I74d5d9ad6d051e1059ca03102716319ac1b674a7
parent 637fd243
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3085,6 +3085,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) {
+66 −6
Original line number Diff line number Diff line
@@ -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);