Migrate legacy color palette.
We don't store non-user-selected colors in the database. That means that when we update the palette, we still have to hash based off of the legacy palette when generating a color if we want to migrate to a similar-looking color. Unfortunately, because the new palette is smaller, some colors are "overloaded", meaning that when we hash based off of the legacy palette, some colors will be more/less common than others. To fix this, we simply persist all current colors in the database, then switch our hashing list to what we really want.pull/1/head
parent
5eec3c9541
commit
547b7a3c6f
@ -0,0 +1,40 @@
|
|||||||
|
package org.thoughtcrime.securesms.contacts.avatars;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.thoughtcrime.securesms.color.MaterialColor;
|
||||||
|
import org.thoughtcrime.securesms.color.MaterialColors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for migrating legacy colors to modern colors. For normal color generation, use
|
||||||
|
* {@link ContactColors}.
|
||||||
|
*/
|
||||||
|
public class ContactColorsLegacy {
|
||||||
|
|
||||||
|
private static final String[] LEGACY_PALETTE = new String[] {
|
||||||
|
"red",
|
||||||
|
"pink",
|
||||||
|
"purple",
|
||||||
|
"deep_purple",
|
||||||
|
"indigo",
|
||||||
|
"blue",
|
||||||
|
"light_blue",
|
||||||
|
"cyan",
|
||||||
|
"teal",
|
||||||
|
"green",
|
||||||
|
"light_green",
|
||||||
|
"orange",
|
||||||
|
"deep_orange",
|
||||||
|
"amber",
|
||||||
|
"blue_grey"
|
||||||
|
};
|
||||||
|
|
||||||
|
public static MaterialColor generateFor(@NonNull String name) {
|
||||||
|
String serialized = LEGACY_PALETTE[Math.abs(name.hashCode()) % LEGACY_PALETTE.length];
|
||||||
|
try {
|
||||||
|
return MaterialColor.fromSerialized(serialized);
|
||||||
|
} catch (MaterialColor.UnknownColorException e) {
|
||||||
|
return ContactColors.generateFor(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue