Fix "Show settings key" option on 7" device

Cherry-pic I993ac772 from Honeycomb-MR2.

Bug: 4586882
Change-Id: Ie74138523a3ae7958c7bec674c49aa0ab1a72d05
main
Tadashi G. Takaoka 2011-06-23 21:55:56 +09:00
parent 75d7fb6675
commit cd96a691b1
14 changed files with 290 additions and 132 deletions

View File

@ -277,6 +277,14 @@
<attr name="navigateAction" format="boolean" /> <attr name="navigateAction" format="boolean" />
<attr name="passwordInput" format="boolean" /> <attr name="passwordInput" format="boolean" />
<attr name="hasSettingsKey" format="boolean" /> <attr name="hasSettingsKey" format="boolean" />
<!-- This should be aligned with KeyboardID.F2KEY_MODE_* -->
<attr name="f2KeyMode" format="enum">
<enum name="none" value="0" />
<enum name="settings" value="1" />
<enum name="shortcutIme" value="2" />
<enum name="shortcutImeOrSettings" value="3" />
</attr>
<attr name="clobberSettingsKey" format="boolean" />
<attr name="voiceKeyEnabled" format="boolean" /> <attr name="voiceKeyEnabled" format="boolean" />
<attr name="hasVoiceKey" format="boolean" /> <attr name="hasVoiceKey" format="boolean" />
<attr name="imeAction" format="enum"> <attr name="imeAction" format="enum">

View File

@ -25,6 +25,23 @@
<key-style <key-style
latin:styleName="functionalKeyStyle" latin:styleName="functionalKeyStyle"
latin:isFunctional="true" /> latin:isFunctional="true" />
<!-- Base key style for the key which may have settings key as popup key -->
<switch>
<case
latin:clobberSettingsKey="true"
>
<key-style
latin:styleName="settingsPopupStyle"
latin:parentStyle="functionalKeyStyle" />
</case>
<default>
<key-style
latin:styleName="settingsPopupStyle"
latin:keyLabelOption="popupHint"
latin:popupCharacters="\@icon/5|\@integer/key_settings"
latin:parentStyle="functionalKeyStyle" />
</default>
</switch>
<!-- Functional key styles --> <!-- Functional key styles -->
<key-style <key-style
latin:styleName="shiftKeyStyle" latin:styleName="shiftKeyStyle"
@ -59,28 +76,18 @@
latin:keyLabelOption="popupHint" latin:keyLabelOption="popupHint"
latin:popupCharacters="@string/alternates_for_smiley" latin:popupCharacters="@string/alternates_for_smiley"
latin:maxPopupKeyboardColumn="5" /> latin:maxPopupKeyboardColumn="5" />
<switch>
<case
latin:voiceKeyEnabled="true"
>
<key-style <key-style
latin:styleName="shortcutOrSettingsKeyStyle" latin:styleName="shortcutKeyStyle"
latin:code="@integer/key_shortcut" latin:code="@integer/key_shortcut"
latin:keyIcon="iconShortcutKey" latin:keyIcon="iconShortcutKey"
latin:keyIconPreview="iconPreviewShortcutKey" latin:keyIconPreview="iconPreviewShortcutKey"
latin:keyLabelOption="popupHint" latin:parentStyle="settingsPopupStyle" />
latin:popupCharacters="\@icon/5|\@integer/key_settings"
latin:parentStyle="functionalKeyStyle" />
</case>
<default>
<key-style <key-style
latin:styleName="shortcutOrSettingsKeyStyle" latin:styleName="settingsKeyStyle"
latin:code="@integer/key_settings" latin:code="@integer/key_settings"
latin:keyIcon="iconSettingsKey" latin:keyIcon="iconSettingsKey"
latin:keyIconPreview="iconPreviewSettingsKey" latin:keyIconPreview="iconPreviewSettingsKey"
latin:parentStyle="functionalKeyStyle" /> latin:parentStyle="functionalKeyStyle" />
</default>
</switch>
<key-style <key-style
latin:styleName="tabKeyStyle" latin:styleName="tabKeyStyle"
latin:code="@integer/key_tab" latin:code="@integer/key_tab"

