package org.thoughtcrime.securesms.color;
import android.content.Context;
import android.support.annotation.NonNull;
import android.util.TypedValue;
import org.thoughtcrime.securesms.R;
public enum MaterialColor {
RED (R.color.red_400, R.color.red_700, R.color.red_700, R.color.red_900, "red"),
PINK (R.color.pink_400, R.color.pink_700, R.color.pink_700, R.color.pink_900, "pink"),
PURPLE (R.color.purple_400, R.color.purple_700, R.color.purple_700, R.color.purple_900, "purple"),
DEEP_PURPLE(R.color.deep_purple_400, R.color.deep_purple_700, R.color.deep_purple_700, R.color.deep_purple_900, "deep_purple"),
INDIGO (R.color.indigo_400, R.color.indigo_700, R.color.indigo_700, R.color.indigo_900, "indigo"),
BLUE (R.color.blue_500, R.color.blue_700, R.color.blue_700, R.color.blue_900, "blue"),
LIGHT_BLUE (R.color.light_blue_500, R.color.light_blue_700, R.color.light_blue_700, R.color.light_blue_900, "light_blue"),
CYAN (R.color.cyan_500, R.color.cyan_700, R.color.cyan_700, R.color.cyan_900, "cyan"),
TEAL (R.color.teal_500, R.color.teal_700, R.color.teal_700, R.color.teal_900, "teal"),
GREEN (R.color.green_500, R.color.green_700, R.color.green_700, R.color.green_900, "green"),
LIGHT_GREEN(R.color.light_green_600, R.color.light_green_700, R.color.light_green_700, R.color.light_green_900, "light_green"),
LIME (R.color.lime_500, R.color.lime_700, R.color.lime_700, R.color.lime_900, "lime"),
YELLOW (R.color.yellow_500, R.color.yellow_700, R.color.yellow_700, R.color.yellow_900, "yellow"),
AMBER (R.color.amber_600, R.color.amber_700, R.color.amber_700, R.color.amber_900, "amber"),
ORANGE (R.color.orange_500, R.color.orange_700, R.color.orange_700, R.color.orange_900, "orange"),
DEEP_ORANGE(R.color.deep_orange_500, R.color.deep_orange_700, R.color.deep_orange_700, R.color.deep_orange_900, "deep_orange"),
BROWN (R.color.brown_500, R.color.brown_700, R.color.brown_700, R.color.brown_900, "brown"),
GREY (R.color.grey_500, R.color.grey_700, R.color.grey_700, R.color.grey_900, "grey"),
BLUE_GREY (R.color.blue_grey_500, R.color.blue_grey_700, R.color.blue_grey_700, R.color.blue_grey_900, "blue_grey"),
GROUP (GREY.conversationColorLight, R.color.textsecure_primary, R.color.textsecure_primary_dark,
GREY.conversationColorDark, R.color.gray95, R.color.black,
"group_color");
private final int conversationColorLight;
private final int actionBarColorLight;
private final int statusBarColorLight;
private final int conversationColorDark;
private final int actionBarColorDark;
private final int statusBarColorDark;
private final String serialized;
MaterialColor(int conversationColorLight, int actionBarColorLight,
int statusBarColorLight, int conversationColorDark,
int actionBarColorDark, int statusBarColorDark,
String serialized)
{
this.conversationColorLight = conversationColorLight;
this.actionBarColorLight = actionBarColorLight;
this.statusBarColorLight = statusBarColorLight;
this.conversationColorDark = conversationColorDark;
this.actionBarColorDark = actionBarColorDark;
this.statusBarColorDark = statusBarColorDark;
this.serialized = serialized;
}
MaterialColor(int lightColor, int darkColor,
int lightStatusBarColor, int darkStatusBarColor, String serialized)
{
this(lightColor, lightColor, lightStatusBarColor,
darkColor, darkColor, darkStatusBarColor, serialized);
}
public int toConversationColor(@NonNull Context context) {
if (getAttribute(context, R.attr.theme_type, "light").equals("dark")) {
return context.getResources().getColor(conversationColorDark);
} else {
return context.getResources().getColor(conversationColorLight);
}
}
public int toActionBarColor(@NonNull Context context) {
if (getAttribute(context, R.attr.theme_type, "light").equals("dark")) {
return context.getResources().getColor(actionBarColorDark);
} else {
return context.getResources().getColor(actionBarColorLight);
}
}
public int toStatusBarColor(@NonNull Context context) {
if (getAttribute(context, R.attr.theme_type, "light").equals("dark")) {
return context.getResources().getColor(statusBarColorDark);
} else {
return context.getResources().getColor(statusBarColorLight);
}
}
public boolean represents(Context context, int colorValue) {
return context.getResources().getColor(conversationColorDark) == colorValue ||
context.getResources().getColor(conversationColorLight) == colorValue ||
context.getResources().getColor(actionBarColorDark) == colorValue ||
context.getResources().getColor(actionBarColorLight) == colorValue ||
context.getResources().getColor(statusBarColorLight) == colorValue ||
context.getResources().getColor(statusBarColorDark) == colorValue;
}
public String serialize() {
return serialized;
}
private String getAttribute(Context context, int attribute, String defaultValue) {
TypedValue outValue = new TypedValue();
if (context.getTheme().resolveAttribute(attribute, outValue, true)) {
return outValue.coerceToString().toString();
} else {
return defaultValue;
}
}
public static MaterialColor fromSerialized(String serialized) throws UnknownColorException {
for (MaterialColor color : MaterialColor.values()) {
if (color.serialized.equals(serialized)) return color;
}
throw new UnknownColorException("Unknown color: " + serialized);
}
public static class UnknownColorException extends Exception {
public UnknownColorException(String message) {
super(message);
}
}
}