Merge "RemoteViews: make bitmaps immutable" into tm-dev

This commit is contained in:
Tim Murray
2022-04-21 18:32:21 +00:00
committed by Android (Google) Code Review

View File

@@ -1588,24 +1588,33 @@ public class RemoteViews implements Parcelable, Filter {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
ArrayList<Bitmap> mBitmaps; ArrayList<Bitmap> mBitmaps;
SparseIntArray mBitmapHashes;
int mBitmapMemory = -1; int mBitmapMemory = -1;
public BitmapCache() { public BitmapCache() {
mBitmaps = new ArrayList<>(); mBitmaps = new ArrayList<>();
mBitmapHashes = new SparseIntArray();
} }
public BitmapCache(Parcel source) { public BitmapCache(Parcel source) {
mBitmaps = source.createTypedArrayList(Bitmap.CREATOR); mBitmaps = source.createTypedArrayList(Bitmap.CREATOR);
mBitmapHashes = source.readSparseIntArray();
} }
public int getBitmapId(Bitmap b) { public int getBitmapId(Bitmap b) {
if (b == null) { if (b == null) {
return -1; return -1;
} else { } else {
if (mBitmaps.contains(b)) { int hash = b.hashCode();
return mBitmaps.indexOf(b); int hashId = mBitmapHashes.get(hash, -1);
if (hashId != -1) {
return hashId;
} else { } else {
if (b.isMutable()) {
b = b.asShared();
}
mBitmaps.add(b); mBitmaps.add(b);
mBitmapHashes.put(mBitmaps.size() - 1, hash);
mBitmapMemory = -1; mBitmapMemory = -1;
return (mBitmaps.size() - 1); return (mBitmaps.size() - 1);
} }
@@ -1616,13 +1625,13 @@ public class RemoteViews implements Parcelable, Filter {
public Bitmap getBitmapForId(int id) { public Bitmap getBitmapForId(int id) {
if (id == -1 || id >= mBitmaps.size()) { if (id == -1 || id >= mBitmaps.size()) {
return null; return null;
} else {
return mBitmaps.get(id);
} }
return mBitmaps.get(id);
} }
public void writeBitmapsToParcel(Parcel dest, int flags) { public void writeBitmapsToParcel(Parcel dest, int flags) {
dest.writeTypedList(mBitmaps, flags); dest.writeTypedList(mBitmaps, flags);
dest.writeSparseIntArray(mBitmapHashes);
} }
public int getBitmapMemory() { public int getBitmapMemory() {