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

Commit f0a128ba authored by Darryl Johnson's avatar Darryl Johnson Committed by Automerger Merge Worker
Browse files

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

Merge "Add test to ensure virtual display orientation doesn't change when device rotates." into rvc-dev am: 77fae234

Change-Id: I5522d81c0606c96ba7010909e43a6b8a4cc327b1
parents e00fbbe6 77fae234
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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) {
+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);