diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/res/values/attrs.xml | 11 | ||||
-rw-r--r-- | java/res/xml/kbd_key_styles.xml | 102 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/BaseKeyboardParser.java | 34 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/KeyboardSwitcher.java | 6 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinKeyboard.java | 73 |
5 files changed, 124 insertions, 102 deletions
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 24c9855ae..28ea6fccc 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -155,6 +155,17 @@ <attr name="hasSettingsKey" format="string" /> <attr name="voiceKeyEnabled" format="string" /> <attr name="hasVoiceKey" format="string" /> + <attr name="imeOptions"> + <!-- This should be aligned with EditorInfo.IME_ACTION_* --> + <flag name="actionUnspecified" value="0" /> + <flag name="actionNone" value="1" /> + <flag name="actionGo" value="2" /> + <flag name="actionSearch" value="3" /> + <flag name="actionSend" value="4" /> + <flag name="actionNext" value="5" /> + <flag name="actionDone" value="6" /> + <flag name="actionPrevious" value="7" /> + </attr> </declare-styleable> <declare-styleable name="BaseKeyboard_KeyStyle"> diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml index ec813d741..b80bb9ff4 100644 --- a/java/res/xml/kbd_key_styles.xml +++ b/java/res/xml/kbd_key_styles.xml @@ -21,6 +21,7 @@ <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" > + <!-- Functional key styles --> <switch> <case latin:colorScheme="white" @@ -84,12 +85,6 @@ latin:iconPreview="@drawable/sym_keyboard_feedback_tab" latin:parentStyle="functionalKeyStyle" /> <key-style - latin:styleName="returnKeyStyle" - latin:codes="@integer/key_return" - latin:keyIcon="@drawable/sym_keyboard_return" - latin:iconPreview="@drawable/sym_keyboard_feedback_return" - latin:parentStyle="functionalKeyStyle" /> - <key-style latin:styleName="micKeyStyle" latin:codes="@integer/key_voice" latin:popupKeyboard="@xml/popup_mic" @@ -166,12 +161,6 @@ latin:iconPreview="@drawable/sym_keyboard_feedback_tab" latin:parentStyle="functionalKeyStyle" /> <key-style - latin:styleName="returnKeyStyle" - latin:codes="@integer/key_return" - latin:keyIcon="@drawable/sym_bkeyboard_return" - latin:iconPreview="@drawable/sym_keyboard_feedback_return" - latin:parentStyle="functionalKeyStyle" /> - <key-style latin:styleName="micKeyStyle" latin:codes="@integer/key_voice" latin:popupKeyboard="@xml/popup_mic" @@ -188,6 +177,95 @@ latin:iconPreview="@drawable/sym_keyboard_feedback_tab" /> </case> </switch> + <!-- Return key style --> + <switch> + <case + latin:imeOptions="actionGo" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyLabel="@string/label_go_key" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:imeOptions="actionNext" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyLabel="@string/label_next_key" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:imeOptions="actionDone" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyLabel="@string/label_done_key" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:imeOptions="actionSend" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyLabel="@string/label_send_key" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:imeOptions="actionSearch" + > + <switch> + <case + latin:colorScheme="white" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_search" + latin:iconPreview="@drawable/sym_keyboard_feedback_search" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:colorScheme="black" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_search" + latin:iconPreview="@drawable/sym_keyboard_feedback_search" + latin:parentStyle="functionalKeyStyle" /> + </case> + </switch> + </case> + <default> + <switch> + <case + latin:colorScheme="white" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_keyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:parentStyle="functionalKeyStyle" /> + </case> + <case + latin:colorScheme="black" + > + <key-style + latin:styleName="returnKeyStyle" + latin:codes="@integer/key_return" + latin:keyIcon="@drawable/sym_bkeyboard_return" + latin:iconPreview="@drawable/sym_keyboard_feedback_return" + latin:parentStyle="functionalKeyStyle" /> + </case> + </switch> + </default> + </switch> <key-style latin:styleName="toAlphaKeyStyle" latin:codes="@integer/key_switch_alpha_symbol" diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java index 3a2764968..621e875bf 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java @@ -407,23 +407,27 @@ public class BaseKeyboardParser { R.styleable.BaseKeyboard_Case_hasVoiceKey, id.mHasVoiceKey); final boolean colorSchemeMatched = matchInteger(viewAttr, R.styleable.BaseKeyboardView_colorScheme, id.mColorScheme); - - final boolean selected = modeMatched && settingsKeyMatched - && voiceEnabledMatched && voiceKeyMatched && colorSchemeMatched; + // As noted at KeyboardSwitcher.KeyboardId class, we are interested only in + // enum value masked by IME_MASK_ACTION and IME_FLAG_NO_ENTER_ACTION. So matching + // this attribute with id.mImeOptions as integer value is enough for our purpose. + final boolean imeOptionsMatched = matchInteger(a, + R.styleable.BaseKeyboard_Case_imeOptions, id.mImeOptions); + final boolean selected = modeMatched && settingsKeyMatched && voiceEnabledMatched + && voiceKeyMatched && colorSchemeMatched && imeOptionsMatched; if (DEBUG_TAG) { - Log.d(TAG, "parseCaseCondition: " + Boolean.toString(selected).toUpperCase() - + debugInteger(a, - R.styleable.BaseKeyboard_Case_mode, "mode") - + debugBoolean(a, - R.styleable.BaseKeyboard_Case_hasSettingsKey, "hasSettingsKey") - + debugBoolean(a, - R.styleable.BaseKeyboard_Case_voiceKeyEnabled, "voiceKeyEnabled") - + debugBoolean(a, - R.styleable.BaseKeyboard_Case_hasVoiceKey, "hasVoiceKey") - + debugInteger(viewAttr, - R.styleable.BaseKeyboardView_colorScheme, "colorScheme") - ); + Log.d(TAG, String.format( + "parseCaseCondition: %s%s%s%s%s%s%s", + Boolean.toString(selected).toUpperCase(), + debugInteger(a, R.styleable.BaseKeyboard_Case_mode, "mode"), + debugBoolean(a, R.styleable.BaseKeyboard_Case_hasSettingsKey, + "hasSettingsKey"), + debugBoolean(a, R.styleable.BaseKeyboard_Case_voiceKeyEnabled, + "voiceKeyEnabled"), + debugBoolean(a, R.styleable.BaseKeyboard_Case_hasVoiceKey, "hasVoiceKey"), + debugInteger(viewAttr, R.styleable.BaseKeyboardView_colorScheme, + "colorScheme"), + debugInteger(a, R.styleable.BaseKeyboard_Case_imeOptions, "imeOptions"))); } return selected; diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java index b90ea2471..68c35791c 100644 --- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java @@ -22,6 +22,7 @@ import android.content.res.Resources; import android.preference.PreferenceManager; import android.util.Log; import android.view.InflateException; +import android.view.inputmethod.EditorInfo; import java.lang.ref.SoftReference; import java.util.Arrays; @@ -165,7 +166,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha this.mHasSettingsKey = hasSettingsKey; this.mVoiceKeyEnabled = voiceKeyEnabled; this.mHasVoiceKey = hasVoiceKey; - this.mImeOptions = imeOptions; + // We are interested only in IME_MASK_ACTION enum value and IME_FLAG_NO_ENTER_ACTION. + this.mImeOptions = imeOptions + & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION); this.mEnableShiftLock = enableShiftLock; this.mHashCode = Arrays.hashCode(new Object[] { @@ -301,7 +304,6 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mSubtypeSwitcher.getInputLocale()); keyboard = new LatinKeyboard(mInputMethodService, id); - keyboard.setImeOptions(res, id.mMode, id.mImeOptions); if (id.mEnableShiftLock) { keyboard.enableShiftLock(); diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index be00659b8..74aa899b6 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -33,7 +33,6 @@ import android.graphics.drawable.Drawable; import android.text.TextPaint; import android.util.Log; import android.view.ViewConfiguration; -import android.view.inputmethod.EditorInfo; import java.util.HashMap; import java.util.List; @@ -54,9 +53,7 @@ public class LatinKeyboard extends BaseKeyboard { private Drawable mSpacePreviewIcon; private final Drawable mButtonArrowLeftIcon; private final Drawable mButtonArrowRightIcon; - private final Drawable mSearchIcon; private final int mSpaceBarTextShadowColor; - private Key mEnterKey; private Key mSpaceKey; private int mSpaceKeyIndex = -1; private int mSpaceDragStartX; @@ -71,12 +68,6 @@ public class LatinKeyboard extends BaseKeyboard { private int mPrefLetterY; private int mPrefDistance; - // Default Enter key attributes - private final Drawable mDefaultEnterIcon; - private final Drawable mDefaultEnterPreview; - private final CharSequence mDefaultEnterLabel; - private final CharSequence mDefaultEnterText; - private LatinKeyboardShiftState mShiftState = new LatinKeyboardShiftState(); private static final float SPACEBAR_DRAG_THRESHOLD = 0.8f; @@ -98,14 +89,10 @@ public class LatinKeyboard extends BaseKeyboard { mContext = context; mRes = res; if (id.mColorScheme == BaseKeyboardView.COLOR_SCHEME_BLACK) { - // TODO: use <case imeOptions> and <case colorScheme> in XML to load search icon - mSearchIcon = res.getDrawable(R.drawable.sym_bkeyboard_search); mShiftedIcon = res.getDrawable(R.drawable.sym_bkeyboard_shift_locked); mSpaceBarTextShadowColor = res.getColor( R.color.latinkeyboard_bar_language_shadow_black); } else { // default color scheme is BaseKeyboardView.COLOR_SCHEME_WHITE - // TODO: use <case imeOptions> and <case colorScheme> in XML to load search icon - mSearchIcon = res.getDrawable(R.drawable.sym_keyboard_search); mShiftedIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked); mSpaceBarTextShadowColor = res.getColor( R.color.latinkeyboard_bar_language_shadow_white); @@ -118,16 +105,6 @@ public class LatinKeyboard extends BaseKeyboard { sSpacebarVerticalCorrection = res.getDimensionPixelOffset( R.dimen.spacebar_vertical_correction); mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE); - - if (mEnterKey != null) { - mDefaultEnterIcon = mEnterKey.icon; - mDefaultEnterPreview = mEnterKey.iconPreview; - mDefaultEnterLabel = mEnterKey.label; - mDefaultEnterText = mEnterKey.text; - } else { - mDefaultEnterIcon = mDefaultEnterPreview = null; - mDefaultEnterLabel = mDefaultEnterText = null; - } } @Override @@ -135,9 +112,6 @@ public class LatinKeyboard extends BaseKeyboard { XmlResourceParser parser, KeyStyles keyStyles) { Key key = new LatinKey(res, parent, x, y, parser, keyStyles); switch (key.codes[0]) { - case LatinIME.KEYCODE_ENTER: - mEnterKey = key; - break; case LatinIME.KEYCODE_SPACE: mSpaceKey = key; mSpaceIcon = key.icon; @@ -148,53 +122,6 @@ public class LatinKeyboard extends BaseKeyboard { return key; } - private static void resetKeyAttributes(Key key, CharSequence label) { - key.popupCharacters = null; - key.popupResId = 0; - key.text = null; - key.iconPreview = null; - key.icon = null; - key.hintIcon = null; - key.label = label; - } - - // TODO: remove this method and use <case imeOptions> in XML - public void setImeOptions(Resources res, int mode, int options) { - if (mEnterKey == null) - return; - final boolean configDynamicKeyTopEnterKey = res.getBoolean( - R.bool.config_dynamic_key_top_enter_key); - if (configDynamicKeyTopEnterKey) { - switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { - case EditorInfo.IME_ACTION_GO: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_go_key)); - break; - case EditorInfo.IME_ACTION_NEXT: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_next_key)); - break; - case EditorInfo.IME_ACTION_DONE: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_done_key)); - break; - case EditorInfo.IME_ACTION_SEARCH: - resetKeyAttributes(mEnterKey, null); - mEnterKey.iconPreview = res.getDrawable(R.drawable.sym_keyboard_feedback_search); - mEnterKey.icon = mSearchIcon; - break; - case EditorInfo.IME_ACTION_SEND: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_send_key)); - break; - default: - resetKeyAttributes(mEnterKey, mDefaultEnterLabel); - mEnterKey.text = mDefaultEnterText; - mEnterKey.icon = mDefaultEnterIcon; - mEnterKey.iconPreview = mDefaultEnterPreview; - break; - } - } - // Set the initial size of the preview icon - setDefaultBounds(mEnterKey.iconPreview); - } - public void enableShiftLock() { for (final Key key : getShiftKeys()) { if (key instanceof LatinKey) { |