diff options
| author | 2022-06-29 20:42:01 +0000 | |
|---|---|---|
| committer | 2022-06-29 20:42:01 +0000 | |
| commit | d890dd0e2fc2ef5ac368de6db777be57eb8c3be8 (patch) | |
| tree | 2a989e11a0cee753fe65f7a7379f1d8d864d3c3c | |
| parent | b51ecdf1fcc27d07f8514ef5644d1a758fe56f6c (diff) | |
Revert "Update the activity current config only if it is reported"
This reverts commit b51ecdf1fcc27d07f8514ef5644d1a758fe56f6c.
Reason for revert: Broken tests: b/236415038
Change-Id: I7a8587bf0d157f385f95d4715834ff1ce3e60cd8
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 24 | ||||
| -rw-r--r-- | core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java | 20 |
2 files changed, 23 insertions, 21 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 802458b1793c..9e9e985d27de 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5894,16 +5894,16 @@ public final class ActivityThread extends ClientTransactionHandler final boolean movedToDifferentDisplay = isDifferentDisplay(activity.getDisplayId(), displayId); - final Configuration currentResConfig = activity.getResources().getConfiguration(); - final int diff = currentResConfig.diffPublicOnly(newConfig); - final boolean hasPublicResConfigChange = diff != 0; + final Configuration currentConfig = activity.mCurrentConfig; + final int diff = currentConfig.diffPublicOnly(newConfig); + final boolean hasPublicConfigChange = diff != 0; final ActivityClientRecord r = getActivityClient(activityToken); // TODO(b/173090263): Use diff instead after the improvement of AssetManager and // ResourcesImpl constructions. - final boolean shouldUpdateResources = hasPublicResConfigChange - || shouldUpdateResources(activityToken, currentResConfig, newConfig, - amOverrideConfig, movedToDifferentDisplay, hasPublicResConfigChange); - final boolean shouldReportChange = shouldReportChange(activity.mCurrentConfig, newConfig, + final boolean shouldUpdateResources = hasPublicConfigChange + || shouldUpdateResources(activityToken, currentConfig, newConfig, amOverrideConfig, + movedToDifferentDisplay, hasPublicConfigChange); + final boolean shouldReportChange = shouldReportChange(diff, currentConfig, newConfig, r != null ? r.mSizeConfigurations : null, activity.mActivityInfo.getRealConfigChanged()); // Nothing significant, don't proceed with updating and reporting. @@ -5927,6 +5927,9 @@ public final class ActivityThread extends ClientTransactionHandler amOverrideConfig, contextThemeWrapperOverrideConfig); mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId); + activity.mConfigChangeFlags = 0; + activity.mCurrentConfig = new Configuration(newConfig); + // Apply the ContextThemeWrapper override if necessary. // NOTE: Make sure the configurations are not modified, as they are treated as immutable // in many places. @@ -5937,10 +5940,8 @@ public final class ActivityThread extends ClientTransactionHandler activity.dispatchMovedToDisplay(displayId, configToReport); } - activity.mConfigChangeFlags = 0; if (shouldReportChange) { activity.mCalled = false; - activity.mCurrentConfig = new Configuration(newConfig); activity.onConfigurationChanged(configToReport); if (!activity.mCalled) { throw new SuperNotCalledException("Activity " + activity.getLocalClassName() + @@ -5955,6 +5956,8 @@ public final class ActivityThread extends ClientTransactionHandler * Returns {@code true} if {@link Activity#onConfigurationChanged(Configuration)} should be * dispatched. * + * @param publicDiff Usually computed by {@link Configuration#diffPublicOnly(Configuration)}. + * This parameter is to prevent we compute it again. * @param currentConfig The current configuration cached in {@link Activity#mCurrentConfig}. * It is {@code null} before the first config update from the server side. * @param newConfig The updated {@link Configuration} @@ -5963,10 +5966,9 @@ public final class ActivityThread extends ClientTransactionHandler * @return {@code true} if the config change should be reported to the Activity */ @VisibleForTesting - public static boolean shouldReportChange(@Nullable Configuration currentConfig, + public static boolean shouldReportChange(int publicDiff, @Nullable Configuration currentConfig, @NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets sizeBuckets, int handledConfigChanges) { - final int publicDiff = currentConfig.diffPublicOnly(newConfig); // Don't report the change if there's no public diff between current and new config. if (publicDiff == 0) { return false; diff --git a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java index 47f70ddf2d42..8d3751e6ad6c 100644 --- a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java +++ b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java @@ -207,8 +207,8 @@ public class ActivityThreadClientTest { final Configuration currentConfig = new Configuration(); assertFalse("Must not report change if no public diff", - shouldReportChange(currentConfig, newConfig, null /* sizeBuckets */, - 0 /* handledConfigChanges */)); + shouldReportChange(0 /* publicDiff */, currentConfig, newConfig, + null /* sizeBuckets */, 0 /* handledConfigChanges */)); final int[] verticalThresholds = {100, 400}; final SizeConfigurationBuckets buckets = new SizeConfigurationBuckets( @@ -221,25 +221,25 @@ public class ActivityThreadClientTest { newConfig.screenHeightDp = 300; assertFalse("Must not report changes if the diff is small and not handled", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig, + newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); assertTrue("Must report changes if the small diff is handled", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_SCREEN_SIZE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig, newConfig, + buckets, CONFIG_SCREEN_SIZE /* handledConfigChanges */)); currentConfig.fontScale = 0.8f; newConfig.fontScale = 1.2f; assertTrue("Must report handled changes regardless of small unhandled change", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */, + currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); newConfig.screenHeightDp = 500; assertFalse("Must not report changes if there's unhandled big changes", - shouldReportChange(currentConfig, newConfig, buckets, - CONFIG_FONT_SCALE /* handledConfigChanges */)); + shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */, + currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */)); } private void recreateAndVerifyNoRelaunch(ActivityThread activityThread, TestActivity activity) { |