Merge "Update serialization of WallpaperColors" into sc-dev

This commit is contained in:
James O'Leary
2021-06-22 02:48:57 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 6 deletions

View File

@@ -111,12 +111,15 @@ public final class WallpaperColors implements Parcelable {
public WallpaperColors(Parcel parcel) { public WallpaperColors(Parcel parcel) {
mMainColors = new ArrayList<>(); mMainColors = new ArrayList<>();
mAllColors = new HashMap<>(); mAllColors = new HashMap<>();
final int count = parcel.readInt(); int count = parcel.readInt();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
final int colorInt = parcel.readInt(); final int colorInt = parcel.readInt();
Color color = Color.valueOf(colorInt); Color color = Color.valueOf(colorInt);
mMainColors.add(color); mMainColors.add(color);
}
count = parcel.readInt();
for (int i = 0; i < count; i++) {
final int colorInt = parcel.readInt();
final int population = parcel.readInt(); final int population = parcel.readInt();
mAllColors.put(colorInt, population); mAllColors.put(colorInt, population);
} }
@@ -411,9 +414,16 @@ public final class WallpaperColors implements Parcelable {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
Color color = mainColors.get(i); Color color = mainColors.get(i);
dest.writeInt(color.toArgb()); dest.writeInt(color.toArgb());
Integer population = mAllColors.get(color.toArgb()); }
int populationInt = (population != null) ? population : 0; count = mAllColors.size();
dest.writeInt(populationInt); 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); dest.writeInt(mColorHints);
} }
@@ -476,12 +486,13 @@ public final class WallpaperColors implements Parcelable {
WallpaperColors other = (WallpaperColors) o; WallpaperColors other = (WallpaperColors) o;
return mMainColors.equals(other.mMainColors) return mMainColors.equals(other.mMainColors)
&& mAllColors.equals(other.mAllColors)
&& mColorHints == other.mColorHints; && mColorHints == other.mColorHints;
} }
@Override @Override
public int hashCode() { public int hashCode() {
return 31 * mMainColors.hashCode() + mColorHints; return (31 * mMainColors.hashCode() * mAllColors.hashCode()) + mColorHints;
} }
/** /**

View File

@@ -20,6 +20,7 @@ import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.os.Parcel;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
@@ -106,4 +107,26 @@ public class WallpaperColorsTest {
// This would crash: // This would crash:
canvas.drawBitmap(image, 0, 0, new Paint()); 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());
}
} }