From 87f93a5585809ebf2979668ce08066a6c95fc4b3 Mon Sep 17 00:00:00 2001 From: Darryl Johnson Date: Fri, 24 Apr 2020 23:31:30 +0000 Subject: [PATCH] Revert "Try to reland Ib3ee007bc" This reverts commit b6415618f1c5e72c44bf342cf4bd8667ebb8abff. Reason for revert: Caused regression of b/149213586 Bug: 148639826 Bug: 149213586 Change-Id: I5248e03b42e3f24a6e2abb134d0bf339e77f484b --- core/java/android/app/Presentation.java | 6 +- core/java/android/app/ResourcesManager.java | 15 +++-- .../app/activity/ActivityThreadTest.java | 60 +------------------ 3 files changed, 13 insertions(+), 68 deletions(-) diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java index bae6ab5ea80c7..7a18b8120d7ec 100644 --- a/core/java/android/app/Presentation.java +++ b/core/java/android/app/Presentation.java @@ -236,7 +236,7 @@ public class Presentation extends Dialog { // to be rare but surprising, so we'll write a log message about it. if (!isConfigurationStillValid()) { Log.i(TAG, "Presentation is being dismissed because the " - + "display metrics have changed since it was created while onStart."); + + "display metrics have changed since it was created."); mHandler.sendEmptyMessage(MSG_CANCEL); } } @@ -296,8 +296,8 @@ public class Presentation extends Dialog { // is invalid and the application must recreate the presentation to get // a new context. if (!isConfigurationStillValid()) { - Log.i(TAG, "Presentation is being dismissed because the display metrics have changed " - + "since it was created while handleDisplayChanged."); + Log.i(TAG, "Presentation is being dismissed because the " + + "display metrics have changed since it was created."); cancel(); } } diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index c2caa40ba950a..47ccc2f0badbe 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -1111,6 +1111,7 @@ public class ResourcesManager { } int displayId = key.mDisplayId; final boolean hasOverrideConfiguration = key.hasOverrideConfiguration(); + tmpConfig.setTo(config); // 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 @@ -1120,15 +1121,17 @@ public class ResourcesManager { daj = new DisplayAdjustments(daj); daj.setCompatibilityInfo(compat); } - tmpConfig.setTo(config); + if (displayId == Display.DEFAULT_DISPLAY) { + daj.setConfiguration(config); + } + DisplayMetrics dm = getDisplayMetrics(displayId, daj); + if (displayId != Display.DEFAULT_DISPLAY) { + applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig); + } + if (hasOverrideConfiguration) { 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); } diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java index ddb39e7e8834a..c328d720426d1 100644 --- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java @@ -40,10 +40,7 @@ import android.app.servertransaction.ResumeActivityItem; import android.app.servertransaction.StopActivityItem; import android.content.Intent; import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Rect; import android.os.IBinder; -import android.util.DisplayMetrics; import android.util.MergedConfiguration; import android.view.Display; import android.view.View; @@ -309,58 +306,6 @@ public class ActivityThreadTest { 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 public void testResumeAfterNewIntent() { final Activity activity = mActivityTestRule.launchActivity(new Intent()); @@ -461,10 +406,7 @@ public class ActivityThreadTest { private static ClientTransaction newRelaunchResumeTransaction(Activity activity) { final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(null, - null, 0, new MergedConfiguration( - activity.getApplication().getResources().getConfiguration(), - new Configuration()), - false /* preserveWindow */); + null, 0, new MergedConfiguration(), false /* preserveWindow */); final ResumeActivityItem resumeStateRequest = ResumeActivityItem.obtain(true /* isForward */);