am 8eaf75aa: Fix label of switch to symbols key when symbols has shortcut key

* commit '8eaf75aa7bfa471e17626b1741f63475353bf36b':
  Fix label of switch to symbols key when symbols has shortcut key
main
Tadashi G. Takaoka 2012-12-13 02:01:40 -08:00 committed by Android Git Automerger
commit 484a94ca11
7 changed files with 91 additions and 94 deletions

View File

@ -389,6 +389,7 @@
<attr name="passwordInput" format="boolean" /> <attr name="passwordInput" format="boolean" />
<attr name="clobberSettingsKey" format="boolean" /> <attr name="clobberSettingsKey" format="boolean" />
<attr name="shortcutKeyEnabled" format="boolean" /> <attr name="shortcutKeyEnabled" format="boolean" />
<attr name="shortcutKeyOnSymbols" format="boolean" />
<attr name="hasShortcutKey" format="boolean" /> <attr name="hasShortcutKey" format="boolean" />
<attr name="languageSwitchKeyEnabled" format="boolean" /> <attr name="languageSwitchKeyEnabled" format="boolean" />
<attr name="isMultiLine" format="boolean" /> <attr name="isMultiLine" format="boolean" />

View File

@ -154,31 +154,30 @@
</default> </default>
</switch> </switch>
<key-style <key-style
latin:styleName="toSymbolKeyStyle" latin:styleName="baseForLayoutSwitchKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_symbol_key"
latin:keyLabelFlags="preserveCase" latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview" latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_symbol_key"
latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style <key-style
latin:styleName="toAlphaKeyStyle" latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol" latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key" latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="preserveCase" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="toMoreSymbolKeyStyle" latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_for_tablet_key" latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
latin:keyActionFlags="noKeyPreview" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="backFromMoreSymbolKeyStyle" latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_symbol_key" latin:keyLabel="!text/label_to_symbol_key"
latin:keyActionFlags="noKeyPreview" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="comKeyStyle" latin:styleName="comKeyStyle"
latin:keyLabel="!text/keylabel_for_popular_domain" latin:keyLabel="!text/keylabel_for_popular_domain"

View File

@ -144,33 +144,30 @@
</default> </default>
</switch> </switch>
<key-style <key-style
latin:styleName="toSymbolKeyStyle" latin:styleName="baseForLayoutSwitchKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_symbol_key"
latin:keyLabelFlags="fontNormal|preserveCase" latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview" latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" /> latin:backgroundType="functional" />
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_symbol_key"
latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style <key-style
latin:styleName="toAlphaKeyStyle" latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol" latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key" latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="fontNormal|preserveCase" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="toMoreSymbolKeyStyle" latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_for_tablet_key" latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
latin:keyLabelFlags="fontNormal" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="backFromMoreSymbolKeyStyle" latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_symbol_key" latin:keyLabel="!text/label_to_symbol_key"
latin:keyLabelFlags="fontNormal" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="comKeyStyle" latin:styleName="comKeyStyle"
latin:keyLabel="!text/keylabel_for_popular_domain" latin:keyLabel="!text/keylabel_for_popular_domain"

View File

