package com.moez.QKSMS.common; import android.content.Context; import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.graphics.Typeface; import android.preference.PreferenceManager; import com.moez.QKSMS.R; import com.moez.QKSMS.ui.ThemeManager; import com.moez.QKSMS.ui.settings.SettingsFragment; public class FontManager { public static final int TEXT_SIZE_SMALL = 0; public static final int TEXT_SIZE_NORMAL = 1; public static final int TEXT_SIZE_LARGE = 2; public static final int TEXT_SIZE_LARGEST = 3; // Attribute codes public static final int TEXT_TYPE_PRIMARY_BOLD = 0x0; public static final int TEXT_TYPE_PRIMARY = 0x1; public static final int TEXT_TYPE_SECONDARY = 0x2; public static final int TEXT_TYPE_TERTIARY = 0x3; public static final int TEXT_TYPE_CATEGORY = 0x4; public static final int TEXT_TYPE_DIALOG_TITLE = 0x5; public static final int TEXT_TYPE_DIALOG_MESSAGE = 0x6; public static final int TEXT_TYPE_DIALOG_BUTTON = 0x7; public static final int TEXT_TYPE_TOOLBAR = 0x8; private static int getFontFamily(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return Integer.parseInt(prefs.getString(SettingsFragment.FONT_FAMILY, "0")); } public static int getTextSize(Context context, int type) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); int fontSize = Integer.parseInt(prefs.getString(SettingsFragment.FONT_SIZE, "1")); switch (type) { case TEXT_TYPE_TERTIARY: if (fontSize == TEXT_SIZE_SMALL) return 10; if (fontSize == TEXT_SIZE_NORMAL) return 12; if (fontSize == TEXT_SIZE_LARGE) return 14; if (fontSize == TEXT_SIZE_LARGEST) return 16; break; // All further cases do the same checks, so we might as will just break and return the default value case TEXT_TYPE_SECONDARY: case TEXT_TYPE_DIALOG_BUTTON: case TEXT_TYPE_CATEGORY: if (fontSize == TEXT_SIZE_SMALL) return 12; if (fontSize == TEXT_SIZE_NORMAL) return 14; if (fontSize == TEXT_SIZE_LARGE) return 16; if (fontSize == TEXT_SIZE_LARGEST) return 18; break; case TEXT_TYPE_PRIMARY_BOLD: case TEXT_TYPE_PRIMARY: case TEXT_TYPE_DIALOG_MESSAGE: if (fontSize == TEXT_SIZE_SMALL) return 14; if (fontSize == TEXT_SIZE_NORMAL) return 16; if (fontSize == TEXT_SIZE_LARGE) return 18; if (fontSize == TEXT_SIZE_LARGEST) return 22; break; case TEXT_TYPE_DIALOG_TITLE: case TEXT_TYPE_TOOLBAR: if (fontSize == TEXT_SIZE_SMALL) return 18; if (fontSize == TEXT_SIZE_NORMAL) return 20; if (fontSize == TEXT_SIZE_LARGE) return 22; if (fontSize == TEXT_SIZE_LARGEST) return 26; break; } return 14; } public static boolean getIsFontHeavy(int type) { switch (type) { case FontManager.TEXT_TYPE_PRIMARY: case FontManager.TEXT_TYPE_SECONDARY: case FontManager.TEXT_TYPE_TERTIARY: case FontManager.TEXT_TYPE_DIALOG_MESSAGE: case FontManager.TEXT_TYPE_TOOLBAR: return false; case FontManager.TEXT_TYPE_PRIMARY_BOLD: case FontManager.TEXT_TYPE_CATEGORY: case FontManager.TEXT_TYPE_DIALOG_TITLE: case FontManager.TEXT_TYPE_DIALOG_BUTTON: return true; } return false; } public static ColorStateList getTextColor(Context context, int type) { // Colors and font weight switch (type) { case FontManager.TEXT_TYPE_PRIMARY_BOLD: case FontManager.TEXT_TYPE_PRIMARY: boolean isNight = ThemeManager.getTheme() == ThemeManager.Theme.DARK || ThemeManager.getTheme() == ThemeManager.Theme.BLACK; int id = isNight ? R.color.text_primary_dark : R.color.text_primary_light; return context.getResources().getColorStateList(id); case FontManager.TEXT_TYPE_SECONDARY: return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundSecondary()); case FontManager.TEXT_TYPE_TERTIARY: return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundSecondary()); case FontManager.TEXT_TYPE_CATEGORY: return ColorStateList.valueOf(ThemeManager.getColor()); case FontManager.TEXT_TYPE_DIALOG_TITLE: return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundPrimary()); case FontManager.TEXT_TYPE_DIALOG_MESSAGE: return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundSecondary()); case FontManager.TEXT_TYPE_DIALOG_BUTTON: return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundPrimary()); case FontManager.TEXT_TYPE_TOOLBAR: return ColorStateList.valueOf(ThemeManager.getTextOnColorPrimary()); } return ColorStateList.valueOf(ThemeManager.getTextOnBackgroundPrimary()); } private static int getFontWeight(Context context, boolean heavy) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); int fontWeight = Integer.parseInt(prefs.getString(SettingsFragment.FONT_WEIGHT, "0")); int fontFamily = getFontFamily(context); if (!heavy) { return fontWeight; } // Otherwise, get the heavy font weight. if (fontWeight == TypefaceManager.TextWeight.LIGHT) { return TypefaceManager.TextWeight.NORMAL; } else if (fontFamily == TypefaceManager.FontFamily.ROBOTO) { return TypefaceManager.TextWeight.MEDIUM; } else { return TypefaceManager.TextWeight.BOLD; } } public static Typeface getFont(Context context, int type) { int fontFamily = getFontFamily(context); int fontWeight = getFontWeight(context, getIsFontHeavy(type)); return TypefaceManager.obtainTypeface(context, fontFamily, fontWeight); } public static Typeface getFont(Context context) { int fontFamily = getFontFamily(context); int fontWeight = getFontWeight(context, false); return TypefaceManager.obtainTypeface(context, fontFamily, fontWeight); } }