Merge "Synchronize before calling unstableRemoveIf" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ad5a070a87
@@ -214,11 +214,10 @@ public class ResourcesManager {
|
|||||||
for (int i = mCachedApkAssets.size() - 1; i >= 0; i--) {
|
for (int i = mCachedApkAssets.size() - 1; i >= 0; i--) {
|
||||||
final ApkKey key = mCachedApkAssets.keyAt(i);
|
final ApkKey key = mCachedApkAssets.keyAt(i);
|
||||||
if (key.path.equals(path)) {
|
if (key.path.equals(path)) {
|
||||||
WeakReference<ApkAssets> apkAssetsRef = mCachedApkAssets.remove(key);
|
WeakReference<ApkAssets> apkAssetsRef = mCachedApkAssets.removeAt(i);
|
||||||
if (apkAssetsRef != null && apkAssetsRef.get() != null) {
|
if (apkAssetsRef != null && apkAssetsRef.get() != null) {
|
||||||
apkAssetsRef.get().close();
|
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.
|
* Rebases a key's override config on top of the Activity's base override.
|
||||||
*/
|
*/
|
||||||
private void rebaseKeyForActivity(IBinder activityToken, ResourcesKey key) {
|
private void rebaseKeyForActivity(IBinder activityToken, ResourcesKey key) {
|
||||||
final ActivityResources activityResources =
|
synchronized (this) {
|
||||||
getOrCreateActivityResourcesStructLocked(activityToken);
|
final ActivityResources activityResources =
|
||||||
|
getOrCreateActivityResourcesStructLocked(activityToken);
|
||||||
|
|
||||||
// Clean up any dead references so they don't pile up.
|
// Clean up any dead references so they don't pile up.
|
||||||
ArrayUtils.unstableRemoveIf(activityResources.activityResources,
|
ArrayUtils.unstableRemoveIf(activityResources.activityResources,
|
||||||
sEmptyReferencePredicate);
|
sEmptyReferencePredicate);
|
||||||
|
|
||||||
// Rebase the key's override config on top of the Activity's base override.
|
// Rebase the key's override config on top of the Activity's base override.
|
||||||
if (key.hasOverrideConfiguration()
|
if (key.hasOverrideConfiguration()
|
||||||
&& !activityResources.overrideConfig.equals(Configuration.EMPTY)) {
|
&& !activityResources.overrideConfig.equals(Configuration.EMPTY)) {
|
||||||
final Configuration temp = new Configuration(activityResources.overrideConfig);
|
final Configuration temp = new Configuration(activityResources.overrideConfig);
|
||||||
temp.updateFrom(key.mOverrideConfiguration);
|
temp.updateFrom(key.mOverrideConfiguration);
|
||||||
key.mOverrideConfiguration.setTo(temp);
|
key.mOverrideConfiguration.setTo(temp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,8 +57,6 @@ import android.view.DisplayAdjustments;
|
|||||||
|
|
||||||
import com.android.internal.util.GrowingArrayUtils;
|
import com.android.internal.util.GrowingArrayUtils;
|
||||||
|
|
||||||
import libcore.io.IoUtils;
|
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
@@ -817,27 +815,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.
|
* Loads a drawable from XML or resources stream.
|
||||||
*
|
*
|
||||||
@@ -902,12 +879,8 @@ public class ResourcesImpl {
|
|||||||
} else {
|
} else {
|
||||||
final InputStream is = mAssets.openNonAsset(
|
final InputStream is = mAssets.openNonAsset(
|
||||||
value.assetCookie, file, AssetManager.ACCESS_STREAMING);
|
value.assetCookie, file, AssetManager.ACCESS_STREAMING);
|
||||||
if (is instanceof AssetInputStream) {
|
final AssetInputStream ais = (AssetInputStream) is;
|
||||||
AssetInputStream ais = (AssetInputStream) is;
|
dr = decodeImageDrawable(ais, wrapper, value);
|
||||||
dr = decodeImageDrawable(ais, wrapper, value);
|
|
||||||
} else {
|
|
||||||
dr = decodeImageDrawable(is, wrapper, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
stack.pop();
|
stack.pop();
|
||||||
|
|||||||
Reference in New Issue
Block a user