From 5b9845ad38b47f07923089b63bcd3042a5cf73a3 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Wed, 10 Mar 2021 15:34:16 +0800 Subject: [PATCH] Do not report config change to activity if nothing changed Currently the diff only counts public fields. If only the rotation of the window configuration is changed, the activity still receives onConfigurationChanged which is unexpected. Bug: 165794724 Test: AppConfigurationTests Change-Id: Ice2db32b700493bcd47a38468ae66e91504895a6 --- core/java/android/app/ActivityThread.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 0b5958695dff1..8977ba774d0b4 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5775,11 +5775,14 @@ public final class ActivityThread extends ClientTransactionHandler // ResourcesImpl constructions. final int diff = activity.mCurrentConfig.diffPublicOnly(newConfig); - if (diff == 0 && !shouldUpdateWindowMetricsBounds(activity.mCurrentConfig, newConfig) - && !movedToDifferentDisplay && mResourcesManager.isSameResourcesOverrideConfig( - activityToken, amOverrideConfig)) { - // Nothing significant, don't proceed with updating and reporting. - return null; + if (diff == 0) { + if (!shouldUpdateWindowMetricsBounds(activity.mCurrentConfig, newConfig) + && !movedToDifferentDisplay + && mResourcesManager.isSameResourcesOverrideConfig( + activityToken, amOverrideConfig)) { + // Nothing significant, don't proceed with updating and reporting. + return null; + } } else if ((~activity.mActivityInfo.getRealConfigChanged() & diff) == 0) { // If this activity doesn't handle any of the config changes, then don't bother // calling onConfigurationChanged. Otherwise, report to the activity for the