Update serialization of WallpaperColors
Do not assume mMainColors and mAllColors contain the same color since recent changes modified that. Update equals and hashCode as well to account for this. Bug: 191391779 Bug: 191374703 Test: atest WallpaperColorsTest Change-Id: I8c7775055a2360ec3a91cee76a42d14a143ec7fb
This commit is contained in:
parent
5001447b86
commit
3af6019b81
@ -111,12 +111,15 @@ public final class WallpaperColors implements Parcelable {
|
||||
public WallpaperColors(Parcel parcel) {
|
||||
mMainColors = new ArrayList<>();
|
||||
mAllColors = new HashMap<>();
|
||||
final int count = parcel.readInt();
|
||||
int count = parcel.readInt();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final int colorInt = parcel.readInt();
|
||||
Color color = Color.valueOf(colorInt);
|
||||
mMainColors.add(color);
|
||||
|
||||
}
|
||||
count = parcel.readInt();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final int colorInt = parcel.readInt();
|
||||
final int population = parcel.readInt();
|
||||
mAllColors.put(colorInt, population);
|
||||
}
|
||||
@ -411,9 +414,16 @@ public final class WallpaperColors implements Parcelable {
|
||||
for (int i = 0; i < count; i++) {
|
||||
Color color = mainColors.get(i);
|
||||
dest.writeInt(color.toArgb());
|
||||
Integer population = mAllColors.get(color.toArgb());
|
||||
int populationInt = (population != null) ? population : 0;
|
||||
dest.writeInt(populationInt);
|
||||
}
|
||||
count = mAllColors.size();
|
||||
dest.writeInt(count);
|
||||
for (Map.Entry<Integer, Integer> colorEntry : mAllColors.entrySet()) {
|
||||
if (colorEntry.getKey() != null) {
|
||||
dest.writeInt(colorEntry.getKey());
|
||||
Integer population = mAllColors.get(colorEntry.getValue());
|
||||
int populationInt = (population != null) ? population : 0;
|
||||
dest.writeInt(populationInt);
|
||||
}
|
||||
}
|
||||
dest.writeInt(mColorHints);
|
||||
}
|
||||
@ -476,12 +486,13 @@ public final class WallpaperColors implements Parcelable {
|
||||
|
||||
WallpaperColors other = (WallpaperColors) o;
|
||||
return mMainColors.equals(other.mMainColors)
|
||||
&& mAllColors.equals(other.mAllColors)
|
||||
&& mColorHints == other.mColorHints;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return 31 * mMainColors.hashCode() + mColorHints;
|
||||
return (31 * mMainColors.hashCode() * mAllColors.hashCode()) + mColorHints;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -20,6 +20,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.os.Parcel;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
@ -106,4 +107,26 @@ public class WallpaperColorsTest {
|
||||
// This would crash:
|
||||
canvas.drawBitmap(image, 0, 0, new Paint());
|
||||
}
|
||||
|
||||
/**
|
||||
* Parcelled WallpaperColors object should equal the original.
|
||||
*/
|
||||
@Test
|
||||
public void testParcelUnparcel() {
|
||||
Bitmap image = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
|
||||
WallpaperColors colors = WallpaperColors.fromBitmap(image);
|
||||
Parcel parcel = Parcel.obtain();
|
||||
colors.writeToParcel(parcel, 0);
|
||||
parcel.setDataPosition(0);
|
||||
WallpaperColors reconstructed = new WallpaperColors(parcel);
|
||||
parcel.recycle();
|
||||
Assert.assertEquals("WallpaperColors recreated from Parcel should equal original",
|
||||
colors, reconstructed);
|
||||
Assert.assertEquals("getAllColors() on WallpaperColors recreated from Parcel should"
|
||||
+ "return the same as the original",
|
||||
colors.getAllColors(), reconstructed.getAllColors());
|
||||
Assert.assertEquals("getMainColors() on WallpaperColors recreated from Parcel should"
|
||||
+ "return the same as the original",
|
||||
colors.getMainColors(), reconstructed.getMainColors());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user