@ -134,52 +134,50 @@
latin:code="!code/key_tab" latin:code="!code/key_tab"
latin:keyIcon="!icon/tab_key" latin:keyIcon="!icon/tab_key"
latin:keyIconPreview="!icon/tab_key_preview" /> latin:keyIconPreview="!icon/tab_key_preview" />
<key-style
latin:styleName="baseForLayoutSwitchKeyStyle"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<switch> <switch>
<!-- When this qwerty keyboard has no shortcut keys but shortcut key is enabled, then symbol <!-- When this qwerty keyboard has no shortcut keys but shortcut key is enabled, then symbol
keyboard will have a shortcut key. That means we should use label_to_symbol_key label keyboard will have a shortcut key. That means we should use label_to_symbol_key label
and shortcut_for_label icon. --> and shortcut_for_label icon. -->
<case <case
latin:shortcutKeyEnabled="true" latin:shortcutKeyOnSymbols="true"
latin:hasShortcutKey="false"
> >
<key-style <key-style
latin:styleName="toSymbolKeyStyle" latin:styleName="baseForToSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyIcon="!icon/shortcut_for_label" latin:keyIcon="!icon/shortcut_for_label"
latin:keyLabel="!text/label_to_symbol_with_microphone_key" latin:keyLabel="!text/label_to_symbol_with_microphone_key"
latin:keyLabelFlags="withIconRight|preserveCase" latin:keyLabelFlags="withIconRight|preserveCase"
latin:keyActionFlags="noKeyPreview" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:backgroundType="functional" />
</case> </case>
<default> <default>
<key-style <key-style
latin:styleName="toSymbolKeyStyle" latin:styleName="baseForToSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_symbol_key" latin:keyLabel="!text/label_to_symbol_key"
latin:keyLabelFlags="preserveCase" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
</default> </default>
</switch> </switch>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:parentStyle="baseForToSymbolKeyStyle" />
<key-style <key-style
latin:styleName="toAlphaKeyStyle" latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol" latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key" latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="preserveCase" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="toMoreSymbolKeyStyle" latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_key" latin:keyLabel="!text/label_to_more_symbol_key"
latin:keyActionFlags="noKeyPreview" latin:parentStyle="baseForLayoutSwitchKeyStyle" />
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="backFromMoreSymbolKeyStyle" latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift" latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_symbol_key" latin:parentStyle="baseForToSymbolKeyStyle" />
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style <key-style
latin:styleName="punctuationKeyStyle" latin:styleName="punctuationKeyStyle"
latin:keyLabel="." latin:keyLabel="."

View File

@ -71,34 +71,39 @@ public final class KeyboardId {
private final EditorInfo mEditorInfo; private final EditorInfo mEditorInfo;
public final boolean mClobberSettingsKey; public final boolean mClobberSettingsKey;
public final boolean mShortcutKeyEnabled; public final boolean mShortcutKeyEnabled;
public final boolean mHasShortcutKey; public final boolean mShortcutKeyOnSymbols;
public final boolean mLanguageSwitchKeyEnabled; public final boolean mLanguageSwitchKeyEnabled;
public final String mCustomActionLabel; public final String mCustomActionLabel;
public final boolean mHasShortcutKey;
private final int mHashCode; private final int mHashCode;
public KeyboardId(int elementId, InputMethodSubtype subtype, int deviceFormFactor, public KeyboardId(final int elementId, final KeyboardLayoutSet.Params params) {
int orientation, int width, int mode, EditorInfo editorInfo, boolean clobberSettingsKey, mSubtype = params.mSubtype;
boolean shortcutKeyEnabled, boolean hasShortcutKey, boolean languageSwitchKeyEnabled) { mLocale = SubtypeLocale.getSubtypeLocale(mSubtype);
mSubtype = subtype; mDeviceFormFactor = params.mDeviceFormFactor;
mLocale = SubtypeLocale.getSubtypeLocale(subtype); mOrientation = params.mOrientation;
mDeviceFormFactor = deviceFormFactor; mWidth = params.mWidth;
mOrientation = orientation; mMode = params.mMode;
mWidth = width;
mMode = mode;
mElementId = elementId; mElementId = elementId;
mEditorInfo = editorInfo; mEditorInfo = params.mEditorInfo;
mClobberSettingsKey = clobberSettingsKey; mClobberSettingsKey = params.mNoSettingsKey;
mShortcutKeyEnabled = shortcutKeyEnabled; mShortcutKeyEnabled = params.mVoiceKeyEnabled;
mHasShortcutKey = hasShortcutKey; mShortcutKeyOnSymbols = mShortcutKeyEnabled && !params.mVoiceKeyOnMain;
mLanguageSwitchKeyEnabled = languageSwitchKeyEnabled; mLanguageSwitchKeyEnabled = params.mLanguageSwitchKeyEnabled;
mCustomActionLabel = (editorInfo.actionLabel != null) mCustomActionLabel = (mEditorInfo.actionLabel != null)
? editorInfo.actionLabel.toString() : null; ? mEditorInfo.actionLabel.toString() : null;
final boolean alphabetMayHaveShortcutKey = isAlphabetKeyboard(elementId)
&& !mShortcutKeyOnSymbols;
final boolean symbolsMayHaveShortcutKey = (elementId == KeyboardId.ELEMENT_SYMBOLS)
&& mShortcutKeyOnSymbols;
mHasShortcutKey = mShortcutKeyEnabled
&& (alphabetMayHaveShortcutKey || symbolsMayHaveShortcutKey);
mHashCode = computeHashCode(this); mHashCode = computeHashCode(this);
} }
private static int computeHashCode(KeyboardId id) { private static int computeHashCode(final KeyboardId id) {
return Arrays.hashCode(new Object[] { return Arrays.hashCode(new Object[] {
id.mDeviceFormFactor, id.mDeviceFormFactor,
id.mOrientation, id.mOrientation,
@ -108,7 +113,7 @@ public final class KeyboardId {
id.passwordInput(), id.passwordInput(),
id.mClobberSettingsKey, id.mClobberSettingsKey,
id.mShortcutKeyEnabled, id.mShortcutKeyEnabled,
id.mHasShortcutKey, id.mShortcutKeyOnSymbols,
id.mLanguageSwitchKeyEnabled, id.mLanguageSwitchKeyEnabled,
id.isMultiLine(), id.isMultiLine(),
id.imeAction(), id.imeAction(),
@ -119,7 +124,7 @@ public final class KeyboardId {
}); });
} }
private boolean equals(KeyboardId other) { private boolean equals(final KeyboardId other) {
if (other == this) if (other == this)
return true; return true;
return other.mDeviceFormFactor == mDeviceFormFactor return other.mDeviceFormFactor == mDeviceFormFactor
@ -130,7 +135,7 @@ public final class KeyboardId {
&& other.passwordInput() == passwordInput() && other.passwordInput() == passwordInput()
&& other.mClobberSettingsKey == mClobberSettingsKey && other.mClobberSettingsKey == mClobberSettingsKey
&& other.mShortcutKeyEnabled == mShortcutKeyEnabled && other.mShortcutKeyEnabled == mShortcutKeyEnabled
&& other.mHasShortcutKey == mHasShortcutKey && other.mShortcutKeyOnSymbols == mShortcutKeyOnSymbols
&& other.mLanguageSwitchKeyEnabled == mLanguageSwitchKeyEnabled && other.mLanguageSwitchKeyEnabled == mLanguageSwitchKeyEnabled
&& other.isMultiLine() == isMultiLine() && other.isMultiLine() == isMultiLine()
&& other.imeAction() == imeAction() && other.imeAction() == imeAction()
@ -140,8 +145,12 @@ public final class KeyboardId {
&& other.mSubtype.equals(mSubtype); && other.mSubtype.equals(mSubtype);
} }
private static boolean isAlphabetKeyboard(final int elementId) {
return elementId < ELEMENT_SYMBOLS;
}
public boolean isAlphabetKeyboard() { public boolean isAlphabetKeyboard() {
return mElementId < ELEMENT_SYMBOLS; return isAlphabetKeyboard(mElementId);
} }
public boolean navigateNext() { public boolean navigateNext() {
@ -181,7 +190,7 @@ public final class KeyboardId {
} }
@Override @Override
public boolean equals(Object other) { public boolean equals(final Object other) {
return other instanceof KeyboardId && equals((KeyboardId) other); return other instanceof KeyboardId && equals((KeyboardId) other);
} }
@ -192,7 +201,7 @@ public final class KeyboardId {
@Override @Override
public String toString() { public String toString() {
return String.format("[%s %s:%s %s-%s:%d %s %s %s%s%s%s%s%s%s%s]", return String.format("[%s %s:%s %s-%s:%d %s %s %s%s%s%s%s%s%s%s%s]",
elementIdToName(mElementId), elementIdToName(mElementId),
mLocale, mLocale,
mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET), mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET),
@ -204,13 +213,14 @@ public final class KeyboardId {
(mClobberSettingsKey ? " clobberSettingsKey" : ""), (mClobberSettingsKey ? " clobberSettingsKey" : ""),
(passwordInput() ? " passwordInput" : ""), (passwordInput() ? " passwordInput" : ""),
(mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""), (mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
(mShortcutKeyOnSymbols ? " shortcutKeyOnSymbols" : ""),
(mHasShortcutKey ? " hasShortcutKey" : ""), (mHasShortcutKey ? " hasShortcutKey" : ""),
(mLanguageSwitchKeyEnabled ? " languageSwitchKeyEnabled" : ""), (mLanguageSwitchKeyEnabled ? " languageSwitchKeyEnabled" : ""),
(isMultiLine() ? "isMultiLine" : "") (isMultiLine() ? "isMultiLine" : "")
); );
} }
public static boolean equivalentEditorInfoForKeyboard(EditorInfo a, EditorInfo b) { public static boolean equivalentEditorInfoForKeyboard(final EditorInfo a, final EditorInfo b) {
if (a == null && b == null) return true; if (a == null && b == null) return true;
if (a == null || b == null) return false; if (a == null || b == null) return false;
return a.inputType == b.inputType return a.inputType == b.inputType
@ -218,7 +228,7 @@ public final class KeyboardId {
&& TextUtils.equals(a.privateImeOptions, b.privateImeOptions); && TextUtils.equals(a.privateImeOptions, b.privateImeOptions);
} }
public static String elementIdToName(int elementId) { public static String elementIdToName(final int elementId) {
switch (elementId) { switch (elementId) {
case ELEMENT_ALPHABET: return "alphabet"; case ELEMENT_ALPHABET: return "alphabet";
case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted"; case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted";
@ -234,8 +244,8 @@ public final class KeyboardId {
} }
} }
public static String deviceFormFactor(int devoceFormFactor) { public static String deviceFormFactor(final int deviceFormFactor) {
switch (devoceFormFactor) { switch (deviceFormFactor) {
case FORM_FACTOR_PHONE: return "phone"; case FORM_FACTOR_PHONE: return "phone";
case FORM_FACTOR_TABLET7: return "tablet7"; case FORM_FACTOR_TABLET7: return "tablet7";
case FORM_FACTOR_TABLET10: return "tablet10"; case FORM_FACTOR_TABLET10: return "tablet10";
@ -243,7 +253,7 @@ public final class KeyboardId {
} }
} }
public static String modeName(int mode) { public static String modeName(final int mode) {
switch (mode) { switch (mode) {
case MODE_TEXT: return "text"; case MODE_TEXT: return "text";
case MODE_URL: return "url"; case MODE_URL: return "url";
@ -258,7 +268,7 @@ public final class KeyboardId {
} }
} }
public static String actionName(int actionId) { public static String actionName(final int actionId) {
return (actionId == IME_ACTION_CUSTOM_LABEL) ? "actionCustomLabel" return (actionId == IME_ACTION_CUSTOM_LABEL) ? "actionCustomLabel"
: EditorInfoCompatUtils.imeActionName(actionId); : EditorInfoCompatUtils.imeActionName(actionId);
} }

View File

@ -78,6 +78,7 @@ public final class KeyboardLayoutSet {
CollectionUtils.newHashMap(); CollectionUtils.newHashMap();
private static final KeysCache sKeysCache = new KeysCache(); private static final KeysCache sKeysCache = new KeysCache();
@SuppressWarnings("serial")
public static final class KeyboardLayoutSetException extends RuntimeException { public static final class KeyboardLayoutSetException extends RuntimeException {
public final KeyboardId mKeyboardId; public final KeyboardId mKeyboardId;
@ -93,7 +94,7 @@ public final class KeyboardLayoutSet {
public ElementParams() {} public ElementParams() {}
} }
private static final class Params { public static final class Params {
String mKeyboardLayoutSetName; String mKeyboardLayoutSetName;
int mMode; int mMode;
EditorInfo mEditorInfo; EditorInfo mEditorInfo;
@ -109,7 +110,6 @@ public final class KeyboardLayoutSet {
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id. // Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap = final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
CollectionUtils.newSparseArray(); CollectionUtils.newSparseArray();
public Params() {}
} }
public static void clearKeyboardCache() { public static void clearKeyboardCache() {
@ -149,7 +149,11 @@ public final class KeyboardLayoutSet {
elementParams = mParams.mKeyboardLayoutSetElementIdToParamsMap.get( elementParams = mParams.mKeyboardLayoutSetElementIdToParamsMap.get(
KeyboardId.ELEMENT_ALPHABET); KeyboardId.ELEMENT_ALPHABET);
} }
final KeyboardId id = getKeyboardId(keyboardLayoutSetElementId); // Note: The keyboard for each shift state, and mode are represented as an elementName
// attribute in a keyboard_layout_set XML file. Also each keyboard layout XML resource is
// specified as an elementKeyboard attribute in the file.
// The KeyboardId is an internal key for a Keyboard object.
final KeyboardId id = new KeyboardId(keyboardLayoutSetElementId, mParams);
try { try {
return getKeyboard(elementParams, id); return getKeyboard(elementParams, id);
} catch (RuntimeException e) { } catch (RuntimeException e) {
@ -187,22 +191,6 @@ public final class KeyboardLayoutSet {
return keyboard; return keyboard;
} }
// Note: The keyboard for each locale, shift state, and mode are represented as
// KeyboardLayoutSet element id that is a key in keyboard_set.xml. Also that file specifies
// which XML layout should be used for each keyboard. The KeyboardId is an internal key for
// Keyboard object.
private KeyboardId getKeyboardId(final int keyboardLayoutSetElementId) {
final Params params = mParams;
final boolean isSymbols = (keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS
|| keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED);
final boolean hasShortcutKey = params.mVoiceKeyEnabled
&& (isSymbols != params.mVoiceKeyOnMain);
return new KeyboardId(keyboardLayoutSetElementId, params.mSubtype, params.mDeviceFormFactor,
params.mOrientation, params.mWidth, params.mMode, params.mEditorInfo,
params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey,
params.mLanguageSwitchKeyEnabled);
}
public static final class Builder { public static final class Builder {
private final Context mContext; private final Context mContext;
private final String mPackageName; private final String mPackageName;

View File

@ -622,6 +622,8 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
R.styleable.Keyboard_Case_clobberSettingsKey, id.mClobberSettingsKey); R.styleable.Keyboard_Case_clobberSettingsKey, id.mClobberSettingsKey);
final boolean shortcutKeyEnabledMatched = matchBoolean(a, final boolean shortcutKeyEnabledMatched = matchBoolean(a,
R.styleable.Keyboard_Case_shortcutKeyEnabled, id.mShortcutKeyEnabled); R.styleable.Keyboard_Case_shortcutKeyEnabled, id.mShortcutKeyEnabled);
final boolean shortcutKeyOnSymbolsMatched = matchBoolean(a,
R.styleable.Keyboard_Case_shortcutKeyOnSymbols, id.mShortcutKeyOnSymbols);
final boolean hasShortcutKeyMatched = matchBoolean(a, final boolean hasShortcutKeyMatched = matchBoolean(a,
R.styleable.Keyboard_Case_hasShortcutKey, id.mHasShortcutKey); R.styleable.Keyboard_Case_hasShortcutKey, id.mHasShortcutKey);
final boolean languageSwitchKeyEnabledMatched = matchBoolean(a, final boolean languageSwitchKeyEnabledMatched = matchBoolean(a,
@ -640,12 +642,12 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
final boolean selected = keyboardLayoutSetElementMatched && modeMatched final boolean selected = keyboardLayoutSetElementMatched && modeMatched
&& navigateNextMatched && navigatePreviousMatched && passwordInputMatched && navigateNextMatched && navigatePreviousMatched && passwordInputMatched
&& clobberSettingsKeyMatched && shortcutKeyEnabledMatched && clobberSettingsKeyMatched && shortcutKeyEnabledMatched
&& hasShortcutKeyMatched && languageSwitchKeyEnabledMatched && shortcutKeyOnSymbolsMatched && hasShortcutKeyMatched
&& isMultiLineMatched && imeActionMatched && localeCodeMatched && languageSwitchKeyEnabledMatched && isMultiLineMatched && imeActionMatched
&& languageCodeMatched && countryCodeMatched; && localeCodeMatched && languageCodeMatched && countryCodeMatched;
if (DEBUG) { if (DEBUG) {
startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE, startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE,
textAttr(a.getString( textAttr(a.getString(
R.styleable.Keyboard_Case_keyboardLayoutSetElement), R.styleable.Keyboard_Case_keyboardLayoutSetElement),
"keyboardLayoutSetElement"), "keyboardLayoutSetElement"),
@ -662,6 +664,8 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
"passwordInput"), "passwordInput"),
booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyEnabled, booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyEnabled,
"shortcutKeyEnabled"), "shortcutKeyEnabled"),
booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyOnSymbols,
"shortcutKeyOnSymbols"),
booleanAttr(a, R.styleable.Keyboard_Case_hasShortcutKey, booleanAttr(a, R.styleable.Keyboard_Case_hasShortcutKey,
"hasShortcutKey"), "hasShortcutKey"),
booleanAttr(a, R.styleable.Keyboard_Case_languageSwitchKeyEnabled, booleanAttr(a, R.styleable.Keyboard_Case_languageSwitchKeyEnabled,