diff options
Diffstat (limited to 'java/src')
8 files changed, 115 insertions, 99 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 3a9423f4b..b3c5ed75d 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -52,9 +52,9 @@ public class Key { public final int mAltCode; /** Label to display */ - public final CharSequence mLabel; + public final String mLabel; /** Hint label to display on the key in conjunction with the label */ - public final CharSequence mHintLabel; + public final String mHintLabel; /** Flags of the label */ private final int mLabelFlags; private static final int LABEL_FLAGS_ALIGN_LEFT = 0x01; @@ -187,7 +187,7 @@ public class Key { /** * This constructor is being used only for key in popup suggestions pane. */ - public Key(Keyboard.Params params, CharSequence label, CharSequence hintLabel, Drawable icon, + public Key(Keyboard.Params params, String label, String hintLabel, Drawable icon, int code, CharSequence outputText, int x, int y, int width, int height) { mHeight = height - params.mVerticalGap; mHorizontalGap = params.mHorizontalGap; @@ -260,7 +260,7 @@ public class Key { // Update row to have current x coordinate. row.setXPos(keyXPos + keyWidth); - final String[] moreKeys = style.getTextArray(keyAttr, + final String[] moreKeys = style.getStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of // config_digit_more_keys_enabled. @@ -291,11 +291,11 @@ public class Key { final int disabledIconAttrId = KeyboardIconsSet.getIconAttrId(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled, KeyboardIconsSet.ICON_UNDEFINED)); mDisabledIcon = iconsSet.getIconByAttrId(disabledIconAttrId); - mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); + mHintLabel = style.getString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); - mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel); + mLabel = style.getString(keyAttr, R.styleable.Keyboard_Key_keyLabel); mLabelFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags, 0); - mOutputText = style.getText(keyAttr, R.styleable.Keyboard_Key_keyOutputText); + mOutputText = style.getString(keyAttr, R.styleable.Keyboard_Key_keyOutputText); // Choose the first letter of the label as primary code if not // specified. final int code = style.getInt(keyAttr, R.styleable.Keyboard_Key_code, diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index c548f1145..8c386dad2 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -245,10 +245,10 @@ public class Keyboard { } // TODO: Remove this method. - public CharSequence adjustLabelCase(CharSequence label) { + public String adjustLabelCase(String label) { if (mId.isAlphabetKeyboard() && isShiftedOrShiftLocked() && !TextUtils.isEmpty(label) && label.length() < 3 && Character.isLowerCase(label.charAt(0))) { - return label.toString().toUpperCase(mId.mLocale); + return label.toUpperCase(mId.mLocale); } return label; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java index d95c3b3af..8db8c9460 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java @@ -39,16 +39,14 @@ public class KeyboardId { public static final int MODE_NUMBER = 5; public static final int ELEMENT_ALPHABET = 0; - /* TODO: Implement alphabet variant shift keyboard. - public static final int ELEMENT_ALPHABET_MANUAL_TEMPORARY_SHIFT = 1; - public static final int ELEMENT_ALPHABET_AUTOMATIC_TEMPORARY_SHIFT = 2; - public static final int ELEMENT_ALPHABET_SHIFT_LOCK = 3; - public static final int ELEMENT_ALPHABET_SHIFT_LOCK_SHIFT = 4; - */ + public static final int ELEMENT_ALPHABET_MANUAL_SHIFTED = 1; + public static final int ELEMENT_ALPHABET_AUTOMATIC_SHIFTED = 2; + public static final int ELEMENT_ALPHABET_SHIFT_LOCKED = 3; + public static final int ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED = 4; public static final int ELEMENT_SYMBOLS = 5; - public static final int ELEMENT_SYMBOLS_SHIFT = 6; + public static final int ELEMENT_SYMBOLS_SHIFTED = 6; public static final int ELEMENT_PHONE = 7; - public static final int ELEMENT_PHONE_SHIFT = 8; + public static final int ELEMENT_PHONE_SHIFTED = 8; public static final int ELEMENT_NUMBER = 9; private static final int F2KEY_MODE_NONE = 0; @@ -60,7 +58,7 @@ public class KeyboardId { public final int mOrientation; public final int mWidth; public final int mMode; - public final int mElementState; + public final int mElementId; private final int mInputType; private final int mImeOptions; private final boolean mSettingsKeyEnabled; @@ -70,14 +68,14 @@ public class KeyboardId { private final int mHashCode; - public KeyboardId(int elementState, Locale locale, int orientation, int width, int mode, + public KeyboardId(int elementId, Locale locale, int orientation, int width, int mode, int inputType, int imeOptions, boolean settingsKeyEnabled, boolean clobberSettingsKey, boolean shortcutKeyEnabled, boolean hasShortcutKey) { this.mLocale = locale; this.mOrientation = orientation; this.mWidth = width; this.mMode = mode; - this.mElementState = elementState; + this.mElementId = elementId; this.mInputType = inputType; this.mImeOptions = imeOptions; this.mSettingsKeyEnabled = settingsKeyEnabled; @@ -91,7 +89,7 @@ public class KeyboardId { private static int hashCode(KeyboardId id) { return Arrays.hashCode(new Object[] { id.mOrientation, - id.mElementState, + id.mElementId, id.mMode, id.mWidth, id.navigateAction(), @@ -109,7 +107,7 @@ public class KeyboardId { if (other == this) return true; return other.mOrientation == this.mOrientation - && other.mElementState == this.mElementState + && other.mElementId == this.mElementId && other.mMode == this.mMode && other.mWidth == this.mWidth && other.navigateAction() == this.navigateAction() @@ -123,19 +121,19 @@ public class KeyboardId { } public boolean isAlphabetKeyboard() { - return mElementState < ELEMENT_SYMBOLS; + return mElementId < ELEMENT_SYMBOLS; } public boolean isSymbolsKeyboard() { - return mElementState == ELEMENT_SYMBOLS || mElementState == ELEMENT_SYMBOLS_SHIFT; + return mElementId == ELEMENT_SYMBOLS || mElementId == ELEMENT_SYMBOLS_SHIFTED; } public boolean isPhoneKeyboard() { - return mElementState == ELEMENT_PHONE || mElementState == ELEMENT_PHONE_SHIFT; + return mElementId == ELEMENT_PHONE || mElementId == ELEMENT_PHONE_SHIFTED; } public boolean isPhoneShiftKeyboard() { - return mElementState == ELEMENT_PHONE_SHIFT; + return mElementId == ELEMENT_PHONE_SHIFTED; } public boolean navigateAction() { @@ -190,7 +188,7 @@ public class KeyboardId { @Override public String toString() { return String.format("[%s %s %s%d %s %s %s%s%s%s%s%s%s]", - elementStateToString(mElementState), + elementIdToName(mElementId), mLocale, (mOrientation == 1 ? "port" : "land"), mWidth, modeName(mMode), @@ -213,19 +211,17 @@ public class KeyboardId { && TextUtils.equals(a.privateImeOptions, b.privateImeOptions); } - public static String elementStateToString(int elementState) { - switch (elementState) { + public static String elementIdToName(int elementId) { + switch (elementId) { case ELEMENT_ALPHABET: return "alphabet"; - /* TODO: Implement alphabet variant shift keyboard. - case ELEMENT_ALPHABET_MANUAL_TEMPORARY_SHIFT: return "alphabetManualTemporaryShift"; - case ELEMENT_ALPHABET_AUTOMATIC_TEMPORARY_SHIFT: return "alphabetAutomaticTemporaryShift"; - case ELEMENT_ALPHABET_SHIFT_LOCK: return "alphabetShiftLock"; - case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFT: return "alphabetShiftLockShift"; - */ + case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted"; + case ELEMENT_ALPHABET_AUTOMATIC_SHIFTED: return "alphabetAutomaticShifted"; + case ELEMENT_ALPHABET_SHIFT_LOCKED: return "alphabetShiftLocked"; + case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED: return "alphabetShiftLockShifted"; case ELEMENT_SYMBOLS: return "symbols"; - case ELEMENT_SYMBOLS_SHIFT: return "symbolsShift"; + case ELEMENT_SYMBOLS_SHIFTED: return "symbolsShifted"; case ELEMENT_PHONE: return "phone"; - case ELEMENT_PHONE_SHIFT: return "phoneShift"; + case ELEMENT_PHONE_SHIFTED: return "phoneShifted"; case ELEMENT_NUMBER: return "number"; default: return null; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java index 285252044..c7f964aaa 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java @@ -40,6 +40,7 @@ import java.io.IOException; import java.lang.ref.SoftReference; import java.util.HashMap; import java.util.Locale; +import java.util.Map; /** * This class represents a set of keyboards. Each of them represents a different keyboard @@ -57,7 +58,18 @@ public class KeyboardSet { private final Context mContext; private final Params mParams; - private static class Params { + static class KeyboardElement { + final int mElementId; + final int mLayoutId; + final boolean mAutoGenerate; + KeyboardElement(int elementId, int layoutId, boolean autoGenerate) { + mElementId = elementId; + mLayoutId = layoutId; + mAutoGenerate = autoGenerate; + } + } + + static class Params { int mMode; int mInputType; int mImeOptions; @@ -69,7 +81,8 @@ public class KeyboardSet { Locale mLocale; int mOrientation; int mWidth; - final HashMap<Integer, Integer> mElementKeyboards = new HashMap<Integer, Integer>(); + final Map<Integer, KeyboardElement> mElementKeyboards = + new HashMap<Integer, KeyboardElement>(); Params() {} } @@ -104,16 +117,18 @@ public class KeyboardSet { } private Keyboard getKeyboard(boolean isSymbols, boolean isShift) { - final int elementState = Builder.getElementState(mParams.mMode, isSymbols, isShift); - final int xmlId = mParams.mElementKeyboards.get(elementState); - final KeyboardId id = Builder.getKeyboardId(elementState, isSymbols, mParams); - final Keyboard keyboard = getKeyboard(mContext, xmlId, id); + final int elementId = KeyboardSet.getElementId(mParams.mMode, isSymbols, isShift); + final KeyboardElement keyboardElement = mParams.mElementKeyboards.get(elementId); + // TODO: If keyboardElement.mAutoGenerate is true, the keyboard will be auto generated + // based on keyboardElement.mKayoutId Keyboard XML definition. + final KeyboardId id = KeyboardSet.getKeyboardId(elementId, isSymbols, mParams); + final Keyboard keyboard = getKeyboard(mContext, keyboardElement.mLayoutId, id); return keyboard; } public KeyboardId getMainKeyboardId() { - final int elementState = Builder.getElementState(mParams.mMode, false, false); - return Builder.getKeyboardId(elementState, false, mParams); + final int elementId = KeyboardSet.getElementId(mParams.mMode, false, false); + return KeyboardSet.getKeyboardId(elementId, false, mParams); } private Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) { @@ -147,6 +162,30 @@ public class KeyboardSet { return keyboard; } + private static int getElementId(int mode, boolean isSymbols, boolean isShift) { + switch (mode) { + case KeyboardId.MODE_PHONE: + return (isSymbols && isShift) + ? KeyboardId.ELEMENT_PHONE_SHIFTED : KeyboardId.ELEMENT_PHONE; + case KeyboardId.MODE_NUMBER: + return KeyboardId.ELEMENT_NUMBER; + default: + if (isSymbols) { + return isShift + ? KeyboardId.ELEMENT_SYMBOLS_SHIFTED : KeyboardId.ELEMENT_SYMBOLS; + } + return KeyboardId.ELEMENT_ALPHABET; + } + } + + private static KeyboardId getKeyboardId(int elementId, boolean isSymbols, Params params) { + final boolean hasShortcutKey = params.mVoiceKeyEnabled + && (isSymbols != params.mVoiceKeyOnMain); + return new KeyboardId(elementId, params.mLocale, params.mOrientation, params.mWidth, + params.mMode, params.mInputType, params.mImeOptions, params.mSettingsKeyEnabled, + params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey); + } + public static class Builder { private final Context mContext; private final String mPackageName; @@ -211,38 +250,15 @@ public class KeyboardSet { try { parseKeyboardSet(mResources, R.xml.keyboard_set); } catch (Exception e) { - // + throw new RuntimeException(e.getMessage() + " in " + + mResources.getResourceName(R.xml.keyboard_set) + + " of locale " + mParams.mLocale); } finally { LocaleUtils.setSystemLocale(mResources, savedLocale); } return new KeyboardSet(mContext, mParams); } - // TODO: Move this method to KeyboardSet - static KeyboardId getKeyboardId(int elementState, boolean isSymbols, Params params) { - final boolean hasShortcutKey = params.mVoiceKeyEnabled - && (isSymbols != params.mVoiceKeyOnMain); - return new KeyboardId(elementState, params.mLocale, params.mOrientation, params.mWidth, - params.mMode, params.mInputType, params.mImeOptions, params.mSettingsKeyEnabled, - params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey); - } - - // TODO: Move this method to KeyboardSet - static int getElementState(int mode, boolean isSymbols, boolean isShift) { - switch (mode) { - case KeyboardId.MODE_PHONE: - return (isSymbols && isShift) - ? KeyboardId.ELEMENT_PHONE_SHIFT : KeyboardId.ELEMENT_PHONE; - case KeyboardId.MODE_NUMBER: - return KeyboardId.ELEMENT_NUMBER; - default: - if (isSymbols) { - return isShift ? KeyboardId.ELEMENT_SYMBOLS_SHIFT : KeyboardId.ELEMENT_SYMBOLS; - } - return KeyboardId.ELEMENT_ALPHABET; - } - } - private void parseKeyboardSet(Resources res, int resId) throws XmlPullParserException, IOException { final XmlResourceParser parser = res.getXml(resId); @@ -302,7 +318,10 @@ public class KeyboardSet { R.styleable.KeyboardSet_Element_elementName, 0); final int elementKeyboard = a.getResourceId( R.styleable.KeyboardSet_Element_elementKeyboard, 0); - mParams.mElementKeyboards.put(elementName, elementKeyboard); + final boolean elementAutoGenerate = a.getBoolean( + R.styleable.KeyboardSet_Element_elementAutoGenerate, false); + mParams.mElementKeyboards.put(elementName, new KeyboardElement( + elementName, elementKeyboard, elementAutoGenerate)); } finally { a.recycle(); } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index abc220e34..c2798bb33 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -557,7 +557,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { float positionX = centerX; if (key.mLabel != null) { // Switch the character to uppercase if shift is pressed - final CharSequence label = mKeyboard.adjustLabelCase(key.mLabel); + final String label = mKeyboard.adjustLabelCase(key.mLabel); // For characters, use large font. For labels like "Done", use smaller font. paint.setTypeface(key.selectTypeface(params.mKeyTextStyle)); final int labelSize = key.selectTextSize(params.mKeyLetterSize, @@ -639,7 +639,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { // Draw hint label. if (key.mHintLabel != null) { - final CharSequence hint = key.mHintLabel; + final String hint = key.mHintLabel; final int hintColor; final int hintSize; if (key.hasHintLabel()) { @@ -778,12 +778,12 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { return width; } - private static float getLabelWidth(CharSequence label, Paint paint) { + private static float getLabelWidth(String label, Paint paint) { paint.getTextBounds(label.toString(), 0, label.length(), sTextBounds); return sTextBounds.width(); } - public float getDefaultLabelWidth(CharSequence label, Paint paint) { + public float getDefaultLabelWidth(String label, Paint paint) { paint.setTextSize(mKeyDrawParams.mKeyLabelSize); paint.setTypeface(mKeyDrawParams.mKeyTextStyle); return getLabelWidth(label, paint); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java index faea38941..b7215ec1b 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java @@ -40,8 +40,8 @@ public class KeyStyles { private static final KeyStyle EMPTY_KEY_STYLE = new EmptyKeyStyle(); public interface KeyStyle { - public String[] getTextArray(TypedArray a, int index); - public CharSequence getText(TypedArray a, int index); + public String[] getStringArray(TypedArray a, int index); + public String getString(TypedArray a, int index); public int getInt(TypedArray a, int index, int defaultValue); public int getFlag(TypedArray a, int index, int defaultValue); } @@ -52,13 +52,13 @@ public class KeyStyles { } @Override - public String[] getTextArray(TypedArray a, int index) { - return parseTextArray(a, index); + public String[] getStringArray(TypedArray a, int index) { + return parseStringArray(a, index); } @Override - public CharSequence getText(TypedArray a, int index) { - return a.getText(index); + public String getString(TypedArray a, int index) { + return a.getString(index); } @Override @@ -71,16 +71,15 @@ public class KeyStyles { return a.getInt(index, defaultValue); } - protected static String[] parseTextArray(TypedArray a, int index) { + protected static String[] parseStringArray(TypedArray a, int index) { if (!a.hasValue(index)) return null; - final CharSequence text = a.getText(index); - return parseCsvText(text.toString(), a.getResources(), R.string.english_ime_name); + return parseCsvString(a.getString(index), a.getResources(), R.string.english_ime_name); } } /* package for test */ - static String[] parseCsvText(String rawText, Resources res, int packageNameResId) { + static String[] parseCsvString(String rawText, Resources res, int packageNameResId) { final String text = Utils.resolveStringResource(rawText, res, packageNameResId); final int size = text.length(); if (size == 0) { @@ -139,15 +138,15 @@ public class KeyStyles { private final HashMap<Integer, Object> mAttributes = new HashMap<Integer, Object>(); @Override - public String[] getTextArray(TypedArray a, int index) { + public String[] getStringArray(TypedArray a, int index) { return a.hasValue(index) - ? super.getTextArray(a, index) : (String[])mAttributes.get(index); + ? super.getStringArray(a, index) : (String[])mAttributes.get(index); } @Override - public CharSequence getText(TypedArray a, int index) { + public String getString(TypedArray a, int index) { return a.hasValue(index) - ? super.getText(a, index) : (CharSequence)mAttributes.get(index); + ? super.getString(a, index) : (String)mAttributes.get(index); } @Override @@ -170,10 +169,10 @@ public class KeyStyles { // TODO: Currently not all Key attributes can be declared as style. readInt(keyAttr, R.styleable.Keyboard_Key_code); readInt(keyAttr, R.styleable.Keyboard_Key_altCode); - readText(keyAttr, R.styleable.Keyboard_Key_keyLabel); - readText(keyAttr, R.styleable.Keyboard_Key_keyOutputText); - readText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); - readTextArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); + readString(keyAttr, R.styleable.Keyboard_Key_keyLabel); + readString(keyAttr, R.styleable.Keyboard_Key_keyOutputText); + readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); + readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags); readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon); readInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled); @@ -183,9 +182,9 @@ public class KeyStyles { readFlag(keyAttr, R.styleable.Keyboard_Key_keyActionFlags); } - private void readText(TypedArray a, int index) { + private void readString(TypedArray a, int index) { if (a.hasValue(index)) - mAttributes.put(index, a.getText(index)); + mAttributes.put(index, a.getString(index)); } private void readInt(TypedArray a, int index) { @@ -199,8 +198,8 @@ public class KeyStyles { mAttributes.put(index, a.getInt(index, 0) | (value != null ? value : 0)); } - private void readTextArray(TypedArray a, int index) { - final CharSequence[] value = parseTextArray(a, index); + private void readStringArray(TypedArray a, int index) { + final String[] value = parseStringArray(a, index); if (value != null) mAttributes.put(index, value); } diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java index bc8b7e3f7..38c31adce 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java @@ -43,6 +43,8 @@ public class KeyboardState { public void setAlphabetManualShiftedKeyboard(); public void setAlphabetAutomaticShiftedKeyboard(); public void setAlphabetShiftLockedKeyboard(); + // TODO: Add this. + //public void setAlphabetShiftLockShiftedKeyboard(); public void setSymbolsKeyboard(); public void setSymbolsShiftedKeyboard(); diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java index 3d26d972d..f42b8e681 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java +++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java @@ -72,7 +72,7 @@ public class MoreSuggestions extends Keyboard { int pos = fromPos, rowStartPos = fromPos; final int size = Math.min(suggestions.size(), SuggestionsView.MAX_SUGGESTIONS); while (pos < size) { - final CharSequence word = suggestions.getWord(pos); + final String word = suggestions.getWord(pos).toString(); // TODO: Should take care of text x-scaling. mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding; final int numColumn = pos - rowStartPos + 1; |