Loading core/java/android/app/Presentation.java +3 −3 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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(); } } Loading core/java/android/app/ResourcesManager.java +9 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -1120,15 +1121,17 @@ public class ResourcesManager { daj = new DisplayAdjustments(daj); daj.setCompatibilityInfo(compat); } tmpConfig.setTo(config); if (hasOverrideConfiguration) { tmpConfig.updateFrom(key.mOverrideConfiguration); } // Only apply for default display if (displayId == Display.DEFAULT_DISPLAY) { daj.setConfiguration(tmpConfig); daj.setConfiguration(config); } DisplayMetrics dm = getDisplayMetrics(displayId, daj); if (displayId != Display.DEFAULT_DISPLAY) { applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig); } if (hasOverrideConfiguration) { tmpConfig.updateFrom(key.mOverrideConfiguration); } resourcesImpl.updateConfiguration(tmpConfig, dm, compat); } Loading core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +1 −59 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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 */); Loading Loading
core/java/android/app/Presentation.java +3 −3 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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(); } } Loading
core/java/android/app/ResourcesManager.java +9 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -1120,15 +1121,17 @@ public class ResourcesManager { daj = new DisplayAdjustments(daj); daj.setCompatibilityInfo(compat); } tmpConfig.setTo(config); if (hasOverrideConfiguration) { tmpConfig.updateFrom(key.mOverrideConfiguration); } // Only apply for default display if (displayId == Display.DEFAULT_DISPLAY) { daj.setConfiguration(tmpConfig); daj.setConfiguration(config); } DisplayMetrics dm = getDisplayMetrics(displayId, daj); if (displayId != Display.DEFAULT_DISPLAY) { applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig); } if (hasOverrideConfiguration) { tmpConfig.updateFrom(key.mOverrideConfiguration); } resourcesImpl.updateConfiguration(tmpConfig, dm, compat); } Loading
core/tests/coretests/src/android/app/activity/ActivityThreadTest.java +1 −59 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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 */); Loading