package org.horaapps.leafpic.util;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.ColorRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.SwitchCompat;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.ScrollView;
import android.widget.SeekBar;
import android.widget.TextView;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.iconics.typeface.IIcon;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
* Created by dnld on 02/08/16.
*/
public class ThemeHelper {
public static final int DARK_THEME = 2;
public static final int LIGHT_THEME = 1;
public static final int AMOLED_THEME = 3;
private PreferenceUtil SP;
private Context context;
private int baseTheme;
private int primaryColor;
private int accentColor;
public ThemeHelper(Context context) {
this.SP = PreferenceUtil.getInstance(context);
this.context = context;
updateTheme();
}
public void updateTheme(){
this.primaryColor = SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_primary_color),
getColor(org.horaapps.leafpic.R.color.md_indigo_500));
this.accentColor = SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_accent_color),
getColor(org.horaapps.leafpic.R.color.md_light_blue_500));
baseTheme = SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_base_theme), LIGHT_THEME);
}
public int getPrimaryColor() {
return primaryColor;
}
public int getAccentColor() {
return accentColor;
}
public int getBaseTheme(){ return baseTheme; }
public static int getPrimaryColor(Context context) {
PreferenceUtil SP = PreferenceUtil.getInstance(context);
return SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_primary_color),
ContextCompat.getColor(context, org.horaapps.leafpic.R.color.md_indigo_500));
}
public void setBaseTheme(int baseTheme, boolean permanent) {
if(permanent) {
// TODO: 09/08/16 to
} else this.baseTheme = baseTheme;
}
public static int getAccentColor(Context context) {
PreferenceUtil SP = PreferenceUtil.getInstance(context);
return SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_accent_color),
getColor(context, org.horaapps.leafpic.R.color.md_light_blue_500));
}
public static int getBaseTheme(Context context) {
PreferenceUtil SP = PreferenceUtil.getInstance(context);
return SP.getInt(context.getString(org.horaapps.leafpic.R.string.preference_base_theme), LIGHT_THEME);
}
public int getColor(@ColorRes int color) {
return ContextCompat.getColor(context, color);
}
public static int getColor(Context context, @ColorRes int color) {
return ContextCompat.getColor(context, color);
}
public void themeSeekBar(SeekBar bar) {
bar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(getAccentColor(), PorterDuff.Mode.SRC_IN));
bar.getThumb().setColorFilter(new PorterDuffColorFilter(getAccentColor(),PorterDuff.Mode.SRC_IN));
}
public int getBackgroundColor(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_dark_background);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_black_1000);break;
case LIGHT_THEME:
default:color = getColor(org.horaapps.leafpic.R.color.md_light_background);
}
return color;
}
public int getInvertedBackgroundColor(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_light_background);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_light_background);break;
case LIGHT_THEME:
default:color = getColor(org.horaapps.leafpic.R.color.md_black_1000);
}
return color;
}
public int getTextColor(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_grey_200);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_grey_200);break;
case LIGHT_THEME:
default:color = getColor(org.horaapps.leafpic.R.color.md_grey_800);
}
return color;
}
public int getSubTextColor(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_grey_400);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_grey_400);break;
case LIGHT_THEME:
default:color = getColor(org.horaapps.leafpic.R.color.md_grey_600);
}
return color;
}
public int getCardBackgroundColor(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_dark_cards);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_black_1000);break;
case LIGHT_THEME:default:color = getColor(org.horaapps.leafpic.R.color.md_light_cards);
}
return color;
}
public int getIconColor(){
int color;
switch (baseTheme){
case DARK_THEME: case AMOLED_THEME: color = getColor(org.horaapps.leafpic.R.color.md_white_1000);break;
case LIGHT_THEME: default: color = getColor(org.horaapps.leafpic.R.color.md_light_primary_icon);
}
return color;
}
public IconicsDrawable getToolbarIcon(IIcon icon) {
return new IconicsDrawable(context).icon(icon).color(Color.WHITE).sizeDp(18);
}
public IconicsDrawable getIcon(IIcon icon) {
return new IconicsDrawable(context).icon(icon).color(getIconColor());
}
public static IconicsDrawable getIcon(Context context, IIcon icon) {
return new IconicsDrawable(context).icon(icon).color(Color.WHITE);
}
public int getDrawerBackground(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_dark_cards);break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_black_1000);break;
case LIGHT_THEME:
default: color = getColor(org.horaapps.leafpic.R.color.md_light_cards);
}
return color;
}
public Drawable getPlaceHolder(){
switch (baseTheme){
case DARK_THEME : return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty);
case AMOLED_THEME : return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty_amoled);
case LIGHT_THEME: return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty_white);
}
return null;
}
public static Drawable getPlaceHolder(Context context){
switch (getBaseTheme(context)){
case DARK_THEME : return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty);
case AMOLED_THEME : return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty_amoled);
case LIGHT_THEME: return ContextCompat.getDrawable(context, org.horaapps.leafpic.R.drawable.ic_empty_white);
}
return null;
}
public int getDialogStyle(){
int style;
switch (getBaseTheme()){
case DARK_THEME: style = org.horaapps.leafpic.R.style.AlertDialog_Dark;break;
case AMOLED_THEME: style = org.horaapps.leafpic.R.style.AlertDialog_Dark_Amoled;break;
case LIGHT_THEME: default: style = org.horaapps.leafpic.R.style.AlertDialog_Light;break;
}
return style;
}
public int getPopupToolbarStyle(){
int style;
switch (getBaseTheme()){
case DARK_THEME: style = org.horaapps.leafpic.R.style.DarkActionBarMenu;break;
case AMOLED_THEME: style = org.horaapps.leafpic.R.style.AmoledDarkActionBarMenu;break;
case LIGHT_THEME: default: style = org.horaapps.leafpic.R.style.LightActionBarMenu;
}
return style;
}
public ArrayAdapter<String> getSpinnerAdapter(ArrayList<String> items) {
switch (getBaseTheme()){
case AMOLED_THEME:
case DARK_THEME: return new ArrayAdapter<String>(context, org.horaapps.leafpic.R.layout.spinner_item_light, items);
case LIGHT_THEME: default: return new ArrayAdapter<String>(context, org.horaapps.leafpic.R.layout.spinner_item_dark, items);
}
}
public int getDefaultThemeToolbarColor3th(){
int color;
switch (baseTheme){
case DARK_THEME:color = getColor(org.horaapps.leafpic.R.color.md_black_1000); break;
case AMOLED_THEME:color = getColor(org.horaapps.leafpic.R.color.md_blue_grey_800);break;
case LIGHT_THEME: default: color = getColor(org.horaapps.leafpic.R.color.md_blue_grey_800);
}
return color;
}
private ColorStateList getRadioButtonColor(){
return new ColorStateList(
new int[][]{
new int[]{ -android.R.attr.state_enabled }, //disabled
new int[]{ android.R.attr.state_enabled } //enabled
}, new int[] { getTextColor(), getAccentColor() });
}
public void updateRadioButtonColor(RadioButton radioButton) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
radioButton.setButtonTintList(getRadioButtonColor());
radioButton.setTextColor(getTextColor());
}
}
public void setRadioTextButtonColor(RadioButton radioButton, int color) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
radioButton.setButtonTintList(getRadioButtonColor());
radioButton.setTextColor(color);
}
}
public void updateSwitchColor(SwitchCompat sw, int color){
sw.getThumbDrawable().setColorFilter(sw.isChecked() ? color : getSubTextColor(), PorterDuff.Mode.MULTIPLY);
sw.getTrackDrawable().setColorFilter(sw.isChecked() ? ColorPalette.getTransparentColor(color,100): getBackgroundColor(), PorterDuff.Mode.MULTIPLY);
}
public void setScrollViewColor(ScrollView scr){
try
{
Field mScrollCacheField = View.class.getDeclaredField("mScrollCache");
mScrollCacheField.setAccessible(true);
Object mScrollCache = mScrollCacheField.get(scr); // scr is your Scroll View
Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar");
scrollBarField.setAccessible(true);
Object scrollBar = scrollBarField.get(mScrollCache);
Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class);
method.setAccessible(true);
ColorDrawable ColorDraw = new ColorDrawable(getPrimaryColor());
method.invoke(scrollBar, ColorDraw);
} catch(Exception e) {
e.printStackTrace();
}
}
public void setColorScrollBarDrawable(Drawable drawable) {
drawable.setColorFilter(new PorterDuffColorFilter(getPrimaryColor(), PorterDuff.Mode.SRC_ATOP));
}
public static void setCursorDrawableColor(EditText editText, int color) {
try {
Field fCursorDrawableRes =
TextView.class.getDeclaredField("mCursorDrawableRes");
fCursorDrawableRes.setAccessible(true);
int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
Object editor = fEditor.get(editText);
Class<?> clazz = editor.getClass();
Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
fCursorDrawable.setAccessible(true);
Drawable[] drawables = new Drawable[2];
drawables[0] = ContextCompat.getDrawable(editText.getContext(), mCursorDrawableRes);
drawables[1] = ContextCompat.getDrawable(editText.getContext(), mCursorDrawableRes);
drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
fCursorDrawable.set(editor, drawables);
} catch (final Throwable ignored) { }
}
}