Merge "Add next/prev navigate action more keys and remove tab key"
commit
1b3c16c183
|
@ -355,7 +355,8 @@
|
||||||
<enum name="phone" value="4" />
|
<enum name="phone" value="4" />
|
||||||
<enum name="number" value="5" />
|
<enum name="number" value="5" />
|
||||||
</attr>
|
</attr>
|
||||||
<attr name="navigateAction" format="boolean" />
|
<attr name="navigateNext" format="boolean" />
|
||||||
|
<attr name="navigatePrevious" format="boolean" />
|
||||||
<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" />
|
||||||
|
|
|
@ -118,6 +118,8 @@
|
||||||
<string name="settings_as_more_key">\@icon/settingsKey|\@integer/key_settings</string>
|
<string name="settings_as_more_key">\@icon/settingsKey|\@integer/key_settings</string>
|
||||||
<string name="keylabel_for_comma">,</string>
|
<string name="keylabel_for_comma">,</string>
|
||||||
<string name="more_keys_for_comma"></string>
|
<string name="more_keys_for_comma"></string>
|
||||||
|
<string name="action_next_as_more_key">\@string/label_next_key|\@integer/key_action_next</string>
|
||||||
|
<string name="action_previous_as_more_key">\@string/label_previous_key|\@integer/key_action_previous</string>
|
||||||
<string name="keylabel_for_symbols_question">\?</string>
|
<string name="keylabel_for_symbols_question">\?</string>
|
||||||
<string name="keylabel_for_symbols_semicolon">;</string>
|
<string name="keylabel_for_symbols_semicolon">;</string>
|
||||||
<string name="keylabel_for_symbols_percent">%</string>
|
<string name="keylabel_for_symbols_percent">%</string>
|
||||||
|
|
|
@ -30,5 +30,7 @@
|
||||||
<integer name="key_settings">-5</integer>
|
<integer name="key_settings">-5</integer>
|
||||||
<integer name="key_shortcut">-6</integer>
|
<integer name="key_shortcut">-6</integer>
|
||||||
<integer name="key_action_enter">-7</integer>
|
<integer name="key_action_enter">-7</integer>
|
||||||
<integer name="key_unspecified">-9</integer>
|
<integer name="key_action_next">-8</integer>
|
||||||
|
<integer name="key_action_previous">-9</integer>
|
||||||
|
<integer name="key_unspecified">-10</integer>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_styles_enter_tablet" />
|
latin:keyboardLayout="@xml/key_styles_enter" />
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="spaceKeyStyle"
|
latin:styleName="spaceKeyStyle"
|
||||||
latin:code="@integer/key_space"
|
latin:code="@integer/key_space"
|
||||||
|
@ -102,12 +102,27 @@
|
||||||
latin:keyIcon="iconSettingsKey"
|
latin:keyIcon="iconSettingsKey"
|
||||||
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted"
|
||||||
|
latin:navigatePrevious="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="tabKeyStyle"
|
||||||
|
latin:code="@integer/key_action_previous"
|
||||||
|
latin:keyIcon="iconTabKey"
|
||||||
|
latin:keyIconPreview="iconPreviewTabKey"
|
||||||
|
latin:backgroundType="functional" />
|
||||||
|
</case>
|
||||||
|
<default>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="tabKeyStyle"
|
latin:styleName="tabKeyStyle"
|
||||||
latin:code="@integer/key_tab"
|
latin:code="@integer/key_tab"
|
||||||
latin:keyIcon="iconTabKey"
|
latin:keyIcon="iconTabKey"
|
||||||
latin:keyIconPreview="iconPreviewTabKey"
|
latin:keyIconPreview="iconPreviewTabKey"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="toSymbolKeyStyle"
|
latin:styleName="toSymbolKeyStyle"
|
||||||
latin:code="@integer/key_switch_alpha_symbol"
|
latin:code="@integer/key_switch_alpha_symbol"
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_styles_enter_tablet" />
|
latin:keyboardLayout="@xml/key_styles_enter" />
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="spaceKeyStyle"
|
latin:styleName="spaceKeyStyle"
|
||||||
latin:code="@integer/key_space"
|
latin:code="@integer/key_space"
|
||||||
|
@ -101,12 +101,27 @@
|
||||||
latin:keyIcon="iconSettingsKey"
|
latin:keyIcon="iconSettingsKey"
|
||||||
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted"
|
||||||
|
latin:navigatePrevious="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="tabKeyStyle"
|
||||||
|
latin:code="@integer/key_action_previous"
|
||||||
|
latin:keyLabel="@string/label_tab_key"
|
||||||
|
latin:keyLabelFlags="fontNormal|preserveCase"
|
||||||
|
latin:backgroundType="functional" />
|
||||||
|
</case>
|
||||||
|
<default>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="tabKeyStyle"
|
latin:styleName="tabKeyStyle"
|
||||||
latin:code="@integer/key_tab"
|
latin:code="@integer/key_tab"
|
||||||
latin:keyLabel="@string/label_tab_key"
|
latin:keyLabel="@string/label_tab_key"
|
||||||
latin:keyLabelFlags="fontNormal|preserveCase"
|
latin:keyLabelFlags="fontNormal|preserveCase"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="toSymbolKeyStyle"
|
latin:styleName="toSymbolKeyStyle"
|
||||||
latin:code="@integer/key_switch_alpha_symbol"
|
latin:code="@integer/key_switch_alpha_symbol"
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2010, 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:navigateAction="false"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:mode="url"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="/"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:mode="email"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="\@"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:hasShortcutKey="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="shortcutKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<!-- latin:hasShortcutKey="false" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="@string/keylabel_for_comma"
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</case>
|
|
||||||
<!-- TODO: Remove dedicated navigation tab key. -->
|
|
||||||
<!-- navigateAction="true" -->
|
|
||||||
<default>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:mode="url"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="/"
|
|
||||||
latin:keyWidth="9.2%p"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:mode="email"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="\@"
|
|
||||||
latin:keyWidth="9.2%p"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:hasShortcutKey="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="shortcutKeyStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
</case>
|
|
||||||
<!-- hasShortcutKey="false" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="@string/keylabel_for_comma"
|
|
||||||
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
|
||||||
latin:keyStyle="f1PopupStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -1,37 +0,0 @@
|
||||||
<?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:navigateAction="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="tabKeyStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
</case>
|
|
||||||
<!-- hasSettingsKey="false" and navigateAction="false" -->
|
|
||||||
<default>
|
|
||||||
<!-- No key. -->
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -27,13 +27,13 @@
|
||||||
latin:clobberSettingsKey="true"
|
latin:clobberSettingsKey="true"
|
||||||
>
|
>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="f1PopupStyle"
|
latin:styleName="f1MoreKeysStyle"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
</case>
|
</case>
|
||||||
<!-- clobberSettingsKey="false" -->
|
<!-- clobberSettingsKey="false" -->
|
||||||
<default>
|
<default>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="f1PopupStyle"
|
latin:styleName="f1MoreKeysStyle"
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
latin:moreKeys="@string/settings_as_more_key"
|
latin:moreKeys="@string/settings_as_more_key"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
|
@ -77,7 +77,22 @@
|
||||||
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
latin:keyActionFlags="isRepeatable|noKeyPreview"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_styles_enter_phone" />
|
latin:keyboardLayout="@xml/key_styles_enter" />
|
||||||
|
<switch>
|
||||||
|
<!-- Smiley in textShortMessage field.
|
||||||
|
Overrides common enter key style. -->
|
||||||
|
<case
|
||||||
|
latin:mode="im"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="enterKeyStyle"
|
||||||
|
latin:keyLabel=":-)"
|
||||||
|
latin:keyOutputText=":-) "
|
||||||
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
|
latin:moreKeys="@string/more_keys_for_smiley"
|
||||||
|
latin:backgroundType="functional" />
|
||||||
|
</case>
|
||||||
|
</switch>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="spaceKeyStyle"
|
latin:styleName="spaceKeyStyle"
|
||||||
latin:code="@integer/key_space"
|
latin:code="@integer/key_space"
|
||||||
|
@ -91,7 +106,7 @@
|
||||||
latin:keyLabelFlags="preserveCase"
|
latin:keyLabelFlags="preserveCase"
|
||||||
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
|
||||||
latin:altCode="@integer/key_space"
|
latin:altCode="@integer/key_space"
|
||||||
latin:parentStyle="f1PopupStyle" />
|
latin:parentStyle="f1MoreKeysStyle" />
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="settingsKeyStyle"
|
latin:styleName="settingsKeyStyle"
|
||||||
latin:code="@integer/key_settings"
|
latin:code="@integer/key_settings"
|
||||||
|
|
|
@ -21,6 +21,60 @@
|
||||||
<merge
|
<merge
|
||||||
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
||||||
>
|
>
|
||||||
|
<!-- Navigate more keys style -->
|
||||||
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:imeAction="actionNext"
|
||||||
|
latin:navigatePrevious="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle"
|
||||||
|
latin:keyLabelFlags="hasPopupHint|preserveCase"
|
||||||
|
latin:moreKeys="@string/action_previous_as_more_key" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:imeAction="actionPrevious"
|
||||||
|
latin:navigateNext="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle"
|
||||||
|
latin:keyLabelFlags="hasPopupHint|preserveCase"
|
||||||
|
latin:moreKeys="@string/action_next_as_more_key" />
|
||||||
|
</case>
|
||||||
|
<!-- imeAction!="actionNext" and imeAction!="actionPrevious" -->
|
||||||
|
<case
|
||||||
|
latin:navigateNext="true"
|
||||||
|
latin:navigatePrevious="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle"
|
||||||
|
latin:keyLabelFlags="hasPopupHint|preserveCase"
|
||||||
|
latin:moreKeys="!fixedColumnOrder!2,\@string/action_previous_as_more_key,\@string/action_next_as_more_key" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:navigateNext="true"
|
||||||
|
latin:navigatePrevious="false"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle"
|
||||||
|
latin:keyLabelFlags="hasPopupHint|preserveCase"
|
||||||
|
latin:moreKeys="@string/action_next_as_more_key" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:navigateNext="false"
|
||||||
|
latin:navigatePrevious="true"
|
||||||
|
>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle"
|
||||||
|
latin:keyLabelFlags="hasPopupHint|preserveCase"
|
||||||
|
latin:moreKeys="@string/action_previous_as_more_key" />
|
||||||
|
</case>
|
||||||
|
<!-- naviagteNext="false" and navigatePrevious="false" -->
|
||||||
|
<default>
|
||||||
|
<key-style
|
||||||
|
latin:styleName="navigateMoreKeysStyle" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
<!-- Enter key style -->
|
<!-- Enter key style -->
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="defaultEnterKeyStyle"
|
latin:styleName="defaultEnterKeyStyle"
|
||||||
|
@ -28,7 +82,8 @@
|
||||||
latin:keyIcon="iconReturnKey"
|
latin:keyIcon="iconReturnKey"
|
||||||
latin:keyLabelFlags="autoXScale|preserveCase"
|
latin:keyLabelFlags="autoXScale|preserveCase"
|
||||||
latin:keyActionFlags="noKeyPreview"
|
latin:keyActionFlags="noKeyPreview"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional"
|
||||||
|
latin:parentStyle="navigateMoreKeysStyle" />
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="defaultActionKeyStyle"
|
latin:styleName="defaultActionKeyStyle"
|
||||||
latin:code="@integer/key_action_enter"
|
latin:code="@integer/key_action_enter"
|
||||||
|
@ -45,18 +100,6 @@
|
||||||
latin:styleName="enterKeyStyle"
|
latin:styleName="enterKeyStyle"
|
||||||
latin:parentStyle="defaultEnterKeyStyle" />
|
latin:parentStyle="defaultEnterKeyStyle" />
|
||||||
</case>
|
</case>
|
||||||
<!-- Smiley in textShortMessage field. -->
|
|
||||||
<case
|
|
||||||
latin:mode="im"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel=":-)"
|
|
||||||
latin:keyOutputText=":-) "
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:moreKeys="@string/more_keys_for_smiley"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
</case>
|
|
||||||
<case
|
<case
|
||||||
latin:imeAction="actionGo"
|
latin:imeAction="actionGo"
|
||||||
>
|
>
|
|
@ -1,111 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2012, 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"
|
|
||||||
>
|
|
||||||
<!-- Enter key style -->
|
|
||||||
<key-style
|
|
||||||
latin:styleName="defaultEnterKeyStyle"
|
|
||||||
latin:code="@integer/key_enter"
|
|
||||||
latin:keyIcon="iconReturnKey"
|
|
||||||
latin:keyLabelFlags="autoXScale|preserveCase"
|
|
||||||
latin:keyActionFlags="noKeyPreview"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
<key-style
|
|
||||||
latin:styleName="defaultActionKeyStyle"
|
|
||||||
latin:code="@integer/key_action_enter"
|
|
||||||
latin:keyIcon="iconUndefined"
|
|
||||||
latin:backgroundType="action"
|
|
||||||
latin:parentStyle="defaultEnterKeyStyle" />
|
|
||||||
<switch>
|
|
||||||
<!-- Shift + Enter in textMultiLine field. -->
|
|
||||||
<case
|
|
||||||
latin:isMultiLine="true"
|
|
||||||
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLockShifted"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:parentStyle="defaultEnterKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionGo"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel="@string/label_go_key"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionNext"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel="@string/label_next_key"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionPrevious"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel="@string/label_previous_key"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionDone"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel="@string/label_done_key"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionSend"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabel="@string/label_send_key"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionSearch"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyIcon="iconSearchKey"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<case
|
|
||||||
latin:imeAction="actionCustomLabel"
|
|
||||||
>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:keyLabelFlags="fromCustomActionLabel"
|
|
||||||
latin:parentStyle="defaultActionKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<!-- imeAction is either actionNone or actionUnspecified. -->
|
|
||||||
<default>
|
|
||||||
<key-style
|
|
||||||
latin:styleName="enterKeyStyle"
|
|
||||||
latin:parentStyle="defaultEnterKeyStyle" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -1,67 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2010, 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:navigateAction="false"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:hasShortcutKey="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="shortcutKeyStyle" />
|
|
||||||
</case>
|
|
||||||
<!-- latin:hasShortcutKey="false" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="@string/keylabel_for_comma"
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
|
||||||
latin:keyStyle="f1PopupStyle" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</case>
|
|
||||||
<!-- navigateAction="true" -->
|
|
||||||
<default>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:hasShortcutKey="true"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="shortcutKeyStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
</case>
|
|
||||||
<!-- latin:hasShortcutKey="false" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="@string/keylabel_for_comma"
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
|
||||||
latin:keyStyle="f1PopupStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -23,16 +23,40 @@
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
latin:keyWidth="10%p"
|
latin:keyWidth="10%p"
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:navigateAction="false"
|
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="toSymbolKeyStyle"
|
latin:keyStyle="toSymbolKeyStyle"
|
||||||
latin:keyWidth="15%p" />
|
latin:keyWidth="15%p" />
|
||||||
<include
|
<switch>
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
<case
|
||||||
|
latin:mode="url"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="/"
|
||||||
|
latin:keyStyle="f1MoreKeysStyle" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:mode="email"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="\@"
|
||||||
|
latin:keyStyle="f1MoreKeysStyle" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:hasShortcutKey="true"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="shortcutKeyStyle" />
|
||||||
|
</case>
|
||||||
|
<!-- latin:hasShortcutKey="false" -->
|
||||||
|
<default>
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="@string/keylabel_for_comma"
|
||||||
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
|
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
||||||
|
latin:keyStyle="f1MoreKeysStyle" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="spaceKeyStyle"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyWidth="50%p" />
|
latin:keyWidth="50%p" />
|
||||||
|
@ -41,27 +65,5 @@
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="enterKeyStyle"
|
latin:keyStyle="enterKeyStyle"
|
||||||
latin:keyWidth="fillRight" />
|
latin:keyWidth="fillRight" />
|
||||||
</case>
|
|
||||||
<!-- TODO: Remove dedicated navigation tab key. -->
|
|
||||||
<!-- navigateAction="true" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toSymbolKeyStyle"
|
|
||||||
latin:keyWidth="13.75%p" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_navigation_tab" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="spaceKeyStyle"
|
|
||||||
latin:keyWidth="35.83%p" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="punctuationKeyStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</Row>
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2010, 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"
|
|
||||||
>
|
|
||||||
<Row
|
|
||||||
latin:keyWidth="10%p"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:navigateAction="false"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toAlphaKeyStyle"
|
|
||||||
latin:keyWidth="15%p" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_symbols_f1" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="spaceKeyStyle"
|
|
||||||
latin:keyWidth="50%p" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="punctuationKeyStyle" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</case>
|
|
||||||
<!-- TODO: Remove dedicated navigation tab key. -->
|
|
||||||
<!-- navigateAction="true" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toAlphaKeyStyle"
|
|
||||||
latin:keyWidth="13.75%p" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_navigation_tab" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="spaceKeyStyle"
|
|
||||||
latin:keyWidth="35.83%p" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="punctuationKeyStyle"
|
|
||||||
latin:keyWidth="9.2%p" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</Row>
|
|
||||||
</merge>
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Copyright 2010, 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"
|
|
||||||
>
|
|
||||||
<Row
|
|
||||||
latin:keyWidth="10%p"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:navigateAction="false"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toAlphaKeyStyle"
|
|
||||||
latin:keyWidth="15%p" />
|
|
||||||
<!-- U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
|
|
||||||
<!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. -->
|
|
||||||
<!-- latin:keyLabelFlags="hasPopupHint" -->
|
|
||||||
<!-- latin:moreKeys="‟" -->
|
|
||||||
<!-- U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="„"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="spaceKeyStyle"
|
|
||||||
latin:keyWidth="50%p" />
|
|
||||||
<!-- U+2026: "…" HORIZONTAL ELLIPSIS -->
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="…"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</case>
|
|
||||||
<!-- TODO: Remove dedicated navigation tab key. -->
|
|
||||||
<!-- navigateAction="true" -->
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toAlphaKeyStyle"
|
|
||||||
latin:keyWidth="13.75%p" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_navigation_tab" />
|
|
||||||
<!-- U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
|
|
||||||
<!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. -->
|
|
||||||
<!-- latin:keyLabelFlags="hasPopupHint" -->
|
|
||||||
<!-- latin:moreKeys="‟" -->
|
|
||||||
<!-- U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="„"
|
|
||||||
latin:keyWidth="9.2%p"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="spaceKeyStyle"
|
|
||||||
latin:keyWidth="35.83%p" />
|
|
||||||
<!-- U+2026: "…" HORIZONTAL ELLIPSIS -->
|
|
||||||
<Key
|
|
||||||
latin:keyLabel="…"
|
|
||||||
latin:keyWidth="9.2%p"
|
|
||||||
latin:backgroundType="functional" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</Row>
|
|
||||||
</merge>
|
|
|
@ -128,6 +128,35 @@
|
||||||
latin:keyWidth="fillRight"
|
latin:keyWidth="fillRight"
|
||||||
latin:visualInsetsLeft="1%p" />
|
latin:visualInsetsLeft="1%p" />
|
||||||
</Row>
|
</Row>
|
||||||
<include
|
<Row
|
||||||
latin:keyboardLayout="@xml/row_symbols4" />
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
|
latin:keyWidth="15%p" />
|
||||||
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:hasShortcutKey="true"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="shortcutKeyStyle" />
|
||||||
|
</case>
|
||||||
|
<!-- latin:hasShortcutKey="false" -->
|
||||||
|
<default>
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="@string/keylabel_for_comma"
|
||||||
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
|
latin:additionalMoreKeys="@string/more_keys_for_comma"
|
||||||
|
latin:keyStyle="f1MoreKeysStyle" />
|
||||||
|
</default>
|
||||||
|
</switch>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="spaceKeyStyle"
|
||||||
|
latin:keyWidth="50%p" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="punctuationKeyStyle" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="enterKeyStyle"
|
||||||
|
latin:keyWidth="fillRight" />
|
||||||
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -119,6 +119,29 @@
|
||||||
latin:keyWidth="fillRight"
|
latin:keyWidth="fillRight"
|
||||||
latin:visualInsetsLeft="1%p" />
|
latin:visualInsetsLeft="1%p" />
|
||||||
</Row>
|
</Row>
|
||||||
<include
|
<Row
|
||||||
latin:keyboardLayout="@xml/row_symbols_shift4" />
|
latin:keyWidth="10%p"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="toAlphaKeyStyle"
|
||||||
|
latin:keyWidth="15%p" />
|
||||||
|
<!-- U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
|
||||||
|
<!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. -->
|
||||||
|
<!-- latin:keyLabelFlags="hasPopupHint" -->
|
||||||
|
<!-- latin:moreKeys="‟" -->
|
||||||
|
<!-- U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="„"
|
||||||
|
latin:backgroundType="functional" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="spaceKeyStyle"
|
||||||
|
latin:keyWidth="50%p" />
|
||||||
|
<!-- U+2026: "…" HORIZONTAL ELLIPSIS -->
|
||||||
|
<Key
|
||||||
|
latin:keyLabel="…"
|
||||||
|
latin:backgroundType="functional" />
|
||||||
|
<Key
|
||||||
|
latin:keyStyle="enterKeyStyle"
|
||||||
|
latin:keyWidth="fillRight" />
|
||||||
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -39,30 +39,30 @@ public class EditorInfoCompatUtils {
|
||||||
private static final Integer OBJ_IME_ACTION_PREVIOUS = (Integer) CompatUtils
|
private static final Integer OBJ_IME_ACTION_PREVIOUS = (Integer) CompatUtils
|
||||||
.getFieldValue(null, null, FIELD_IME_ACTION_PREVIOUS);
|
.getFieldValue(null, null, FIELD_IME_ACTION_PREVIOUS);
|
||||||
|
|
||||||
|
// EditorInfo.IME_FLAG_NAVIGATE_NEXT has been introduced since API#11 (Honeycomb).
|
||||||
public static boolean hasFlagNavigateNext(int imeOptions) {
|
public static boolean hasFlagNavigateNext(int imeOptions) {
|
||||||
if (OBJ_IME_FLAG_NAVIGATE_NEXT == null)
|
if (OBJ_IME_FLAG_NAVIGATE_NEXT == null)
|
||||||
return false;
|
return false;
|
||||||
return (imeOptions & OBJ_IME_FLAG_NAVIGATE_NEXT) != 0;
|
return (imeOptions & OBJ_IME_FLAG_NAVIGATE_NEXT) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS has been introduced since API#11 (Honeycomb).
|
||||||
public static boolean hasFlagNavigatePrevious(int imeOptions) {
|
public static boolean hasFlagNavigatePrevious(int imeOptions) {
|
||||||
if (OBJ_IME_FLAG_NAVIGATE_PREVIOUS == null)
|
if (OBJ_IME_FLAG_NAVIGATE_PREVIOUS == null)
|
||||||
return false;
|
return false;
|
||||||
return (imeOptions & OBJ_IME_FLAG_NAVIGATE_PREVIOUS) != 0;
|
return (imeOptions & OBJ_IME_FLAG_NAVIGATE_PREVIOUS) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EditorInfo.IME_FLAG_FORCE_ASCII has been introduced since API#16 (JellyBean).
|
||||||
public static boolean hasFlagForceAscii(int imeOptions) {
|
public static boolean hasFlagForceAscii(int imeOptions) {
|
||||||
if (OBJ_IME_FLAG_FORCE_ASCII == null)
|
if (OBJ_IME_FLAG_FORCE_ASCII == null)
|
||||||
return false;
|
return false;
|
||||||
return (imeOptions & OBJ_IME_FLAG_FORCE_ASCII) != 0;
|
return (imeOptions & OBJ_IME_FLAG_FORCE_ASCII) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void performEditorActionNext(InputConnection ic) {
|
// EditorInfo.IME_ACTION_PREVIOUS has been introduced since API#11 (Honeycomb).
|
||||||
ic.performEditorAction(EditorInfo.IME_ACTION_NEXT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void performEditorActionPrevious(InputConnection ic) {
|
public static void performEditorActionPrevious(InputConnection ic) {
|
||||||
if (OBJ_IME_ACTION_PREVIOUS == null)
|
if (OBJ_IME_ACTION_PREVIOUS == null || ic == null)
|
||||||
return;
|
return;
|
||||||
ic.performEditorAction(OBJ_IME_ACTION_PREVIOUS);
|
ic.performEditorAction(OBJ_IME_ACTION_PREVIOUS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,8 +99,10 @@ public class Keyboard {
|
||||||
public static final int CODE_SETTINGS = -5;
|
public static final int CODE_SETTINGS = -5;
|
||||||
public static final int CODE_SHORTCUT = -6;
|
public static final int CODE_SHORTCUT = -6;
|
||||||
public static final int CODE_ACTION_ENTER = -7;
|
public static final int CODE_ACTION_ENTER = -7;
|
||||||
|
public static final int CODE_ACTION_NEXT = -8;
|
||||||
|
public static final int CODE_ACTION_PREVIOUS = -9;
|
||||||
// Code value representing the code is not specified.
|
// Code value representing the code is not specified.
|
||||||
public static final int CODE_UNSPECIFIED = -9;
|
public static final int CODE_UNSPECIFIED = -10;
|
||||||
|
|
||||||
public final KeyboardId mId;
|
public final KeyboardId mId;
|
||||||
public final int mThemeId;
|
public final int mThemeId;
|
||||||
|
@ -381,6 +383,8 @@ public class Keyboard {
|
||||||
case CODE_SETTINGS: return "settings";
|
case CODE_SETTINGS: return "settings";
|
||||||
case CODE_SHORTCUT: return "shortcut";
|
case CODE_SHORTCUT: return "shortcut";
|
||||||
case CODE_ACTION_ENTER: return "actionEnter";
|
case CODE_ACTION_ENTER: return "actionEnter";
|
||||||
|
case CODE_ACTION_NEXT: return "actionNext";
|
||||||
|
case CODE_ACTION_PREVIOUS: return "actionPrevious";
|
||||||
case CODE_UNSPECIFIED: return "unspec";
|
case CODE_UNSPECIFIED: return "unspec";
|
||||||
case CODE_TAB: return "tab";
|
case CODE_TAB: return "tab";
|
||||||
case CODE_ENTER: return "enter";
|
case CODE_ENTER: return "enter";
|
||||||
|
@ -1069,8 +1073,10 @@ public class Keyboard {
|
||||||
KeyboardId.elementIdToName(id.mElementId));
|
KeyboardId.elementIdToName(id.mElementId));
|
||||||
final boolean modeMatched = matchTypedValue(a,
|
final boolean modeMatched = matchTypedValue(a,
|
||||||
R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode));
|
R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode));
|
||||||
final boolean navigateActionMatched = matchBoolean(a,
|
final boolean navigateNextMatched = matchBoolean(a,
|
||||||
R.styleable.Keyboard_Case_navigateAction, id.navigateAction());
|
R.styleable.Keyboard_Case_navigateNext, id.navigateNext());
|
||||||
|
final boolean navigatePreviousMatched = matchBoolean(a,
|
||||||
|
R.styleable.Keyboard_Case_navigatePrevious, id.navigatePrevious());
|
||||||
final boolean passwordInputMatched = matchBoolean(a,
|
final boolean passwordInputMatched = matchBoolean(a,
|
||||||
R.styleable.Keyboard_Case_passwordInput, id.passwordInput());
|
R.styleable.Keyboard_Case_passwordInput, id.passwordInput());
|
||||||
final boolean clobberSettingsKeyMatched = matchBoolean(a,
|
final boolean clobberSettingsKeyMatched = matchBoolean(a,
|
||||||
|
@ -1090,30 +1096,32 @@ public class Keyboard {
|
||||||
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 = keyboardSetElementMatched && modeMatched
|
final boolean selected = keyboardSetElementMatched && modeMatched
|
||||||
&& navigateActionMatched && passwordInputMatched
|
&& navigateNextMatched && navigatePreviousMatched && passwordInputMatched
|
||||||
&& clobberSettingsKeyMatched && shortcutKeyEnabledMatched
|
&& clobberSettingsKeyMatched && shortcutKeyEnabledMatched
|
||||||
&& hasShortcutKeyMatched && isMultiLineMatched && imeActionMatched
|
&& hasShortcutKeyMatched && isMultiLineMatched && imeActionMatched
|
||||||
&& localeCodeMatched && languageCodeMatched && countryCodeMatched;
|
&& localeCodeMatched && languageCodeMatched && countryCodeMatched;
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
startTag("<%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", TAG_CASE,
|
||||||
textAttr(a.getString(R.styleable.Keyboard_Case_keyboardSetElement),
|
textAttr(a.getString(R.styleable.Keyboard_Case_keyboardSetElement),
|
||||||
"keyboardSetElement"),
|
"keyboardSetElement"),
|
||||||
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,
|
textAttr(a.getString(R.styleable.Keyboard_Case_imeAction),
|
||||||
"navigateAction"),
|
"imeAction"),
|
||||||
booleanAttr(a, R.styleable.Keyboard_Case_passwordInput,
|
booleanAttr(a, R.styleable.Keyboard_Case_navigateNext,
|
||||||
"passwordInput"),
|
"navigateNext"),
|
||||||
|
booleanAttr(a, R.styleable.Keyboard_Case_navigatePrevious,
|
||||||
|
"navigatePrevious"),
|
||||||
booleanAttr(a, R.styleable.Keyboard_Case_clobberSettingsKey,
|
booleanAttr(a, R.styleable.Keyboard_Case_clobberSettingsKey,
|
||||||
"clobberSettingsKey"),
|
"clobberSettingsKey"),
|
||||||
|
booleanAttr(a, R.styleable.Keyboard_Case_passwordInput,
|
||||||
|
"passwordInput"),
|
||||||
booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyEnabled,
|
booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyEnabled,
|
||||||
"shortcutKeyEnabled"),
|
"shortcutKeyEnabled"),
|
||||||
booleanAttr(a, R.styleable.Keyboard_Case_hasShortcutKey,
|
booleanAttr(a, R.styleable.Keyboard_Case_hasShortcutKey,
|
||||||
"hasShortcutKey"),
|
"hasShortcutKey"),
|
||||||
booleanAttr(a, R.styleable.Keyboard_Case_isMultiLine,
|
booleanAttr(a, R.styleable.Keyboard_Case_isMultiLine,
|
||||||
"isMultiLine"),
|
"isMultiLine"),
|
||||||
textAttr(a.getString(R.styleable.Keyboard_Case_imeAction),
|
|
||||||
"imeAction"),
|
|
||||||
textAttr(a.getString(R.styleable.Keyboard_Case_localeCode),
|
textAttr(a.getString(R.styleable.Keyboard_Case_localeCode),
|
||||||
"localeCode"),
|
"localeCode"),
|
||||||
textAttr(a.getString(R.styleable.Keyboard_Case_languageCode),
|
textAttr(a.getString(R.styleable.Keyboard_Case_languageCode),
|
||||||
|
|
|
@ -87,7 +87,6 @@ public class KeyboardId {
|
||||||
id.mElementId,
|
id.mElementId,
|
||||||
id.mMode,
|
id.mMode,
|
||||||
id.mWidth,
|
id.mWidth,
|
||||||
id.navigateAction(),
|
|
||||||
id.passwordInput(),
|
id.passwordInput(),
|
||||||
id.mClobberSettingsKey,
|
id.mClobberSettingsKey,
|
||||||
id.mShortcutKeyEnabled,
|
id.mShortcutKeyEnabled,
|
||||||
|
@ -95,6 +94,8 @@ public class KeyboardId {
|
||||||
id.isMultiLine(),
|
id.isMultiLine(),
|
||||||
id.imeAction(),
|
id.imeAction(),
|
||||||
id.mCustomActionLabel,
|
id.mCustomActionLabel,
|
||||||
|
id.navigateNext(),
|
||||||
|
id.navigatePrevious(),
|
||||||
id.mLocale
|
id.mLocale
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -106,7 +107,6 @@ public class KeyboardId {
|
||||||
&& other.mElementId == this.mElementId
|
&& other.mElementId == this.mElementId
|
||||||
&& other.mMode == this.mMode
|
&& other.mMode == this.mMode
|
||||||
&& other.mWidth == this.mWidth
|
&& other.mWidth == this.mWidth
|
||||||
&& other.navigateAction() == this.navigateAction()
|
|
||||||
&& other.passwordInput() == this.passwordInput()
|
&& other.passwordInput() == this.passwordInput()
|
||||||
&& other.mClobberSettingsKey == this.mClobberSettingsKey
|
&& other.mClobberSettingsKey == this.mClobberSettingsKey
|
||||||
&& other.mShortcutKeyEnabled == this.mShortcutKeyEnabled
|
&& other.mShortcutKeyEnabled == this.mShortcutKeyEnabled
|
||||||
|
@ -114,6 +114,8 @@ public class KeyboardId {
|
||||||
&& other.isMultiLine() == this.isMultiLine()
|
&& other.isMultiLine() == this.isMultiLine()
|
||||||
&& other.imeAction() == this.imeAction()
|
&& other.imeAction() == this.imeAction()
|
||||||
&& TextUtils.equals(other.mCustomActionLabel, this.mCustomActionLabel)
|
&& TextUtils.equals(other.mCustomActionLabel, this.mCustomActionLabel)
|
||||||
|
&& other.navigateNext() == this.navigateNext()
|
||||||
|
&& other.navigatePrevious() == this.navigatePrevious()
|
||||||
&& other.mLocale.equals(this.mLocale);
|
&& other.mLocale.equals(this.mLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,12 +148,12 @@ public class KeyboardId {
|
||||||
return mElementId == ELEMENT_PHONE_SYMBOLS;
|
return mElementId == ELEMENT_PHONE_SYMBOLS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean navigateAction() {
|
public boolean navigateNext() {
|
||||||
// Note: Turn off checking navigation flag to show TAB key for now.
|
return EditorInfoCompatUtils.hasFlagNavigateNext(mEditorInfo.imeOptions);
|
||||||
boolean navigateAction = InputTypeCompatUtils.isWebInputType(mEditorInfo.inputType);
|
}
|
||||||
// || EditorInfoCompatUtils.hasFlagNavigateNext(mImeOptions)
|
|
||||||
// || EditorInfoCompatUtils.hasFlagNavigatePrevious(mImeOptions);
|
public boolean navigatePrevious() {
|
||||||
return navigateAction;
|
return EditorInfoCompatUtils.hasFlagNavigatePrevious(mEditorInfo.imeOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean passwordInput() {
|
public boolean passwordInput() {
|
||||||
|
@ -165,15 +167,21 @@ public class KeyboardId {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int imeAction() {
|
public int imeAction() {
|
||||||
|
final int actionId = mEditorInfo.imeOptions & EditorInfo.IME_MASK_ACTION;
|
||||||
if ((mEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
|
if ((mEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
|
||||||
return EditorInfo.IME_ACTION_NONE;
|
return EditorInfo.IME_ACTION_NONE;
|
||||||
} else if (mEditorInfo.actionLabel != null) {
|
} else if (mEditorInfo.actionLabel != null) {
|
||||||
return IME_ACTION_CUSTOM_LABEL;
|
return IME_ACTION_CUSTOM_LABEL;
|
||||||
} else {
|
} else {
|
||||||
return mEditorInfo.imeOptions & EditorInfo.IME_MASK_ACTION;
|
return actionId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int imeActionId() {
|
||||||
|
final int actionId = imeAction();
|
||||||
|
return actionId == IME_ACTION_CUSTOM_LABEL ? mEditorInfo.actionId : actionId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
return other instanceof KeyboardId && equals((KeyboardId) other);
|
return other instanceof KeyboardId && equals((KeyboardId) other);
|
||||||
|
@ -186,17 +194,19 @@ public class KeyboardId {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("[%s %s %s%d %s %s %s%s%s%s%s]",
|
return String.format("[%s %s %s%d %s %s %s%s%s%s%s%s%s]",
|
||||||
elementIdToName(mElementId),
|
elementIdToName(mElementId),
|
||||||
mLocale,
|
mLocale,
|
||||||
(mOrientation == 1 ? "port" : "land"), mWidth,
|
(mOrientation == 1 ? "port" : "land"), mWidth,
|
||||||
modeName(mMode),
|
modeName(mMode),
|
||||||
imeAction(),
|
imeAction(),
|
||||||
|
(navigateNext() ? "navigateNext" : ""),
|
||||||
|
(navigatePrevious() ? "navigatePrevious" : ""),
|
||||||
(mClobberSettingsKey ? " clobberSettingsKey" : ""),
|
(mClobberSettingsKey ? " clobberSettingsKey" : ""),
|
||||||
(navigateAction() ? " navigateAction" : ""),
|
|
||||||
(passwordInput() ? " passwordInput" : ""),
|
(passwordInput() ? " passwordInput" : ""),
|
||||||
(mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
|
(mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
|
||||||
(mHasShortcutKey ? " hasShortcutKey" : "")
|
(mHasShortcutKey ? " hasShortcutKey" : ""),
|
||||||
|
(isMultiLine() ? "isMultiLine" : "")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -163,10 +163,10 @@ public class KeyStyles {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, String.format("<%s styleName=%s />",
|
Log.d(TAG, String.format("<%s styleName=%s />",
|
||||||
Keyboard.Builder.TAG_KEY_STYLE, styleName));
|
Keyboard.Builder.TAG_KEY_STYLE, styleName));
|
||||||
}
|
|
||||||
if (mStyles.containsKey(styleName)) {
|
if (mStyles.containsKey(styleName)) {
|
||||||
throw new XmlParseUtils.ParseException(
|
Log.d(TAG, "key-style " + styleName + " is overridden at "
|
||||||
"duplicate key style declared: " + styleName, parser);
|
+ parser.getPositionDescription());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final DeclaredKeyStyle style = new DeclaredKeyStyle();
|
final DeclaredKeyStyle style = new DeclaredKeyStyle();
|
||||||
|
|
|
@ -1246,11 +1246,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
||||||
KeyboardActionListener.SUGGESTION_STRIP_COORDINATE);
|
KeyboardActionListener.SUGGESTION_STRIP_COORDINATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getEditorActionId(EditorInfo editorInfo) {
|
private static int getActionId(Keyboard keyboard) {
|
||||||
if (editorInfo == null) return 0;
|
return keyboard != null ? keyboard.mId.imeActionId() : EditorInfo.IME_ACTION_NONE;
|
||||||
return (editorInfo.actionLabel != null)
|
|
||||||
? editorInfo.actionId
|
|
||||||
: (editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void performeEditorAction(int actionId) {
|
private void performeEditorAction(int actionId) {
|
||||||
|
@ -1316,18 +1313,13 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
||||||
mSubtypeSwitcher.switchToShortcutIME();
|
mSubtypeSwitcher.switchToShortcutIME();
|
||||||
break;
|
break;
|
||||||
case Keyboard.CODE_ACTION_ENTER:
|
case Keyboard.CODE_ACTION_ENTER:
|
||||||
performeEditorAction(getEditorActionId(getCurrentInputEditorInfo()));
|
performeEditorAction(getActionId(switcher.getKeyboard()));
|
||||||
break;
|
break;
|
||||||
case Keyboard.CODE_TAB:
|
case Keyboard.CODE_ACTION_NEXT:
|
||||||
handleTab();
|
performeEditorAction(EditorInfo.IME_ACTION_NEXT);
|
||||||
// There are two cases for tab. Either we send a "next" event, that may change the
|
break;
|
||||||
// focus but will never move the cursor. Or, we send a real tab keycode, which some
|
case Keyboard.CODE_ACTION_PREVIOUS:
|
||||||
// applications may accept or ignore, and we don't know whether this will move the
|
EditorInfoCompatUtils.performEditorActionPrevious(getCurrentInputConnection());
|
||||||
// cursor or not. So actually, we don't really know.
|
|
||||||
// So to go with the safer option, we'd rather behave as if the user moved the
|
|
||||||
// cursor when they didn't than the opposite. We also expect that most applications
|
|
||||||
// will actually use tab only for focus movement.
|
|
||||||
// To sum it up: do not update mExpectingUpdateSelection here.
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mSpaceState = SPACE_STATE_NONE;
|
mSpaceState = SPACE_STATE_NONE;
|
||||||
|
@ -1494,30 +1486,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Implement next and previous actions using other key code than tab's code.
|
|
||||||
private void handleTab() {
|
|
||||||
final int imeOptions = getCurrentInputEditorInfo().imeOptions;
|
|
||||||
if (!EditorInfoCompatUtils.hasFlagNavigateNext(imeOptions)
|
|
||||||
&& !EditorInfoCompatUtils.hasFlagNavigatePrevious(imeOptions)) {
|
|
||||||
// TODO: This should be {@link #sendKeyCodePoint(int)}.
|
|
||||||
sendDownUpKeyEvents(KeyEvent.KEYCODE_TAB);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final InputConnection ic = getCurrentInputConnection();
|
|
||||||
if (ic == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
|
|
||||||
// True if keyboard is in either shift chording or manual shifted state.
|
|
||||||
final boolean isManualShifted = (keyboard != null && keyboard.isManualShifted());
|
|
||||||
if (EditorInfoCompatUtils.hasFlagNavigateNext(imeOptions) && !isManualShifted) {
|
|
||||||
EditorInfoCompatUtils.performEditorActionNext(ic);
|
|
||||||
} else if (EditorInfoCompatUtils.hasFlagNavigatePrevious(imeOptions) && isManualShifted) {
|
|
||||||
EditorInfoCompatUtils.performEditorActionPrevious(ic);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ic may be null
|
// ic may be null
|
||||||
private boolean maybeStripSpaceWhileInBatchEdit(final InputConnection ic, final int code,
|
private boolean maybeStripSpaceWhileInBatchEdit(final InputConnection ic, final int code,
|
||||||
final int spaceState, final boolean isFromSuggestionStrip) {
|
final int spaceState, final boolean isFromSuggestionStrip) {
|
||||||
|
|
|
@ -27,8 +27,7 @@ public class XmlParseUtils {
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public static class ParseException extends XmlPullParserException {
|
public static class ParseException extends XmlPullParserException {
|
||||||
public ParseException(String msg, XmlPullParser parser) {
|
public ParseException(String msg, XmlPullParser parser) {
|
||||||
super(msg + " at line " + parser.getLineNumber()
|
super(msg + " at " + parser.getPositionDescription());
|
||||||
+ ", column " + parser.getColumnNumber());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue