From c57064f98897236c57015906236e780a3e52a31f Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Tue, 25 Feb 2020 13:14:36 -0800 Subject: Do not rebase Resources with non RM impls If a Resources object associated with an Activity has its underlying ResourcesImpl changed to an impl that did not originate from ResourcesManager, do attempt to propagate configuration change events to the Resources object. Bug: 148196042 Test: manual Change-Id: I58cc03ae50f082f75e9ed181e0f0401f5890910b --- core/java/android/app/ResourcesManager.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index d09f0bcf4275..81671c349cbd 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -961,17 +961,19 @@ public class ResourcesManager { // Rebase each Resources associated with this Activity. final int refCount = activityResources.activityResources.size(); for (int i = 0; i < refCount; i++) { - WeakReference weakResRef = activityResources.activityResources.get( - i); + final WeakReference weakResRef = + activityResources.activityResources.get(i); - Resources resources = weakResRef.get(); + final Resources resources = weakResRef.get(); if (resources == null) { continue; } - ResourcesKey newKey = rebaseActivityOverrideConfig(resources, oldConfig, + final ResourcesKey newKey = rebaseActivityOverrideConfig(resources, oldConfig, overrideConfig, displayId); - updateActivityResources(resources, newKey, false); + if (newKey != null) { + updateActivityResources(resources, newKey, false); + } } } } finally { @@ -983,8 +985,9 @@ public class ResourcesManager { * Rebases an updated override config over any old override config and returns the new one * that an Activity's Resources should be set to. */ - private ResourcesKey rebaseActivityOverrideConfig(Resources resources, - Configuration oldOverrideConfig, @Nullable Configuration newOverrideConfig, + @Nullable + private ResourcesKey rebaseActivityOverrideConfig(@NonNull Resources resources, + @NonNull Configuration oldOverrideConfig, @Nullable Configuration newOverrideConfig, int displayId) { // Extract the ResourcesKey that was last used to create the Resources for this // activity. -- cgit v1.2.3-59-g8ed1b