View File

@ -78,12 +78,11 @@
latin:keyXPos="24.875%p" /> latin:keyXPos="24.875%p" />
<Key <Key
latin:keyStyle="num0KeyStyle" /> latin:keyStyle="num0KeyStyle" />
<Spacer /> <Spacer
<Key
latin:keyStyle="shortcutOrSettingsKeyStyle"
latin:keyXPos="-11.00%p" latin:keyXPos="-11.00%p"
latin:keyWidth="fillRight" latin:keyWidth="0%p" />
latin:keyEdgeFlags="right" /> <include
latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</case> </case>
<!-- latin:passwordInput="false" --> <!-- latin:passwordInput="false" -->
@ -185,11 +184,11 @@
<Key <Key
latin:keyLabel="#" latin:keyLabel="#"
latin:keyStyle="numLabelStyle" /> latin:keyStyle="numLabelStyle" />
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle"
latin:keyXPos="-11.00%p" latin:keyXPos="-11.00%p"
latin:keyWidth="fillBoth" latin:keyWidth="0%p" />
latin:keyEdgeFlags="right" /> <include
latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</default> </default>
</switch> </switch>

View File

@ -115,10 +115,10 @@
<Key <Key
latin:keyLabel="#" latin:keyLabel="#"
latin:keyStyle="numLabelStyle" /> latin:keyStyle="numLabelStyle" />
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle"
latin:keyXPos="-11.00%p" latin:keyXPos="-11.00%p"
latin:keyWidth="fillBoth" latin:keyWidth="0%p" />
latin:keyEdgeFlags="right" /> <include
latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</Keyboard> </Keyboard>

View File

@ -125,10 +125,10 @@
<Key <Key
latin:keyLabel="#" latin:keyLabel="#"
latin:keyStyle="numLabelStyle" /> latin:keyStyle="numLabelStyle" />
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle"
latin:keyXPos="-11.00%p" latin:keyXPos="-11.00%p"
latin:keyWidth="fillBoth" latin:keyWidth="0%p" />
latin:keyEdgeFlags="right" /> <include
latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</Keyboard> </Keyboard>

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<switch>
<case
latin:f2KeyMode="settings"
>
<Key
latin:keyStyle="settingsKeyStyle"
latin:keyWidth="fillBoth"
latin:keyEdgeFlags="right" />
</case>
<case
latin:f2KeyMode="shortcutIme"
>
<switch>
<case
latin:voiceKeyEnabled="true"
>
<Key
latin:keyStyle="micKeyStyle"
latin:keyWidth="fillBoth"
latin:keyEdgeFlags="right" />
</case>
<!-- voiceKeyEnabled="false" -->
<default>
<Spacer />
</default>
</switch>
</case>
<case
latin:f2KeyMode="shortcutImeOrSettings"
>
<switch>
<case
latin:voiceKeyEnabled="true"
>
<Key
latin:keyStyle="micKeyStyle"
latin:keyWidth="fillBoth"
latin:keyEdgeFlags="right" />
</case>
<!-- voiceKeyEnabled="false" -->
<default>
<Key
latin:keyStyle="settingsKeyStyle"
latin:keyWidth="fillBoth"
latin:keyEdgeFlags="right" />
</default>
</switch>
</case>
<!-- f2KeyMode="none" -->
<default>
<Spacer />
</default>
</switch>
</merge>

View File

@ -154,10 +154,10 @@
</switch> </switch>
</default> </default>
</switch> </switch>
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle" latin:keyXPos="-10.00%p"
latin:keyXPos="-10.0%p" latin:keyWidth="0%p" />
latin:keyWidth="fillBoth" <include
latin:keyEdgeFlags="right" /> latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</merge> </merge>

View File

@ -209,10 +209,10 @@
latin:keyWidth="9.750%p" /> latin:keyWidth="9.750%p" />
</default> </default>
</switch> </switch>
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle" latin:keyXPos="-10.00%p"
latin:keyXPos="-10.0%p" latin:keyWidth="0%p" />
latin:keyWidth="fillBoth" <include
latin:keyEdgeFlags="right" /> latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</Keyboard> </Keyboard>

