Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3af6019b authored by Santiago Etchebehere's avatar Santiago Etchebehere
Browse files

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
parent 5001447b
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -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,10 +414,17 @@ 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());
        }
        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;
    }

    /**
+23 −0
Original line number Diff line number Diff line
@@ -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());
    }
}