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

Commit cf484d92 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Try to reland Ib3ee007bc" into rvc-dev am: 7f801fe0 am: 1bfa9248

Change-Id: Iee282f80f5389cf4121c9d34f588653d47310fd2
parents 43092a9b 1bfa9248
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -236,7 +236,7 @@ public class Presentation extends Dialog {
        // to be rare but surprising, so we'll write a log message about it.
        // to be rare but surprising, so we'll write a log message about it.
        if (!isConfigurationStillValid()) {
        if (!isConfigurationStillValid()) {
            Log.i(TAG, "Presentation is being dismissed because the "
            Log.i(TAG, "Presentation is being dismissed because the "
                    + "display metrics have changed since it was created.");
                    + "display metrics have changed since it was created while onStart.");
            mHandler.sendEmptyMessage(MSG_CANCEL);
            mHandler.sendEmptyMessage(MSG_CANCEL);
        }
        }
    }
    }
@@ -296,8 +296,8 @@ public class Presentation extends Dialog {
        // is invalid and the application must recreate the presentation to get
        // is invalid and the application must recreate the presentation to get
        // a new context.
        // a new context.
        if (!isConfigurationStillValid()) {
        if (!isConfigurationStillValid()) {
            Log.i(TAG, "Presentation is being dismissed because the "
            Log.i(TAG, "Presentation is being dismissed because the display metrics have changed "
                    + "display metrics have changed since it was created.");
                    + "since it was created while handleDisplayChanged.");
            cancel();
            cancel();
        }
        }
    }
    }
+6 −9
Original line number Original line Diff line number Diff line
@@ -1111,7 +1111,6 @@ public class ResourcesManager {
        }
        }
        int displayId = key.mDisplayId;
        int displayId = key.mDisplayId;
        final boolean hasOverrideConfiguration = key.hasOverrideConfiguration();
        final boolean hasOverrideConfiguration = key.hasOverrideConfiguration();
        tmpConfig.setTo(config);


        // Get new DisplayMetrics based on the DisplayAdjustments given to the ResourcesImpl. Update
        // Get new DisplayMetrics based on the DisplayAdjustments given to the ResourcesImpl. Update
        // a copy if the CompatibilityInfo changed, because the ResourcesImpl object will handle the
        // a copy if the CompatibilityInfo changed, because the ResourcesImpl object will handle the
@@ -1121,17 +1120,15 @@ public class ResourcesManager {
            daj = new DisplayAdjustments(daj);
            daj = new DisplayAdjustments(daj);
            daj.setCompatibilityInfo(compat);
            daj.setCompatibilityInfo(compat);
        }
        }
        if (displayId == Display.DEFAULT_DISPLAY) {
        tmpConfig.setTo(config);
            daj.setConfiguration(config);
        }
        DisplayMetrics dm = getDisplayMetrics(displayId, daj);
        if (displayId != Display.DEFAULT_DISPLAY) {
            applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig);
        }

        if (hasOverrideConfiguration) {
        if (hasOverrideConfiguration) {
            tmpConfig.updateFrom(key.mOverrideConfiguration);
            tmpConfig.updateFrom(key.mOverrideConfiguration);
        }
        }
        // Only apply for default display
        if (displayId == Display.DEFAULT_DISPLAY) {
            daj.setConfiguration(tmpConfig);
        }
        DisplayMetrics dm = getDisplayMetrics(displayId, daj);
        resourcesImpl.updateConfiguration(tmpConfig, dm, compat);
        resourcesImpl.updateConfiguration(tmpConfig, dm, compat);
    }
    }