View File

@ -147,10 +147,10 @@
latin:keyStyle="spaceKeyStyle" latin:keyStyle="spaceKeyStyle"
latin:keyXPos="30.750%p" latin:keyXPos="30.750%p"
latin:keyWidth="39.750%p" /> latin:keyWidth="39.750%p" />
<Key <Spacer
latin:keyStyle="shortcutOrSettingsKeyStyle" latin:keyXPos="-10.00%p"
latin:keyXPos="-10.0%p" latin:keyWidth="0%p" />
latin:keyWidth="fillRight" <include
latin:keyEdgeFlags="right" /> latin:keyboardLayout="@xml/kbd_qwerty_f2" />
</Row> </Row>
</Keyboard> </Keyboard>

View File

@ -28,13 +28,21 @@
<!-- Base key style for the key which may have settings key as popup key --> <!-- Base key style for the key which may have settings key as popup key -->
<switch> <switch>
<case <case
latin:clobberSettingsKey="true"
>
<key-style
latin:styleName="settingsPopupStyle"
latin:parentStyle="functionalKeyStyle" />
</case>
<case
latin:clobberSettingsKey="false"
latin:hasSettingsKey="true" latin:hasSettingsKey="true"
> >
<key-style <key-style
latin:styleName="settingsPopupStyle" latin:styleName="settingsPopupStyle"
latin:parentStyle="functionalKeyStyle" /> latin:parentStyle="functionalKeyStyle" />
</case> </case>
<!-- latin:hasSettingsKey="false" --> <!-- clobberSettingsKey="false" and hasSettingsKey="false" -->
<default> <default>
<key-style <key-style
latin:styleName="settingsPopupStyle" latin:styleName="settingsPopupStyle"
@ -57,57 +65,6 @@
latin:keyIcon="iconDeleteKey" latin:keyIcon="iconDeleteKey"
latin:parentStyle="functionalKeyStyle" latin:parentStyle="functionalKeyStyle"
latin:isRepeatable="true" /> latin:isRepeatable="true" />
<switch>
<!-- When this qwerty keyboard has no voice key but voice key is enabled, then symbol
keyboard will have mic key. That means we should use "?123mic" key here. -->
<case
latin:voiceKeyEnabled="true"
latin:hasVoiceKey="false"
>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="@integer/key_switch_alpha_symbol"
latin:keyIcon="iconToSymbolKeyWithShortcut"
latin:parentStyle="functionalKeyStyle" />
</case>
<default>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="@integer/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_symbol_key"
latin:parentStyle="functionalKeyStyle" />
</default>
</switch>
<key-style
latin:styleName="settingsKeyStyle"
latin:code="@integer/key_settings"
latin:keyIcon="iconSettingsKey"
latin:keyIconPreview="iconPreviewSettingsKey"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="spaceKeyStyle"
latin:code="@integer/key_space"
latin:keyIconPreview="iconPreviewSpaceKey"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="tabKeyStyle"
latin:code="@integer/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="shortcutKeyStyle"
latin:code="@integer/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconPreview="iconPreviewShortcutKey"
latin:parentStyle="settingsPopupStyle" />
<!-- Note: This key style is not for functional tab key. This is used for the tab key which is
laid out as normal letter key. -->
<key-style
latin:styleName="nonSpecialBackgroundTabKeyStyle"
latin:code="@integer/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey" />
<!-- Return key style --> <!-- Return key style -->
<switch> <switch>
<case <case
@ -163,6 +120,65 @@
latin:parentStyle="functionalKeyStyle" /> latin:parentStyle="functionalKeyStyle" />
</default> </default>
</switch> </switch>
<key-style
latin:styleName="spaceKeyStyle"
latin:code="@integer/key_space"
latin:keyIconPreview="iconPreviewSpaceKey"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)"
latin:keyOutputText=":-) "
latin:keyLabelOption="popupHint"
latin:popupCharacters="@string/alternates_for_smiley"
latin:maxPopupKeyboardColumn="5"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="shortcutKeyStyle"
latin:code="@integer/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconPreview="iconPreviewShortcutKey"
latin:parentStyle="settingsPopupStyle" />
<key-style
latin:styleName="settingsKeyStyle"
latin:code="@integer/key_settings"
latin:keyIcon="iconSettingsKey"
latin:keyIconPreview="iconPreviewSettingsKey"
latin:parentStyle="functionalKeyStyle" />
<key-style
latin:styleName="tabKeyStyle"
latin:code="@integer/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey"
latin:parentStyle="functionalKeyStyle" />
<!-- Note: This key style is not for functional tab key. This is used for the tab key which is
laid out as normal letter key. -->
<key-style
latin:styleName="nonSpecialBackgroundTabKeyStyle"
latin:code="@integer/key_tab"
latin:keyIcon="iconTabKey"
latin:keyIconPreview="iconPreviewTabKey" />
<switch>
<!-- When this qwerty keyboard has no voice key but voice key is enabled, then symbol
keyboard will have mic key. That means we should use "?123mic" key here. -->
<case
latin:voiceKeyEnabled="true"
latin:hasVoiceKey="false"
>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="@integer/key_switch_alpha_symbol"
latin:keyIcon="iconToSymbolKeyWithShortcut"
latin:parentStyle="functionalKeyStyle" />
</case>
<default>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="@integer/key_switch_alpha_symbol"
latin:keyLabel="@string/label_to_symbol_key"
latin:parentStyle="functionalKeyStyle" />
</default>
</switch>
<key-style <key-style
latin:styleName="toAlphaKeyStyle" latin:styleName="toAlphaKeyStyle"
latin:code="@integer/key_switch_alpha_symbol" latin:code="@integer/key_switch_alpha_symbol"
@ -174,14 +190,6 @@
latin:keyLabel="@string/label_alt_key" latin:keyLabel="@string/label_alt_key"
latin:parentStyle="functionalKeyStyle" latin:parentStyle="functionalKeyStyle"
latin:isSticky="true" /> latin:isSticky="true" />
<key-style
latin:styleName="smileyKeyStyle"
latin:keyLabel=":-)"
latin:keyOutputText=":-) "
latin:keyLabelOption="popupHint"
latin:popupCharacters="@string/alternates_for_smiley"
latin:maxPopupKeyboardColumn="5"
latin:parentStyle="functionalKeyStyle" />
<switch> <switch>
<case <case
latin:passwordInput="true" latin:passwordInput="true"

