package com.s16.inputmethod.skeyboard;
import com.s16.inputmethod.skeyboard.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.Align;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
public class KeyboardTheme {
private static Typeface sZawgyiTypeface;
private static Typeface sEmojiTypeface;
//private final int NUMBER_HINT_COUNT = 10;
// This should be aligned with Keyboard.keyIcon enum.
public static final int ICON_UNDEFINED = 0;
public static final int ICON_MIC_KEY = 1;
public static final int ICON_SETTINGS_KEY = 2;
public static final int ICON_LANGUAGE_KEY = 3;
public static final int ICON_SHIFT_KEY = 4;
public static final int ICON_SHIFTLOCKED_KEY = 5;
public static final int ICON_SPACE_KEY = 6;
public static final int ICON_TAB_KEY = 7;
public static final int ICON_RETURN_KEY = 8;
public static final int ICON_SEARCH_KEY = 9;
public static final int ICON_DELETE_KEY = 10;
public static final int ICON_DONE_KEY = 11;
public static final int ICON_EMOJI = 12;
public static final int ICON_DPAD_UP = 13;
public static final int ICON_DPAD_DOWN = 14;
public static final int ICON_DPAD_LEFT = 15;
public static final int ICON_DPAD_RIGHT = 16;
public static final int ICON_DPAD_CENTER = 17;
public static final int ICON_HINT_POPUP = 18;
private static final int ICON_LAST = ICON_HINT_POPUP;
private static int[] mIconValues;
static {
mIconValues = new int[ICON_LAST + 1];
mIconValues[ICON_UNDEFINED] = ICON_LAST;
mIconValues[ICON_MIC_KEY] = 0xF022;
mIconValues[ICON_SETTINGS_KEY] = 0xE013;
mIconValues[ICON_LANGUAGE_KEY] = 0xE073;
mIconValues[ICON_SHIFT_KEY] = 0xF026;
mIconValues[ICON_SHIFTLOCKED_KEY] = 0xF027;
mIconValues[ICON_SPACE_KEY] = 0xF024;
mIconValues[ICON_TAB_KEY] = 0xF029;
mIconValues[ICON_RETURN_KEY] = 0xF028;
mIconValues[ICON_SEARCH_KEY] = 0xE012;
mIconValues[ICON_DELETE_KEY] = 0xE041;
mIconValues[ICON_DONE_KEY] = 0xE018;
mIconValues[ICON_EMOJI] = 0xE017;
mIconValues[ICON_DPAD_UP] = 0xF035;
mIconValues[ICON_DPAD_DOWN] = 0xF036;
mIconValues[ICON_DPAD_LEFT] = 0xF033;
mIconValues[ICON_DPAD_RIGHT] = 0xF034;
mIconValues[ICON_DPAD_CENTER] = 0xF068;
mIconValues[ICON_HINT_POPUP] = 0x2026;
}
public static final int THEME_BASIC = 0;
public static final int THEME_STONE = 1;
public static final int THEME_WHITE = 2;
public static final int THEME_IPHONE = 3;
public static final int THEME_GINGERBREAD = 4;
public static final int THEME_HOLO = 5;
public static final int THEME_KITKLP = 6;
public static final int THEME_GALAXY = 7;
public static final int THEME_PINK = 8;
public static final int THEME_SAMSUNG_WHITE = 9;
public static final int THEME_IOS_LIGHT = 10;
public static final int THEME_IOS_DARK = 11;
public static final int THEME_MATERIAL_LIGHT = 12;
public static final int THEME_MATERIAL_DARK = 13;
private static int[] mThemesResIdArray = new int[] {
R.style.KeyboardBaseView_basic,
R.style.KeyboardBaseView_stone,
R.style.KeyboardBaseView_white,
R.style.KeyboardBaseView_iphone,
R.style.KeyboardBaseView_gingerbread,
R.style.KeyboardBaseView_holo,
R.style.KeyboardBaseView_kitkat,
R.style.KeyboardBaseView_galaxy,
R.style.KeyboardBaseView_pink,
R.style.KeyboardBaseView_samsungwhite,
R.style.KeyboardBaseView_ioslight,
R.style.KeyboardBaseView_iosdark,
R.style.KeyboardBaseView_materiallight,
R.style.KeyboardBaseView_materialdark
};
public static class ThemedIconsParams {
public Drawable keyHintPopup;
public Drawable spaceKeyIcon;
public Drawable spaceKeyIconModifier;
public Drawable spaceAutoCompletionIndicator;
}
public static Typeface getZawgyiTypeFace(Context context) {
if(sZawgyiTypeface == null) {
sZawgyiTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/zawgyi.ttf");
}
return sZawgyiTypeface;
}
public static Typeface getEmojiTypeFace(Context context) {
if(sEmojiTypeface == null) {
sEmojiTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/emoji.ttf");
}
return sEmojiTypeface;
}
public static void getRgbColor(int color, float[] argb) {
argb[0] = (color >> 24) & 0xFF;
argb[1] = (color >> 16) & 0xFF;
argb[2] = (color >> 8) & 0xFF;
argb[3] = (color >> 0) & 0xFF;
}
public static int getDarkerColor(int color) {
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
hsv[2] *= 0.8f; // value component
return Color.HSVToColor(hsv);
}
public static int toGrayscale(int color) {
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
int gray = (int) (red * 0.3 + green * 0.59 + blue * 0.11);
return Color.rgb(gray, gray, gray);
}
public static String getIconicLabel(int iconId) {
if (iconId <= ICON_UNDEFINED || iconId > ICON_LAST)
return null;
return String.valueOf((char)mIconValues[iconId]);
}
public static int getThemeResId(int themeId) {
return mThemesResIdArray[themeId];
}
public static BitmapDrawable createSpaceKeyIconDrawable(Context context, final int color) {
final Bitmap bitmapSpace = createSpaceKeyIcon(context, color);
if(bitmapSpace != null) {
BitmapDrawable spaceKeyIconModifier = new BitmapDrawable(context.getResources(), bitmapSpace);
spaceKeyIconModifier.setBounds(0, 0, bitmapSpace.getWidth(), bitmapSpace.getHeight());
return spaceKeyIconModifier;
}
return null;
}
public static Bitmap createSpaceKeyIcon(Context context, final int color) {
final Resources res = context.getResources();
final int width = res.getDimensionPixelSize(R.dimen.key_icon_width);
final int height = res.getDimensionPixelSize(R.dimen.key_icon_height);
final int textSize = res.getDimensionPixelSize(R.dimen.key_icon_text_size);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextAlign(Align.CENTER);
paint.setAlpha(255);
paint.setTextSize(textSize);
paint.setTypeface(getZawgyiTypeFace(context));
final Bitmap buffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(buffer);
canvas.drawColor(res.getColor(R.color.transparent), PorterDuff.Mode.CLEAR);
final String text = String.valueOf((char)mIconValues[ICON_SPACE_KEY]);
Rect textBounds = new Rect();
paint.getTextBounds(text, 0, 1, textBounds);
paint.setColor(color);
final float x = width * 0.5f;
final float y = height - textBounds.height();
canvas.drawText(text, x, y, paint);
return buffer;
}
}