+59 −1
Original line number Original line Diff line number Diff line
@@ -40,7 +40,10 @@ import android.app.servertransaction.ResumeActivityItem;
import android.app.servertransaction.StopActivityItem;
import android.app.servertransaction.StopActivityItem;
import android.content.Intent;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.IBinder;
import android.os.IBinder;
import android.util.DisplayMetrics;
import android.util.MergedConfiguration;
import android.util.MergedConfiguration;
import android.view.Display;
import android.view.Display;
import android.view.View;
import android.view.View;
@@ -306,6 +309,58 @@ public class ActivityThreadTest {
        assertEquals(400, activity.mConfig.smallestScreenWidthDp);
        assertEquals(400, activity.mConfig.smallestScreenWidthDp);
    }
    }


    @Test
    public void testHandleConfigurationChangedDoesntOverrideActivityConfig() {
        final TestActivity activity = mActivityTestRule.launchActivity(new Intent());

        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
            final Configuration oldActivityConfig =
                    new Configuration(activity.getResources().getConfiguration());
            final DisplayMetrics oldActivityMetrics = new DisplayMetrics();
            activity.getDisplay().getMetrics(oldActivityMetrics);
            final Resources oldAppResources = activity.getApplication().getResources();
            final Configuration oldAppConfig =
                    new Configuration(oldAppResources.getConfiguration());
            final DisplayMetrics oldApplicationMetrics = new DisplayMetrics();
            oldApplicationMetrics.setTo(oldAppResources.getDisplayMetrics());
            assertEquals("Process config must match the top activity config by default",
                    0, oldActivityConfig.diffPublicOnly(oldAppConfig));
            assertEquals("Process config must match the top activity config by default",
                    oldActivityMetrics, oldApplicationMetrics);

            // Update the application configuration separately from activity config
            final Configuration newAppConfig = new Configuration(oldAppConfig);
            newAppConfig.densityDpi += 100;
            newAppConfig.screenHeightDp += 100;
            final Rect newBounds = new Rect(newAppConfig.windowConfiguration.getAppBounds());
            newBounds.bottom += 100;
            newAppConfig.windowConfiguration.setAppBounds(newBounds);
            newAppConfig.windowConfiguration.setBounds(newBounds);
            newAppConfig.seq++;

            final ActivityThread activityThread = activity.getActivityThread();
            activityThread.handleConfigurationChanged(newAppConfig);

            // Verify that application config update was applied, but didn't change activity config.
            assertEquals("Activity config must not change if the process config changes",
                    oldActivityConfig, activity.getResources().getConfiguration());

            final DisplayMetrics newActivityMetrics = new DisplayMetrics();
            activity.getDisplay().getMetrics(newActivityMetrics);
            assertEquals("Activity display size must not change if the process config changes",
                    oldActivityMetrics, newActivityMetrics);
            final Resources newAppResources = activity.getApplication().getResources();
            assertEquals("Application config must be updated",
                    newAppConfig, newAppResources.getConfiguration());
            final DisplayMetrics newApplicationMetrics = new DisplayMetrics();
            newApplicationMetrics.setTo(newAppResources.getDisplayMetrics());
            assertNotEquals("Application display size must be updated after config update",
                    oldApplicationMetrics, newApplicationMetrics);
            assertNotEquals("Application display size must be updated after config update",
                    newActivityMetrics, newApplicationMetrics);
        });
    }

    @Test
    @Test
    public void testResumeAfterNewIntent() {
    public void testResumeAfterNewIntent() {
        final Activity activity = mActivityTestRule.launchActivity(new Intent());
        final Activity activity = mActivityTestRule.launchActivity(new Intent());
@@ -406,7 +461,10 @@ public class ActivityThreadTest {


    private static ClientTransaction newRelaunchResumeTransaction(Activity activity) {
    private static ClientTransaction newRelaunchResumeTransaction(Activity activity) {
        final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(null,
        final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(null,
                null, 0, new MergedConfiguration(), false /* preserveWindow */);
                null, 0, new MergedConfiguration(
                        activity.getApplication().getResources().getConfiguration(),
                        new Configuration()),
                false /* preserveWindow */);
        final ResumeActivityItem resumeStateRequest =
        final ResumeActivityItem resumeStateRequest =
                ResumeActivityItem.obtain(true /* isForward */);
                ResumeActivityItem.obtain(true /* isForward */);