View File

@ -37,6 +37,11 @@ public class KeyboardId {
public static final int MODE_PHONE = 4; public static final int MODE_PHONE = 4;
public static final int MODE_NUMBER = 5; public static final int MODE_NUMBER = 5;
public static final int F2KEY_MODE_NONE = 0;
public static final int F2KEY_MODE_SETTINGS = 1;
public static final int F2KEY_MODE_SHORTCUT_IME = 2;
public static final int F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS = 3;
public final Locale mLocale; public final Locale mLocale;
public final int mOrientation; public final int mOrientation;
public final int mWidth; public final int mWidth;
@ -44,7 +49,10 @@ public class KeyboardId {
public final int mXmlId; public final int mXmlId;
public final boolean mNavigateAction; public final boolean mNavigateAction;
public final boolean mPasswordInput; public final boolean mPasswordInput;
// TODO: Clean up these booleans and modes.
public final boolean mHasSettingsKey; public final boolean mHasSettingsKey;
public final int mF2KeyMode;
public final boolean mClobberSettingsKey;
public final boolean mVoiceKeyEnabled; public final boolean mVoiceKeyEnabled;
public final boolean mHasVoiceKey; public final boolean mHasVoiceKey;
public final int mImeAction; public final int mImeAction;
@ -56,8 +64,9 @@ public class KeyboardId {
private final int mHashCode; private final int mHashCode;
public KeyboardId(String xmlName, int xmlId, Locale locale, int orientation, int width, public KeyboardId(String xmlName, int xmlId, Locale locale, int orientation, int width,
int mode, EditorInfo attribute, boolean hasSettingsKey, boolean voiceKeyEnabled, int mode, EditorInfo attribute, boolean hasSettingsKey, int f2KeyMode,
boolean hasVoiceKey, boolean enableShiftLock) { boolean clobberSettingsKey, boolean voiceKeyEnabled, boolean hasVoiceKey,
boolean enableShiftLock) {
final int inputType = (attribute != null) ? attribute.inputType : 0; final int inputType = (attribute != null) ? attribute.inputType : 0;
final int imeOptions = (attribute != null) ? attribute.imeOptions : 0; final int imeOptions = (attribute != null) ? attribute.imeOptions : 0;
this.mLocale = locale; this.mLocale = locale;
@ -72,6 +81,8 @@ public class KeyboardId {
this.mPasswordInput = InputTypeCompatUtils.isPasswordInputType(inputType) this.mPasswordInput = InputTypeCompatUtils.isPasswordInputType(inputType)
|| InputTypeCompatUtils.isVisiblePasswordInputType(inputType); || InputTypeCompatUtils.isVisiblePasswordInputType(inputType);
this.mHasSettingsKey = hasSettingsKey; this.mHasSettingsKey = hasSettingsKey;
this.mF2KeyMode = f2KeyMode;
this.mClobberSettingsKey = clobberSettingsKey;
this.mVoiceKeyEnabled = voiceKeyEnabled; this.mVoiceKeyEnabled = voiceKeyEnabled;
this.mHasVoiceKey = hasVoiceKey; this.mHasVoiceKey = hasVoiceKey;
// We are interested only in {@link EditorInfo#IME_MASK_ACTION} enum value and // We are interested only in {@link EditorInfo#IME_MASK_ACTION} enum value and
@ -92,6 +103,8 @@ public class KeyboardId {
mNavigateAction, mNavigateAction,
mPasswordInput, mPasswordInput,
hasSettingsKey, hasSettingsKey,
f2KeyMode,
clobberSettingsKey,
voiceKeyEnabled, voiceKeyEnabled,
hasVoiceKey, hasVoiceKey,
mImeAction, mImeAction,
@ -101,14 +114,16 @@ public class KeyboardId {
public KeyboardId cloneWithNewLayout(String xmlName, int xmlId) { public KeyboardId cloneWithNewLayout(String xmlName, int xmlId) {
return new KeyboardId(xmlName, xmlId, mLocale, mOrientation, mWidth, mMode, mAttribute, return new KeyboardId(xmlName, xmlId, mLocale, mOrientation, mWidth, mMode, mAttribute,
mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); mHasSettingsKey, mF2KeyMode, mClobberSettingsKey, mVoiceKeyEnabled, mHasVoiceKey,
mEnableShiftLock);
} }
public KeyboardId cloneWithNewGeometry(int width) { public KeyboardId cloneWithNewGeometry(int width) {
if (mWidth == width) if (mWidth == width)
return this; return this;
return new KeyboardId(mXmlName, mXmlId, mLocale, mOrientation, width, mMode, mAttribute, return new KeyboardId(mXmlName, mXmlId, mLocale, mOrientation, width, mMode, mAttribute,
mHasSettingsKey, mVoiceKeyEnabled, mHasVoiceKey, mEnableShiftLock); mHasSettingsKey, mF2KeyMode, mClobberSettingsKey, mVoiceKeyEnabled, mHasVoiceKey,
mEnableShiftLock);
} }
public int getXmlId() { public int getXmlId() {
@ -149,6 +164,8 @@ public class KeyboardId {
&& other.mNavigateAction == this.mNavigateAction && other.mNavigateAction == this.mNavigateAction
&& other.mPasswordInput == this.mPasswordInput && other.mPasswordInput == this.mPasswordInput
&& other.mHasSettingsKey == this.mHasSettingsKey && other.mHasSettingsKey == this.mHasSettingsKey
&& other.mF2KeyMode == this.mF2KeyMode
&& other.mClobberSettingsKey == this.mClobberSettingsKey
&& other.mVoiceKeyEnabled == this.mVoiceKeyEnabled && other.mVoiceKeyEnabled == this.mVoiceKeyEnabled
&& other.mHasVoiceKey == this.mHasVoiceKey && other.mHasVoiceKey == this.mHasVoiceKey
&& other.mImeAction == this.mImeAction && other.mImeAction == this.mImeAction
@ -162,12 +179,14 @@ public class KeyboardId {
@Override @Override
public String toString() { public String toString() {
return String.format("[%s.xml %s %s%d %s %s %s%s%s%s%s%s]", return String.format("[%s.xml %s %s%d %s %s %s%s%s%s%s%s%s%s]",
mXmlName, mXmlName,
mLocale, mLocale,
(mOrientation == 1 ? "port" : "land"), mWidth, (mOrientation == 1 ? "port" : "land"), mWidth,
modeName(mMode), modeName(mMode),
EditorInfoCompatUtils.imeOptionsName(mImeAction), EditorInfoCompatUtils.imeOptionsName(mImeAction),
f2KeyModeName(mF2KeyMode),
(mClobberSettingsKey ? " clobberSettingsKey" : ""),
(mNavigateAction ? " navigateAction" : ""), (mNavigateAction ? " navigateAction" : ""),
(mPasswordInput ? " passwordInput" : ""), (mPasswordInput ? " passwordInput" : ""),
(mHasSettingsKey ? " hasSettingsKey" : ""), (mHasSettingsKey ? " hasSettingsKey" : ""),
@ -185,7 +204,17 @@ public class KeyboardId {
case MODE_IM: return "im"; case MODE_IM: return "im";
case MODE_PHONE: return "phone"; case MODE_PHONE: return "phone";
case MODE_NUMBER: return "number"; case MODE_NUMBER: return "number";
default: return null;
}
}
public static String f2KeyModeName(int f2KeyMode) {
switch (f2KeyMode) {
case F2KEY_MODE_NONE: return "none";
case F2KEY_MODE_SETTINGS: return "settings";
case F2KEY_MODE_SHORTCUT_IME: return "shortcutIme";
case F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS: return "shortcutImeOrSettings";
default: return null;
} }
return null;
} }
} }

View File

@ -285,6 +285,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
} }
} }
final boolean hasSettingsKey = hasSettingsKey(attribute); final boolean hasSettingsKey = hasSettingsKey(attribute);
final int f2KeyMode = getF2KeyMode(mPrefs, mInputMethodService, attribute);
final boolean clobberSettingsKey = Utils.inPrivateImeOptions(
mInputMethodService.getPackageName(), LatinIME.IME_OPTION_NO_SETTINGS_KEY,
attribute);
final Resources res = mInputMethodService.getResources(); final Resources res = mInputMethodService.getResources();
final int orientation = res.getConfiguration().orientation; final int orientation = res.getConfiguration().orientation;
if (mKeyboardWidth == 0) if (mKeyboardWidth == 0)
@ -292,7 +296,8 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
final Locale locale = mSubtypeSwitcher.getInputLocale(); final Locale locale = mSubtypeSwitcher.getInputLocale();
return new KeyboardId( return new KeyboardId(
res.getResourceEntryName(xmlId), xmlId, locale, orientation, mKeyboardWidth, res.getResourceEntryName(xmlId), xmlId, locale, orientation, mKeyboardWidth,
mode, attribute, hasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, enableShiftLock); mode, attribute, hasSettingsKey, f2KeyMode, clobberSettingsKey, mVoiceKeyEnabled,
hasVoiceKey, enableShiftLock);
} }
private KeyboardId makeSiblingKeyboardId(KeyboardId base, int alphabet, int phone) { private KeyboardId makeSiblingKeyboardId(KeyboardId base, int alphabet, int phone) {
@ -806,16 +811,16 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
} }
private static boolean getSettingsKeyMode(SharedPreferences prefs, Context context) { private static boolean getSettingsKeyMode(SharedPreferences prefs, Context context) {
Resources resources = context.getResources(); final Resources res = context.getResources();
final boolean showSettingsKeyOption = resources.getBoolean( final boolean showSettingsKeyOption = res.getBoolean(
R.bool.config_enable_show_settings_key_option); R.bool.config_enable_show_settings_key_option);
if (showSettingsKeyOption) { if (showSettingsKeyOption) {
final String settingsKeyMode = prefs.getString(Settings.PREF_SETTINGS_KEY, final String settingsKeyMode = prefs.getString(Settings.PREF_SETTINGS_KEY,
resources.getString(DEFAULT_SETTINGS_KEY_MODE)); res.getString(DEFAULT_SETTINGS_KEY_MODE));
// We show the settings key when 1) SETTINGS_KEY_MODE_ALWAYS_SHOW or // We show the settings key when 1) SETTINGS_KEY_MODE_ALWAYS_SHOW or
// 2) SETTINGS_KEY_MODE_AUTO and there are two or more enabled IMEs on the system // 2) SETTINGS_KEY_MODE_AUTO and there are two or more enabled IMEs on the system
if (settingsKeyMode.equals(resources.getString(SETTINGS_KEY_MODE_ALWAYS_SHOW)) if (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_ALWAYS_SHOW))
|| (settingsKeyMode.equals(resources.getString(SETTINGS_KEY_MODE_AUTO)) || (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_AUTO))
&& Utils.hasMultipleEnabledIMEsOrSubtypes( && Utils.hasMultipleEnabledIMEsOrSubtypes(
(InputMethodManagerCompatWrapper.getInstance(context))))) { (InputMethodManagerCompatWrapper.getInstance(context))))) {
return true; return true;
@ -825,4 +830,21 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
// If the show settings key option is disabled, we always try showing the settings key. // If the show settings key option is disabled, we always try showing the settings key.
return true; return true;
} }
private static int getF2KeyMode(SharedPreferences prefs, Context context,
EditorInfo attribute) {
final boolean clobberSettingsKey = Utils.inPrivateImeOptions(
context.getPackageName(), LatinIME.IME_OPTION_NO_SETTINGS_KEY, attribute);
final Resources res = context.getResources();
final String settingsKeyMode = prefs.getString(Settings.PREF_SETTINGS_KEY,
res.getString(DEFAULT_SETTINGS_KEY_MODE));
if (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_AUTO))) {
return clobberSettingsKey ? KeyboardId.F2KEY_MODE_SHORTCUT_IME
: KeyboardId.F2KEY_MODE_SHORTCUT_IME_OR_SETTINGS;
} else if (settingsKeyMode.equals(res.getString(SETTINGS_KEY_MODE_ALWAYS_SHOW))) {
return clobberSettingsKey ? KeyboardId.F2KEY_MODE_NONE : KeyboardId.F2KEY_MODE_SETTINGS;
} else { // SETTINGS_KEY_MODE_ALWAYS_HIDE
return KeyboardId.F2KEY_MODE_SHORTCUT_IME;
}
}
} }

View File

@ -487,8 +487,12 @@ public class KeyboardParser {
R.styleable.Keyboard_Case_navigateAction, id.mNavigateAction); R.styleable.Keyboard_Case_navigateAction, id.mNavigateAction);
final boolean passwordInputMatched = matchBoolean(a, final boolean passwordInputMatched = matchBoolean(a,
R.styleable.Keyboard_Case_passwordInput, id.mPasswordInput); R.styleable.Keyboard_Case_passwordInput, id.mPasswordInput);
final boolean settingsKeyMatched = matchBoolean(a, final boolean hasSettingsKeyMatched = matchBoolean(a,
R.styleable.Keyboard_Case_hasSettingsKey, id.mHasSettingsKey); R.styleable.Keyboard_Case_hasSettingsKey, id.mHasSettingsKey);
final boolean f2KeyModeMatched = matchInteger(a,
R.styleable.Keyboard_Case_f2KeyMode, id.mF2KeyMode);
final boolean clobberSettingsKeyMatched = matchBoolean(a,
R.styleable.Keyboard_Case_clobberSettingsKey, id.mClobberSettingsKey);
final boolean voiceEnabledMatched = matchBoolean(a, final boolean voiceEnabledMatched = matchBoolean(a,
R.styleable.Keyboard_Case_voiceKeyEnabled, id.mVoiceKeyEnabled); R.styleable.Keyboard_Case_voiceKeyEnabled, id.mVoiceKeyEnabled);
final boolean voiceKeyMatched = matchBoolean(a, final boolean voiceKeyMatched = matchBoolean(a,
@ -506,15 +510,19 @@ public class KeyboardParser {
final boolean countryCodeMatched = matchString(a, final boolean countryCodeMatched = matchString(a,
R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry()); R.styleable.Keyboard_Case_countryCode, id.mLocale.getCountry());
final boolean selected = modeMatched && navigateActionMatched && passwordInputMatched final boolean selected = modeMatched && navigateActionMatched && passwordInputMatched
&& settingsKeyMatched && voiceEnabledMatched && voiceKeyMatched && hasSettingsKeyMatched && f2KeyModeMatched && clobberSettingsKeyMatched
&& imeActionMatched && localeCodeMatched && languageCodeMatched && voiceEnabledMatched && voiceKeyMatched && imeActionMatched &&
&& countryCodeMatched; localeCodeMatched && languageCodeMatched && countryCodeMatched;
if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE, if (DEBUG) Log.d(TAG, String.format("<%s%s%s%s%s%s%s%s%s%s%s%s%s> %s", TAG_CASE,
textAttr(a.getString(R.styleable.Keyboard_Case_mode), "mode"), textAttr(a.getString(R.styleable.Keyboard_Case_mode), "mode"),
booleanAttr(a, R.styleable.Keyboard_Case_navigateAction, "navigateAction"), booleanAttr(a, R.styleable.Keyboard_Case_navigateAction, "navigateAction"),
booleanAttr(a, R.styleable.Keyboard_Case_passwordInput, "passwordInput"), booleanAttr(a, R.styleable.Keyboard_Case_passwordInput, "passwordInput"),
booleanAttr(a, R.styleable.Keyboard_Case_hasSettingsKey, "hasSettingsKey"), booleanAttr(a, R.styleable.Keyboard_Case_hasSettingsKey, "hasSettingsKey"),
textAttr(KeyboardId.f2KeyModeName(
a.getInt(R.styleable.Keyboard_Case_f2KeyMode, -1)), "f2KeyMode"),
booleanAttr(a, R.styleable.Keyboard_Case_clobberSettingsKey,
"clobberSettingsKey"),
booleanAttr(a, R.styleable.Keyboard_Case_voiceKeyEnabled, "voiceKeyEnabled"), booleanAttr(a, R.styleable.Keyboard_Case_voiceKeyEnabled, "voiceKeyEnabled"),
booleanAttr(a, R.styleable.Keyboard_Case_hasVoiceKey, "hasVoiceKey"), booleanAttr(a, R.styleable.Keyboard_Case_hasVoiceKey, "hasVoiceKey"),
textAttr(EditorInfoCompatUtils.imeOptionsName( textAttr(EditorInfoCompatUtils.imeOptionsName(

View File

@ -42,7 +42,7 @@ public class SuggestTestsBase extends AndroidTestCase {
return new KeyboardId(locale.toString() + " keyboard", return new KeyboardId(locale.toString() + " keyboard",
com.android.inputmethod.latin.R.xml.kbd_qwerty, locale, com.android.inputmethod.latin.R.xml.kbd_qwerty, locale,
Configuration.ORIENTATION_LANDSCAPE, displayWidth, KeyboardId.MODE_TEXT, Configuration.ORIENTATION_LANDSCAPE, displayWidth, KeyboardId.MODE_TEXT,
new EditorInfo(), false, false, false, false); new EditorInfo(), false, KeyboardId.F2KEY_MODE_NONE, false, false, false, false);
} }
protected InputStream openTestRawResource(int resIdInTest) { protected InputStream openTestRawResource(int resIdInTest) {