summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ResourcesManager.java31
-rw-r--r--core/java/android/content/res/ResourcesImpl.java31
2 files changed, 18 insertions, 44 deletions
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 392c05ac5949..d00366bd38f4 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -214,11 +214,10 @@ public class ResourcesManager {
for (int i = mCachedApkAssets.size() - 1; i >= 0; i--) {
final ApkKey key = mCachedApkAssets.keyAt(i);
if (key.path.equals(path)) {
- WeakReference<ApkAssets> apkAssetsRef = mCachedApkAssets.remove(key);
+ WeakReference<ApkAssets> apkAssetsRef = mCachedApkAssets.removeAt(i);
if (apkAssetsRef != null && apkAssetsRef.get() != null) {
apkAssetsRef.get().close();
}
- mCachedApkAssets.remove(key);
}
}
}
@@ -774,19 +773,21 @@ public class ResourcesManager {
* Rebases a key's override config on top of the Activity's base override.
*/
private void rebaseKeyForActivity(IBinder activityToken, ResourcesKey key) {
- final ActivityResources activityResources =
- getOrCreateActivityResourcesStructLocked(activityToken);
-
- // Clean up any dead references so they don't pile up.
- ArrayUtils.unstableRemoveIf(activityResources.activityResources,
- sEmptyReferencePredicate);
-
- // Rebase the key's override config on top of the Activity's base override.
- if (key.hasOverrideConfiguration()
- && !activityResources.overrideConfig.equals(Configuration.EMPTY)) {
- final Configuration temp = new Configuration(activityResources.overrideConfig);
- temp.updateFrom(key.mOverrideConfiguration);
- key.mOverrideConfiguration.setTo(temp);
+ synchronized (this) {
+ final ActivityResources activityResources =
+ getOrCreateActivityResourcesStructLocked(activityToken);
+
+ // Clean up any dead references so they don't pile up.
+ ArrayUtils.unstableRemoveIf(activityResources.activityResources,
+ sEmptyReferencePredicate);
+
+ // Rebase the key's override config on top of the Activity's base override.
+ if (key.hasOverrideConfiguration()
+ && !activityResources.overrideConfig.equals(Configuration.EMPTY)) {
+ final Configuration temp = new Configuration(activityResources.overrideConfig);
+ temp.updateFrom(key.mOverrideConfiguration);
+ key.mOverrideConfiguration.setTo(temp);
+ }
}
}
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index acdd47a4d61e..f40d60dbde5a 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -57,8 +57,6 @@ import android.view.DisplayAdjustments;
import com.android.internal.util.GrowingArrayUtils;
-import libcore.io.IoUtils;
-
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -818,27 +816,6 @@ public class ResourcesImpl {
}
/**
- * Loads a Drawable from an encoded image stream, or null.
- *
- * This call will handle closing the {@link InputStream}.
- */
- @Nullable
- private Drawable decodeImageDrawable(@NonNull InputStream inputStream,
- @NonNull Resources wrapper, @NonNull TypedValue value) {
- ImageDecoder.Source src = ImageDecoder.createSource(wrapper, inputStream, value.density);
- try {
- return ImageDecoder.decodeDrawable(src, (decoder, info, s) ->
- decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE));
- } catch (IOException ignored) {
- // This is okay. This may be something that ImageDecoder does not
- // support, like SVG.
- return null;
- } finally {
- IoUtils.closeQuietly(inputStream);
- }
- }
-
- /**
* Loads a drawable from XML or resources stream.
*
* @return Drawable, or null if Drawable cannot be decoded.
@@ -902,12 +879,8 @@ public class ResourcesImpl {
} else {
final InputStream is = mAssets.openNonAsset(
value.assetCookie, file, AssetManager.ACCESS_STREAMING);
- if (is instanceof AssetInputStream) {
- AssetInputStream ais = (AssetInputStream) is;
- dr = decodeImageDrawable(ais, wrapper, value);
- } else {
- dr = decodeImageDrawable(is, wrapper, value);
- }
+ final AssetInputStream ais = (AssetInputStream) is;
+ dr = decodeImageDrawable(ais, wrapper, value);
}
} finally {
stack.pop();