package com.wangdaye.mysplash.common.utils.manager; import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.support.annotation.ColorInt; import android.support.annotation.DrawableRes; import android.support.annotation.MenuRes; import android.support.v4.content.ContextCompat; import android.support.v7.widget.Toolbar; import android.widget.ImageView; import com.wangdaye.mysplash.R; /** * Theme manager. * * This class is used to manage theme information. * * */ public class ThemeManager { private static ThemeManager instance; public static ThemeManager getInstance(Context context) { if (instance == null) { synchronized (ThemeManager.class) { if (instance == null) { instance = new ThemeManager(context); } } } return instance; } private boolean lightTheme; private static final String PREFERENCE_NAME = "mysplash_theme_manager"; private static final String KEY_LIGHT_THEME = "light_theme"; private ThemeManager(Context context) { SharedPreferences sharedPreferences = context.getSharedPreferences( PREFERENCE_NAME, Context.MODE_PRIVATE); this.lightTheme = sharedPreferences.getBoolean(KEY_LIGHT_THEME, true); } public boolean isLightTheme() { return lightTheme; } public void setLightTheme(Context context, boolean lightTheme) { this.lightTheme = lightTheme; SharedPreferences.Editor editor = context.getSharedPreferences( PREFERENCE_NAME, Context.MODE_PRIVATE).edit(); editor.putBoolean(KEY_LIGHT_THEME, lightTheme); editor.apply(); } @ColorInt public static int getPrimaryColor(Context context) { TypedArray a = context.obtainStyledAttributes(new int[] {R.attr.colorPrimary}); int color = a.getColor(0, ContextCompat.getColor(context, R.color.colorPrimary_light)); a.recycle(); return color; } @ColorInt public static int getPrimaryDarkColor(Context context) { TypedArray a = context.obtainStyledAttributes(new int[] {R.attr.colorPrimaryDark}); int color = a.getColor(0, ContextCompat.getColor(context, R.color.colorPrimaryDark_light)); a.recycle(); return color; } @ColorInt public static int getRootColor(Context context) { TypedArray a = context.obtainStyledAttributes(R.styleable.ThemeColor); int color = a.getColor( R.styleable.ThemeColor_root_color, ContextCompat.getColor(context, R.color.colorRoot_light)); a.recycle(); return color; } @ColorInt public static int getLineColor(Context context) { TypedArray a = context.obtainStyledAttributes(R.styleable.ThemeColor); int color = a.getColor( R.styleable.ThemeColor_line_color, ContextCompat.getColor(context, R.color.colorLine_light)); a.recycle(); return color; } @ColorInt public static int getTitleColor(Context context) { TypedArray a = context.obtainStyledAttributes(R.styleable.ThemeColor); int color = a.getColor( R.styleable.ThemeColor_title_color, ContextCompat.getColor(context, R.color.colorTextTitle_light)); a.recycle(); return color; } @ColorInt public static int getSubtitleColor(Context context) { TypedArray a = context.obtainStyledAttributes(R.styleable.ThemeColor); int color = a.getColor( R.styleable.ThemeColor_subtitle_color, ContextCompat.getColor(context, R.color.colorTextSubtitle_light)); a.recycle(); return color; } @ColorInt public static int getContentColor(Context context) { TypedArray a = context.obtainStyledAttributes(R.styleable.ThemeColor); int color = a.getColor( R.styleable.ThemeColor_content_color, ContextCompat.getColor(context, R.color.colorTextContent_light)); a.recycle(); return color; } public static void setNavigationIcon(Toolbar toolbar, @DrawableRes int lightResId, @DrawableRes int darkResId) { if (getInstance(toolbar.getContext()).isLightTheme()) { toolbar.setNavigationIcon(lightResId); } else { toolbar.setNavigationIcon(darkResId); } } public static void inflateMenu(Toolbar toolbar, @MenuRes int lightResId, @MenuRes int darkResId) { if (getInstance(toolbar.getContext()).isLightTheme()) { toolbar.inflateMenu(lightResId); } else { toolbar.inflateMenu(darkResId); } } public static void setImageResource(ImageView imageView, @DrawableRes int lightResId, @DrawableRes int darkResId) { if (getInstance(imageView.getContext()).isLightTheme()) { imageView.setImageResource(lightResId); } else { imageView.setImageResource(darkResId); } } }