am ef7c701e: am 129af927: am 5e7a6fe0: Merge "Fix the bottom row of tablet keyboard layout" into lmp-dev
* commit 'ef7c701e72d9ccc735ce77829cb55cf46ed25339': Fix the bottom row of tablet keyboard layoutmain
commit
4cc44f9f62
|
@ -2,7 +2,7 @@
|
||||||
<!--
|
<!--
|
||||||
/*
|
/*
|
||||||
**
|
**
|
||||||
** Copyright 2014, The Android Open Source Project
|
** Copyright 2012, The Android Open Source Project
|
||||||
**
|
**
|
||||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
** you may not use this file except in compliance with the License.
|
** you may not use this file except in compliance with the License.
|
||||||
|
@ -21,27 +21,36 @@
|
||||||
<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"
|
||||||
>
|
>
|
||||||
<!-- The table comma key which may have settings as popup key. -->
|
|
||||||
<!-- Kept as a separate file for cleaner overriding by an overlay. -->
|
|
||||||
<key-style
|
|
||||||
latin:styleName="baseTabletCommaKeyStyle"
|
|
||||||
latin:keySpec="!text/keyspec_tablet_comma"
|
|
||||||
latin:keyHintLabel="!text/keyhintlabel_tablet_comma"
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:parentStyle="hasShiftedLetterHintStyle" />
|
|
||||||
<switch>
|
<switch>
|
||||||
<case
|
<case
|
||||||
latin:clobberSettingsKey="true"
|
latin:mode="url"
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:moreKeys="!text/morekeys_tablet_comma"
|
latin:keySpec="/"
|
||||||
latin:keyStyle="baseTabletCommaKeyStyle" />
|
latin:keyStyle="settingsMoreKeysStyle" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:mode="email"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="\@"
|
||||||
|
latin:keyStyle="settingsMoreKeysStyle" />
|
||||||
|
</case>
|
||||||
|
<case
|
||||||
|
latin:keyboardLayoutSet="dvorak"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="!"
|
||||||
|
latin:moreKeys="!text/morekeys_exclamation,%"
|
||||||
|
latin:keyStyle="settingsMoreKeysStyle" />
|
||||||
</case>
|
</case>
|
||||||
<!-- clobberSettingsKey="false" -->
|
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:moreKeys="!text/morekeys_tablet_comma,!text/keyspec_settings"
|
latin:keySpec="!text/keyspec_tablet_comma"
|
||||||
latin:keyStyle="baseTabletCommaKeyStyle" />
|
latin:moreKeys="!text/morekeys_tablet_comma,%"
|
||||||
|
latin:keyHintLabel="!text/keyhintlabel_tablet_comma"
|
||||||
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
|
latin:keyStyle="settingsMoreKeysStyle" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -1,36 +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"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:mode="email"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keySpec="\@" />
|
|
||||||
</case>
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keySpec="/" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -35,6 +35,13 @@
|
||||||
latin:moreKeys="!autoColumnOrder!8,\\,,.,',#,),(,/,;,@,:,-,",+,\\%,&"
|
latin:moreKeys="!autoColumnOrder!8,\\,,.,',#,),(,/,;,@,:,-,",+,\\%,&"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
</case>
|
</case>
|
||||||
|
<case
|
||||||
|
latin:keyboardLayoutSet="dvorak"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="\?"
|
||||||
|
latin:moreKeys="!text/morekeys_tablet_period,!text/morekeys_question" />
|
||||||
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:keySpec="!text/keyspec_tablet_period"
|
latin:keySpec="!text/keyspec_tablet_period"
|
||||||
|
|
|
@ -1,39 +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"
|
|
||||||
>
|
|
||||||
<switch>
|
|
||||||
<case
|
|
||||||
latin:mode="email|url"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keySpec="-" />
|
|
||||||
</case>
|
|
||||||
<default>
|
|
||||||
<Key
|
|
||||||
latin:keySpec="\?"
|
|
||||||
latin:keyHintLabel="!"
|
|
||||||
latin:moreKeys="!"
|
|
||||||
latin:keyStyle="hasShiftedLetterHintStyle" />
|
|
||||||
</default>
|
|
||||||
</switch>
|
|
||||||
</merge>
|
|
|
@ -34,7 +34,7 @@
|
||||||
latin:keyStyle="languageSwitchKeyStyle" />
|
latin:keyStyle="languageSwitchKeyStyle" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="spaceKeyStyle"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyWidth="27.0%p" />
|
latin:keyWidth="45.0%p" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="zwnjKeyStyle" />
|
latin:keyStyle="zwnjKeyStyle" />
|
||||||
</case>
|
</case>
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
>
|
>
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="spaceKeyStyle"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyWidth="36.0%p" />
|
latin:keyWidth="54.0%p" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="zwnjKeyStyle" />
|
latin:keyStyle="zwnjKeyStyle" />
|
||||||
</case>
|
</case>
|
||||||
|
@ -55,13 +55,13 @@
|
||||||
latin:keyStyle="languageSwitchKeyStyle" />
|
latin:keyStyle="languageSwitchKeyStyle" />
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="spaceKeyStyle"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyWidth="36.0%p" />
|
latin:keyWidth="54.0%p" />
|
||||||
</case>
|
</case>
|
||||||
<!-- languageSwitchKeyEnabled="false" -->
|
<!-- languageSwitchKeyEnabled="false" -->
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:keyStyle="spaceKeyStyle"
|
latin:keyStyle="spaceKeyStyle"
|
||||||
latin:keyWidth="45.0%p" />
|
latin:keyWidth="63.0%p" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
</merge>
|
</merge>
|
|
@ -36,6 +36,9 @@
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
<!-- Base key style for the key which may have settings key as more keys. -->
|
<!-- Base key style for the key which may have settings key as more keys. -->
|
||||||
|
<key-style
|
||||||
|
latin:styleName="baseSettingsMoreKeysStyle"
|
||||||
|
latin:parentStyle="hasShiftedLetterHintStyle" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_styles_settings" />
|
latin:keyboardLayout="@xml/key_styles_settings" />
|
||||||
<!-- Functional key styles -->
|
<!-- Functional key styles -->
|
||||||
|
|
|
@ -1,49 +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"
|
|
||||||
>
|
|
||||||
<Row
|
|
||||||
latin:keyWidth="9.0%p"
|
|
||||||
latin:backgroundType="functional"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toSymbolKeyStyle"
|
|
||||||
latin:keyWidth="10.0%p" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_settings" />
|
|
||||||
<Key
|
|
||||||
latin:keySpec="_"
|
|
||||||
latin:keyHintLabel="-"
|
|
||||||
latin:moreKeys="-"
|
|
||||||
latin:keyStyle="hasShiftedLetterHintStyle" />
|
|
||||||
<include
|
|
||||||
latin:keyXPos="28.0%p"
|
|
||||||
latin:keyboardLayout="@xml/key_space_5kw"
|
|
||||||
latin:backgroundType="normal" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_question_exclamation" />
|
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_f2" />
|
|
||||||
</Row>
|
|
||||||
</merge>
|
|
|
@ -50,6 +50,6 @@
|
||||||
latin:keyXPos="-9.0%p"
|
latin:keyXPos="-9.0%p"
|
||||||
latin:keyWidth="9.0%p"
|
latin:keyWidth="9.0%p"
|
||||||
latin:backgroundType="functional"
|
latin:backgroundType="functional"
|
||||||
latin:keyboardLayout="@xml/key_f2" />
|
latin:keyboardLayout="@xml/key_emoji" />
|
||||||
</Row>
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -30,18 +30,14 @@
|
||||||
latin:keyWidth="10.0%p" />
|
latin:keyWidth="10.0%p" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_comma" />
|
latin:keyboardLayout="@xml/key_comma" />
|
||||||
<Key
|
|
||||||
latin:keySpec="_" />
|
|
||||||
<!-- Space key. -->
|
<!-- Space key. -->
|
||||||
<include
|
<include
|
||||||
latin:keyXPos="28.0%p"
|
latin:keyXPos="19.0%p"
|
||||||
latin:keyboardLayout="@xml/key_space_5kw"
|
latin:keyboardLayout="@xml/key_space_7kw"
|
||||||
latin:backgroundType="normal" />
|
latin:backgroundType="normal" />
|
||||||
<include
|
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_period" />
|
latin:keyboardLayout="@xml/key_period" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_f2" />
|
latin:keyboardLayout="@xml/key_emoji" />
|
||||||
</Row>
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -53,6 +53,8 @@
|
||||||
latin:keyStyle="shiftKeyStyle"
|
latin:keyStyle="shiftKeyStyle"
|
||||||
latin:keyWidth="fillRight" />
|
latin:keyWidth="fillRight" />
|
||||||
</Row>
|
</Row>
|
||||||
|
<!-- Dvorak layout shares almost the same row with Qwerty layout.
|
||||||
|
The difference is defined in xml-sw600dp/row_qwerty4.xml. -->
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/row_dvorak4" />
|
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -70,6 +70,6 @@
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/row_symbols4" />
|
latin:keyboardLayout="@xml/row_symbols4" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_f2" />
|
latin:keyboardLayout="@xml/key_emoji" />
|
||||||
</Row>
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -72,6 +72,6 @@
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/row_symbols_shift4" />
|
latin:keyboardLayout="@xml/row_symbols_shift4" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_f2" />
|
latin:keyboardLayout="@xml/key_emoji" />
|
||||||
</Row>
|
</Row>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -22,6 +22,15 @@
|
||||||
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
||||||
>
|
>
|
||||||
<switch>
|
<switch>
|
||||||
|
<case
|
||||||
|
latin:keyboardLayoutSet="dvorak"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="q"
|
||||||
|
latin:moreKeys="!text/morekeys_q,%"
|
||||||
|
latin:backgroundType="normal"
|
||||||
|
latin:keyStyle="settingsMoreKeysStyle" />
|
||||||
|
</case>
|
||||||
<case
|
<case
|
||||||
latin:mode="url"
|
latin:mode="url"
|
||||||
>
|
>
|
|
@ -48,6 +48,14 @@
|
||||||
latin:moreKeys="!text/morekeys_punctuation"
|
latin:moreKeys="!text/morekeys_punctuation"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional" />
|
||||||
</case>
|
</case>
|
||||||
|
<case
|
||||||
|
latin:keyboardLayoutSet="dvorak"
|
||||||
|
>
|
||||||
|
<Key
|
||||||
|
latin:keySpec="z"
|
||||||
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
|
latin:moreKeys="!text/morekeys_punctuation,!text/morekeys_z" />
|
||||||
|
</case>
|
||||||
<default>
|
<default>
|
||||||
<Key
|
<Key
|
||||||
latin:keySpec="!text/keyspec_period"
|
latin:keySpec="!text/keyspec_period"
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
<!-- Base key style for the key which may have settings key as more keys. -->
|
<!-- Base key style for the key which may have settings key as more keys. -->
|
||||||
|
<key-style
|
||||||
|
latin:styleName="baseSettingsMoreKeysStyle" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_styles_settings" />
|
latin:keyboardLayout="@xml/key_styles_settings" />
|
||||||
<!-- Functional key styles -->
|
<!-- Functional key styles -->
|
||||||
|
|
|
@ -29,15 +29,17 @@
|
||||||
>
|
>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="settingsMoreKeysStyle"
|
latin:styleName="settingsMoreKeysStyle"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional"
|
||||||
|
latin:parentStyle="baseSettingsMoreKeysStyle" />
|
||||||
</case>
|
</case>
|
||||||
<!-- clobberSettingsKey="false" -->
|
<!-- clobberSettingsKey="false" -->
|
||||||
<default>
|
<default>
|
||||||
<key-style
|
<key-style
|
||||||
latin:styleName="settingsMoreKeysStyle"
|
latin:styleName="settingsMoreKeysStyle"
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
latin:keyLabelFlags="hasPopupHint"
|
||||||
latin:moreKeys="!text/keyspec_settings"
|
latin:additionalMoreKeys="!text/keyspec_settings"
|
||||||
latin:backgroundType="functional" />
|
latin:backgroundType="functional"
|
||||||
|
latin:parentStyle="baseSettingsMoreKeysStyle" />
|
||||||
</default>
|
</default>
|
||||||
</switch>
|
</switch>
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -1,45 +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"
|
|
||||||
>
|
|
||||||
<Row
|
|
||||||
latin:keyWidth="10%p"
|
|
||||||
>
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="toSymbolKeyStyle"
|
|
||||||
latin:keyWidth="15%p" />
|
|
||||||
<Key
|
|
||||||
latin:keySpec="q"
|
|
||||||
latin:backgroundType="normal"
|
|
||||||
latin:keyStyle="settingsMoreKeysStyle" />
|
|
||||||
<include
|
|
||||||
latin:keyXPos="25%p"
|
|
||||||
latin:keyboardLayout="@xml/key_space_5kw" />
|
|
||||||
<Key
|
|
||||||
latin:keySpec="z"
|
|
||||||
latin:keyLabelFlags="hasPopupHint"
|
|
||||||
latin:moreKeys="!text/morekeys_punctuation,!text/morekeys_z" />
|
|
||||||
<Key
|
|
||||||
latin:keyStyle="enterKeyStyle"
|
|
||||||
latin:keyWidth="fillRight" />
|
|
||||||
</Row>
|
|
||||||
</merge>
|
|
|
@ -28,7 +28,7 @@
|
||||||
latin:keyStyle="toSymbolKeyStyle"
|
latin:keyStyle="toSymbolKeyStyle"
|
||||||
latin:keyWidth="15%p" />
|
latin:keyWidth="15%p" />
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/key_f1" />
|
latin:keyboardLayout="@xml/key_comma" />
|
||||||
<include
|
<include
|
||||||
latin:keyXPos="25%p"
|
latin:keyXPos="25%p"
|
||||||
latin:keyboardLayout="@xml/key_space_5kw" />
|
latin:keyboardLayout="@xml/key_space_5kw" />
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
latin:keyWidth="fillRight"
|
latin:keyWidth="fillRight"
|
||||||
latin:visualInsetsLeft="1%p" />
|
latin:visualInsetsLeft="1%p" />
|
||||||
</Row>
|
</Row>
|
||||||
|
<!-- Dvorak layout shares almost the same row with Qwerty layout.
|
||||||
|
The difference is defined in xml/row_qwerty4.xml. -->
|
||||||
<include
|
<include
|
||||||
latin:keyboardLayout="@xml/row_dvorak4" />
|
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||||
</merge>
|
</merge>
|
||||||
|
|
|
@ -113,13 +113,13 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
|
||||||
"Unknown subtype: locale=" + locale + " keyboardLayout=" + keyboardLayout);
|
"Unknown subtype: locale=" + locale + " keyboardLayout=" + keyboardLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
final EditorInfo editorInfo) {
|
final EditorInfo editorInfo) {
|
||||||
return createKeyboardLayoutSet(subtype, editorInfo, false /* voiceInputKeyEnabled */,
|
return createKeyboardLayoutSet(subtype, editorInfo, false /* voiceInputKeyEnabled */,
|
||||||
false /* languageSwitchKeyEnabled */);
|
false /* languageSwitchKeyEnabled */);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||||
final boolean languageSwitchKeyEnabled) {
|
final boolean languageSwitchKeyEnabled) {
|
||||||
final Context context = mThemeContext;
|
final Context context = mThemeContext;
|
||||||
|
|
|
@ -78,8 +78,7 @@ public final class Arabic extends LayoutBase {
|
||||||
// U+061F: "؟" ARABIC QUESTION MARK
|
// U+061F: "؟" ARABIC QUESTION MARK
|
||||||
// U+061B: "؛" ARABIC SEMICOLON
|
// U+061B: "؛" ARABIC SEMICOLON
|
||||||
return joinKeys(key("\u060C", joinMoreKeys(
|
return joinKeys(key("\u060C", joinMoreKeys(
|
||||||
":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY)),
|
":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY)));
|
||||||
"_");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -90,7 +89,7 @@ public final class Arabic extends LayoutBase {
|
||||||
// U+060C: "،" ARABIC COMMA
|
// U+060C: "،" ARABIC COMMA
|
||||||
// U+061F: "؟" ARABIC QUESTION MARK
|
// U+061F: "؟" ARABIC QUESTION MARK
|
||||||
// U+061B: "؛" ARABIC SEMICOLON
|
// U+061B: "؛" ARABIC SEMICOLON
|
||||||
return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone)));
|
return joinKeys(key(".", getPunctuationMoreKeys(isPhone)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -62,14 +62,14 @@ public final class ArmenianPhonetic extends LayoutBase {
|
||||||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
// U+055D: "՝" ARMENIAN COMMA
|
// U+055D: "՝" ARMENIAN COMMA
|
||||||
return isPhone ? joinKeys(key("\u055D", SETTINGS_KEY))
|
return isPhone ? joinKeys(key("\u055D", SETTINGS_KEY))
|
||||||
: joinKeys(key("\u055D", SETTINGS_KEY), "_");
|
: joinKeys(key("\u055D", SETTINGS_KEY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
// U+0589: "։" ARMENIAN FULL STOP
|
// U+0589: "։" ARMENIAN FULL STOP
|
||||||
final ExpectedKey fullStopKey = key("\u0589", getPunctuationMoreKeys(isPhone));
|
final ExpectedKey fullStopKey = key("\u0589", getPunctuationMoreKeys(isPhone));
|
||||||
return isPhone ? joinKeys(fullStopKey) : joinKeys("/", fullStopKey);
|
return joinKeys(fullStopKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,13 +20,14 @@ import com.android.inputmethod.keyboard.KeyboardId;
|
||||||
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
|
||||||
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
|
||||||
|
import com.android.inputmethod.latin.settings.CustomInputStyleSettingsFragment;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The QWERTY alphabet keyboard.
|
* The Dvorak alphabet keyboard.
|
||||||
*/
|
*/
|
||||||
public final class Dvorak extends LayoutBase {
|
public class Dvorak extends LayoutBase {
|
||||||
private static final String LAYOUT_NAME = "dvorak";
|
private static final String LAYOUT_NAME = "dvorak";
|
||||||
|
|
||||||
public Dvorak(final LayoutCustomizer customizer) {
|
public Dvorak(final LayoutCustomizer customizer) {
|
||||||
|
@ -51,17 +52,19 @@ public final class Dvorak extends LayoutBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
return isPhone ? joinKeys(key("q", SETTINGS_KEY)) :
|
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||||
joinKeys(SETTINGS_KEY, key("_", moreKey("-")));
|
return isPhone ? joinKeys(key("q", SETTINGS_KEY))
|
||||||
|
: joinKeys(key("!", joinMoreKeys("\u00A1", SETTINGS_KEY)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
final ExpectedAdditionalMoreKey[] punctuationMoreKeys =
|
final ExpectedAdditionalMoreKey[] punctuationMoreKeys =
|
||||||
convertToAdditionalMoreKeys(getPunctuationMoreKeys(isPhone));
|
convertToAdditionalMoreKeys(getPunctuationMoreKeys(isPhone));
|
||||||
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||||
return isPhone
|
return isPhone
|
||||||
? joinKeys(key("z", punctuationMoreKeys))
|
? joinKeys(key("z", punctuationMoreKeys))
|
||||||
: joinKeys("/", key("?", moreKey("!")));
|
: joinKeys(key("?", joinMoreKeys(punctuationMoreKeys, "\u00BF")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ExpectedAdditionalMoreKey[] convertToAdditionalMoreKeys(
|
private static ExpectedAdditionalMoreKey[] convertToAdditionalMoreKeys(
|
||||||
|
@ -76,7 +79,33 @@ public final class Dvorak extends LayoutBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; }
|
public ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
|
||||||
|
return ALPHABET_COMMON;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) {
|
||||||
|
if (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
|
||||||
|
return key("'", joinMoreKeys(additionalMoreKey("1"), "!", "\""));
|
||||||
|
}
|
||||||
|
return key("\"", additionalMoreKey("1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ExpectedKey getRow1_2Key(final boolean isPhone, final int elementId) {
|
||||||
|
if (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
|
||||||
|
return key(",", joinMoreKeys(additionalMoreKey("2"), "?", "<"));
|
||||||
|
}
|
||||||
|
return key("<", additionalMoreKey("2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ExpectedKey getRow1_3Key(final boolean isPhone, final int elementId) {
|
||||||
|
if (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
|
||||||
|
return key(".", joinMoreKeys(additionalMoreKey("3"), ">"));
|
||||||
|
}
|
||||||
|
return key(">", additionalMoreKey("3"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) {
|
public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) {
|
||||||
|
@ -86,18 +115,9 @@ public final class Dvorak extends LayoutBase {
|
||||||
}
|
}
|
||||||
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
|
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
|
||||||
getCommonAlphabetLayout(isPhone));
|
getCommonAlphabetLayout(isPhone));
|
||||||
if (elementId == KeyboardId.ELEMENT_ALPHABET
|
builder.replaceKeyOfLabel(ROW1_1, getRow1_1Key(isPhone, elementId))
|
||||||
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
|
.replaceKeyOfLabel(ROW1_2, getRow1_2Key(isPhone, elementId))
|
||||||
builder.addKeysOnTheLeftOfRow(1,
|
.replaceKeyOfLabel(ROW1_3, getRow1_3Key(isPhone, elementId));
|
||||||
key("'", joinMoreKeys(additionalMoreKey("1"), "!", "\"")),
|
|
||||||
key(",", joinMoreKeys(additionalMoreKey("2"), "?", "<")),
|
|
||||||
key(".", joinMoreKeys(additionalMoreKey("3"), ">")));
|
|
||||||
} else {
|
|
||||||
builder.addKeysOnTheLeftOfRow(1,
|
|
||||||
key("\"", additionalMoreKey("1")),
|
|
||||||
key("<", additionalMoreKey("2")),
|
|
||||||
key(">", additionalMoreKey("3")));
|
|
||||||
}
|
|
||||||
convertCommonLayoutToKeyboard(builder, isPhone);
|
convertCommonLayoutToKeyboard(builder, isPhone);
|
||||||
getCustomizer().setAccentedLetters(builder);
|
getCustomizer().setAccentedLetters(builder);
|
||||||
if (elementId != KeyboardId.ELEMENT_ALPHABET) {
|
if (elementId != KeyboardId.ELEMENT_ALPHABET) {
|
||||||
|
@ -107,8 +127,13 @@ public final class Dvorak extends LayoutBase {
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final String ROW1_1 = "ROW1_1";
|
||||||
|
public static final String ROW1_2 = "ROW1_2";
|
||||||
|
public static final String ROW1_3 = "ROW1_3";
|
||||||
|
|
||||||
private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
|
private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
|
||||||
.setKeysOfRow(1,
|
.setKeysOfRow(1,
|
||||||
|
ROW1_1, ROW1_2, ROW1_3,
|
||||||
key("p", additionalMoreKey("4")),
|
key("p", additionalMoreKey("4")),
|
||||||
key("y", additionalMoreKey("5")),
|
key("y", additionalMoreKey("5")),
|
||||||
key("f", additionalMoreKey("6")),
|
key("f", additionalMoreKey("6")),
|
||||||
|
|
|
@ -77,8 +77,7 @@ public final class Farsi extends LayoutBase {
|
||||||
// U+061B: "؛" ARABIC SEMICOLON
|
// U+061B: "؛" ARABIC SEMICOLON
|
||||||
return joinKeys(key("\u060C", joinMoreKeys(
|
return joinKeys(key("\u060C", joinMoreKeys(
|
||||||
":", "!", "\u061F", "\u061B", "-", RtlSymbols.DOUBLE_ANGLE_QUOTES_LR_RTL,
|
":", "!", "\u061F", "\u061B", "-", RtlSymbols.DOUBLE_ANGLE_QUOTES_LR_RTL,
|
||||||
SETTINGS_KEY)),
|
SETTINGS_KEY)));
|
||||||
"_");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -86,7 +85,7 @@ public final class Farsi extends LayoutBase {
|
||||||
if (isPhone) {
|
if (isPhone) {
|
||||||
return super.getKeysRightToSpacebar(isPhone);
|
return super.getKeysRightToSpacebar(isPhone);
|
||||||
}
|
}
|
||||||
return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone)));
|
return joinKeys(key(".", getPunctuationMoreKeys(isPhone)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -50,7 +50,7 @@ public final class HindiCompact extends LayoutBase {
|
||||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
// U+0964: "।" DEVANAGARI DANDA
|
// U+0964: "।" DEVANAGARI DANDA
|
||||||
final ExpectedKey periodKey = key("\u0964", getPunctuationMoreKeys(isPhone));
|
final ExpectedKey periodKey = key("\u0964", getPunctuationMoreKeys(isPhone));
|
||||||
return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
|
return joinKeys(periodKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -148,6 +148,24 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
return isPhone ? EMPTY_KEYS : joinKeys(EXCLAMATION_AND_QUESTION_MARKS, SHIFT_KEY);
|
return isPhone ? EMPTY_KEYS : joinKeys(EXCLAMATION_AND_QUESTION_MARKS, SHIFT_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the enter key.
|
||||||
|
* @param isPhone true if requesting phone's key.
|
||||||
|
* @return the array of {@link ExpectedKey} that should be placed as an enter key.
|
||||||
|
*/
|
||||||
|
public ExpectedKey getEnterKey(final boolean isPhone) {
|
||||||
|
return isPhone ? key(ENTER_KEY, EMOJI_ACTION_KEY) : ENTER_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the emoji key.
|
||||||
|
* @param isPhone true if requesting phone's key.
|
||||||
|
* @return the array of {@link ExpectedKey} that should be placed as an emoji key.
|
||||||
|
*/
|
||||||
|
public ExpectedKey getEmojiKey(final boolean isPhone) {
|
||||||
|
return EMOJI_NORMAL_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the space keys.
|
* Get the space keys.
|
||||||
* @param isPhone true if requesting phone's keys.
|
* @param isPhone true if requesting phone's keys.
|
||||||
|
@ -165,8 +183,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
*/
|
*/
|
||||||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
// U+002C: "," COMMA
|
// U+002C: "," COMMA
|
||||||
return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
|
return joinKeys(key("\u002C", SETTINGS_KEY));
|
||||||
: joinKeys(key("\u002C", SETTINGS_KEY), "_");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -176,7 +193,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
*/
|
*/
|
||||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
final ExpectedKey periodKey = key(".", getPunctuationMoreKeys(isPhone));
|
final ExpectedKey periodKey = key(".", getPunctuationMoreKeys(isPhone));
|
||||||
return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
|
return joinKeys(periodKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -241,7 +258,25 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
*/
|
*/
|
||||||
public final LayoutCustomizer getCustomizer() { return mCustomizer; }
|
public final LayoutCustomizer getCustomizer() { return mCustomizer; }
|
||||||
|
|
||||||
// Icon id.
|
// Icon ids.
|
||||||
|
private static final int ICON_DELETE = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_DELETE_KEY);
|
||||||
|
private static final int ICON_SPACE = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_SPACE_KEY);
|
||||||
|
private static final int ICON_TAB = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_TAB_KEY);
|
||||||
|
private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_SHORTCUT_KEY);
|
||||||
|
private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_SETTINGS_KEY);
|
||||||
|
private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY);
|
||||||
|
private static final int ICON_ENTER = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_ENTER_KEY);
|
||||||
|
private static final int ICON_EMOJI_ACTION = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_EMOJI_ACTION_KEY);
|
||||||
|
private static final int ICON_EMOJI_NORMAL = KeyboardIconsSet.getIconId(
|
||||||
|
KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY);
|
||||||
private static final int ICON_SHIFT = KeyboardIconsSet.getIconId(
|
private static final int ICON_SHIFT = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_SHIFT_KEY);
|
KeyboardIconsSet.NAME_SHIFT_KEY);
|
||||||
private static final int ICON_SHIFTED_SHIFT = KeyboardIconsSet.getIconId(
|
private static final int ICON_SHIFTED_SHIFT = KeyboardIconsSet.getIconId(
|
||||||
|
@ -251,11 +286,21 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
private static final int ICON_ZWJ = KeyboardIconsSet.getIconId(
|
private static final int ICON_ZWJ = KeyboardIconsSet.getIconId(
|
||||||
KeyboardIconsSet.NAME_ZWJ_KEY);
|
KeyboardIconsSet.NAME_ZWJ_KEY);
|
||||||
|
|
||||||
// Functional key.
|
// Functional keys.
|
||||||
|
public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE);
|
||||||
|
public static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB);
|
||||||
|
public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT);
|
||||||
|
public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS);
|
||||||
|
public static final ExpectedKey LANGUAGE_SWITCH_KEY = key(
|
||||||
|
ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH);
|
||||||
|
public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER);
|
||||||
|
public static final ExpectedKey EMOJI_ACTION_KEY = key(ICON_EMOJI_ACTION, Constants.CODE_EMOJI);
|
||||||
|
public static final ExpectedKey EMOJI_NORMAL_KEY = key(ICON_EMOJI_NORMAL, Constants.CODE_EMOJI);
|
||||||
|
public static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE);
|
||||||
static final ExpectedKey CAPSLOCK_MORE_KEY = key(" ", Constants.CODE_CAPSLOCK);
|
static final ExpectedKey CAPSLOCK_MORE_KEY = key(" ", Constants.CODE_CAPSLOCK);
|
||||||
static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT,
|
public static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT,
|
||||||
Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY);
|
Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY);
|
||||||
static final ExpectedKey SHIFTED_SHIFT_KEY = key(ICON_SHIFTED_SHIFT,
|
public static final ExpectedKey SHIFTED_SHIFT_KEY = key(ICON_SHIFTED_SHIFT,
|
||||||
Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY);
|
Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY);
|
||||||
static final ExpectedKey ALPHABET_KEY = key("ABC", Constants.CODE_SWITCH_ALPHA_SYMBOL);
|
static final ExpectedKey ALPHABET_KEY = key("ABC", Constants.CODE_SWITCH_ALPHA_SYMBOL);
|
||||||
static final ExpectedKey SYMBOLS_KEY = key("?123", Constants.CODE_SWITCH_ALPHA_SYMBOL);
|
static final ExpectedKey SYMBOLS_KEY = key("?123", Constants.CODE_SWITCH_ALPHA_SYMBOL);
|
||||||
|
@ -271,6 +316,9 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
// U+200D: ZERO WIDTH JOINER
|
// U+200D: ZERO WIDTH JOINER
|
||||||
static final ExpectedKey ZWNJ_KEY = key(ICON_ZWNJ, "\u200C");
|
static final ExpectedKey ZWNJ_KEY = key(ICON_ZWNJ, "\u200C");
|
||||||
static final ExpectedKey ZWJ_KEY = key(ICON_ZWJ, "\u200D");
|
static final ExpectedKey ZWJ_KEY = key(ICON_ZWJ, "\u200D");
|
||||||
|
// Domain key
|
||||||
|
public static final ExpectedKey DOMAIN_KEY =
|
||||||
|
key(".com", joinMoreKeys(".net", ".org", ".gov", ".edu")).preserveCase();
|
||||||
|
|
||||||
// Punctuation more keys for phone form factor.
|
// Punctuation more keys for phone form factor.
|
||||||
public static final ExpectedKey[] PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
|
public static final ExpectedKey[] PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
|
||||||
|
@ -300,12 +348,12 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
||||||
if (isPhone) {
|
if (isPhone) {
|
||||||
builder.addKeysOnTheRightOfRow(numberOfRows - 1, DELETE_KEY)
|
builder.addKeysOnTheRightOfRow(numberOfRows - 1, DELETE_KEY)
|
||||||
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
||||||
.addKeysOnTheRightOfRow(numberOfRows, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
.addKeysOnTheRightOfRow(numberOfRows, customizer.getEnterKey(isPhone));
|
||||||
} else {
|
} else {
|
||||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
||||||
.addKeysOnTheRightOfRow(numberOfRows - 2, ENTER_KEY)
|
.addKeysOnTheRightOfRow(numberOfRows - 2, customizer.getEnterKey(isPhone))
|
||||||
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
||||||
.addKeysOnTheRightOfRow(numberOfRows, EMOJI_NORMAL_KEY);
|
.addKeysOnTheRightOfRow(numberOfRows, customizer.getEmojiKey(isPhone));
|
||||||
}
|
}
|
||||||
builder.addKeysOnTheLeftOfRow(
|
builder.addKeysOnTheLeftOfRow(
|
||||||
numberOfRows - 1, (Object[])customizer.getLeftShiftKeys(isPhone));
|
numberOfRows - 1, (Object[])customizer.getLeftShiftKeys(isPhone));
|
||||||
|
|
|
@ -55,14 +55,14 @@ public final class Myanmar extends LayoutBase {
|
||||||
// U+002C: "," COMMA
|
// U+002C: "," COMMA
|
||||||
// U+104A: "၊" MYANMAR SIGN LITTLE SECTION
|
// U+104A: "၊" MYANMAR SIGN LITTLE SECTION
|
||||||
return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
|
return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
|
||||||
: joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY), "_");
|
: joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||||
// U+104B: "။" MYANMAR SIGN SECTION
|
// U+104B: "။" MYANMAR SIGN SECTION
|
||||||
final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone));
|
final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone));
|
||||||
return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
|
return joinKeys(periodKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -41,18 +41,18 @@ public class Symbols extends AbstractLayoutBase {
|
||||||
customizer.getSingleQuoteMoreKeys(), customizer.getSingleAngleQuoteKeys())));
|
customizer.getSingleQuoteMoreKeys(), customizer.getSingleAngleQuoteKeys())));
|
||||||
if (isPhone) {
|
if (isPhone) {
|
||||||
builder.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
builder.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||||
.addKeysOnTheRightOfRow(3, DELETE_KEY)
|
.addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY)
|
||||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||||
.addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
.addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone));
|
||||||
} else {
|
} else {
|
||||||
// Tablet symbols keyboard has extra two keys at the left edge of the 3rd row.
|
// Tablet symbols keyboard has extra two keys at the left edge of the 3rd row.
|
||||||
builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "="));
|
builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "="));
|
||||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY)
|
||||||
.addKeysOnTheRightOfRow(2, ENTER_KEY)
|
.addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone))
|
||||||
.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||||
.addKeysOnTheRightOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
.addKeysOnTheRightOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||||
.addKeysOnTheRightOfRow(4, EMOJI_NORMAL_KEY);
|
.addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone));
|
||||||
}
|
}
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ public class Symbols extends AbstractLayoutBase {
|
||||||
// U+00BF: "¿" INVERTED QUESTION MARK
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||||
key("?", moreKey("\u00BF")))
|
key("?", moreKey("\u00BF")))
|
||||||
.setKeysOfRow(4,
|
.setKeysOfRow(4,
|
||||||
key(","), key("_"), SPACE_KEY, key("/"),
|
key(","), key("_"), LayoutBase.SPACE_KEY, key("/"),
|
||||||
// U+2026: "…" HORIZONTAL ELLIPSIS
|
// U+2026: "…" HORIZONTAL ELLIPSIS
|
||||||
key(".", moreKey("\u2026")))
|
key(".", moreKey("\u2026")))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -37,20 +37,20 @@ public class SymbolsShifted extends AbstractLayoutBase {
|
||||||
builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys());
|
builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys());
|
||||||
if (isPhone) {
|
if (isPhone) {
|
||||||
builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
||||||
.addKeysOnTheRightOfRow(3, DELETE_KEY)
|
.addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY)
|
||||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||||
.addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
.addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone));
|
||||||
} else {
|
} else {
|
||||||
// Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row.
|
// Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row.
|
||||||
// U+00BF: "¿" INVERTED QUESTION MARK
|
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||||
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||||
builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF"));
|
builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF"));
|
||||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY)
|
||||||
.addKeysOnTheRightOfRow(2, ENTER_KEY)
|
.addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone))
|
||||||
.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
||||||
.addKeysOnTheRightOfRow(3, customizer.getBackToSymbolsKey())
|
.addKeysOnTheRightOfRow(3, customizer.getBackToSymbolsKey())
|
||||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||||
.addKeysOnTheRightOfRow(4, EMOJI_NORMAL_KEY);
|
.addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone));
|
||||||
}
|
}
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ public class SymbolsShifted extends AbstractLayoutBase {
|
||||||
// U+2264: "≤" LESS-THAN OR EQUAL TO
|
// U+2264: "≤" LESS-THAN OR EQUAL TO
|
||||||
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||||
key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")),
|
key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")),
|
||||||
SPACE_KEY,
|
LayoutBase.SPACE_KEY,
|
||||||
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
||||||
// U+2265: "≥" GREATER-THAN EQUAL TO
|
// U+2265: "≥" GREATER-THAN EQUAL TO
|
||||||
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||||
|
|
|
@ -16,9 +16,7 @@
|
||||||
|
|
||||||
package com.android.inputmethod.keyboard.layout.expected;
|
package com.android.inputmethod.keyboard.layout.expected;
|
||||||
|
|
||||||
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
|
|
||||||
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
|
||||||
import com.android.inputmethod.latin.Constants;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class to create an expected keyboard for unit test.
|
* Base class to create an expected keyboard for unit test.
|
||||||
|
@ -104,36 +102,4 @@ public abstract class AbstractLayoutBase {
|
||||||
public static ExpectedKey[] joinKeys(final Object ... keys) {
|
public static ExpectedKey[] joinKeys(final Object ... keys) {
|
||||||
return ExpectedKeyboardBuilder.joinKeys(keys);
|
return ExpectedKeyboardBuilder.joinKeys(keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Icon ids.
|
|
||||||
private static final int ICON_DELETE = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_DELETE_KEY);
|
|
||||||
private static final int ICON_SPACE = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_SPACE_KEY);
|
|
||||||
private static final int ICON_TAB = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_TAB_KEY);
|
|
||||||
private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_SHORTCUT_KEY);
|
|
||||||
private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_SETTINGS_KEY);
|
|
||||||
private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY);
|
|
||||||
private static final int ICON_ENTER = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_ENTER_KEY);
|
|
||||||
private static final int ICON_EMOJI_ACTION = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_EMOJI_ACTION_KEY);
|
|
||||||
private static final int ICON_EMOJI_NORMAL = KeyboardIconsSet.getIconId(
|
|
||||||
KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY);
|
|
||||||
|
|
||||||
// Functional keys.
|
|
||||||
public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE);
|
|
||||||
public static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB);
|
|
||||||
public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT);
|
|
||||||
public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS);
|
|
||||||
public static final ExpectedKey LANGUAGE_SWITCH_KEY = key(
|
|
||||||
ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH);
|
|
||||||
public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER);
|
|
||||||
public static final ExpectedKey EMOJI_ACTION_KEY = key(ICON_EMOJI_ACTION, Constants.CODE_EMOJI);
|
|
||||||
public static final ExpectedKey EMOJI_NORMAL_KEY = key(ICON_EMOJI_NORMAL, Constants.CODE_EMOJI);
|
|
||||||
public static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,6 +148,18 @@ public class ExpectedKey {
|
||||||
return newInstance(mVisual.toUpperCase(locale), mOutput.toUpperCase(locale));
|
return newInstance(mVisual.toUpperCase(locale), mOutput.toUpperCase(locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ExpectedKey preserveCase() {
|
||||||
|
final ExpectedKey[] moreKeys = getMoreKeys();
|
||||||
|
final ExpectedKey[] casePreservedMoreKeys = new ExpectedKey[moreKeys.length];
|
||||||
|
for (int index = 0; index < moreKeys.length; index++) {
|
||||||
|
final ExpectedKey moreKey = moreKeys[index];
|
||||||
|
casePreservedMoreKeys[index] = newInstance(
|
||||||
|
moreKey.getVisual().preserveCase(), moreKey.getOutput().preserveCase());
|
||||||
|
}
|
||||||
|
return newInstance(
|
||||||
|
getVisual().preserveCase(), getOutput().preserveCase(), casePreservedMoreKeys);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean equalsTo(final Key key) {
|
public boolean equalsTo(final Key key) {
|
||||||
// This key has no "more keys".
|
// This key has no "more keys".
|
||||||
return mVisual.equalsTo(key) && mOutput.equalsTo(key) && key.getMoreKeys() == null;
|
return mVisual.equalsTo(key) && mOutput.equalsTo(key) && key.getMoreKeys() == null;
|
||||||
|
|
|
@ -42,6 +42,7 @@ abstract class ExpectedKeyOutput {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract ExpectedKeyOutput toUpperCase(final Locale locale);
|
abstract ExpectedKeyOutput toUpperCase(final Locale locale);
|
||||||
|
abstract ExpectedKeyOutput preserveCase();
|
||||||
abstract boolean equalsTo(final String text);
|
abstract boolean equalsTo(final String text);
|
||||||
abstract boolean equalsTo(final Key key);
|
abstract boolean equalsTo(final Key key);
|
||||||
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
||||||
|
@ -68,6 +69,11 @@ abstract class ExpectedKeyOutput {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput preserveCase() {
|
||||||
|
return new CasePreservedCode(mCode);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean equalsTo(final String text) {
|
boolean equalsTo(final String text) {
|
||||||
return StringUtils.codePointCount(text) == 1 && text.codePointAt(0) == mCode;
|
return StringUtils.codePointCount(text) == 1 && text.codePointAt(0) == mCode;
|
||||||
|
@ -93,6 +99,16 @@ abstract class ExpectedKeyOutput {
|
||||||
return Constants.isLetterCode(mCode) ? StringUtils.newSingleCodePointString(mCode)
|
return Constants.isLetterCode(mCode) ? StringUtils.newSingleCodePointString(mCode)
|
||||||
: Constants.printableCode(mCode);
|
: Constants.printableCode(mCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class CasePreservedCode extends Code {
|
||||||
|
CasePreservedCode(final int code) { super(code); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput toUpperCase(final Locale locale) { return this; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput preserveCase() { return this; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,6 +124,11 @@ abstract class ExpectedKeyOutput {
|
||||||
return newInstance(mText.toUpperCase(locale));
|
return newInstance(mText.toUpperCase(locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput preserveCase() {
|
||||||
|
return new CasePreservedText(mText);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean equalsTo(final String text) {
|
boolean equalsTo(final String text) {
|
||||||
return text.equals(text);
|
return text.equals(text);
|
||||||
|
@ -134,5 +155,15 @@ abstract class ExpectedKeyOutput {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return mText;
|
return mText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class CasePreservedText extends Text {
|
||||||
|
CasePreservedText(final String text) { super(text); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput toUpperCase(final Locale locale) { return this; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyOutput preserveCase() { return this; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ abstract class ExpectedKeyVisual {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract ExpectedKeyVisual toUpperCase(final Locale locale);
|
abstract ExpectedKeyVisual toUpperCase(final Locale locale);
|
||||||
|
abstract ExpectedKeyVisual preserveCase();
|
||||||
abstract boolean equalsTo(final String text);
|
abstract boolean equalsTo(final String text);
|
||||||
abstract boolean equalsTo(final Key key);
|
abstract boolean equalsTo(final Key key);
|
||||||
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
||||||
|
@ -58,6 +59,11 @@ abstract class ExpectedKeyVisual {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyVisual preserveCase() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean equalsTo(final String text) {
|
boolean equalsTo(final String text) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -102,6 +108,11 @@ abstract class ExpectedKeyVisual {
|
||||||
return new Label(mLabel.toUpperCase(locale));
|
return new Label(mLabel.toUpperCase(locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyVisual preserveCase() {
|
||||||
|
return new CasePreservedLabel(mLabel);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean equalsTo(final String text) {
|
boolean equalsTo(final String text) {
|
||||||
return mLabel.equals(text);
|
return mLabel.equals(text);
|
||||||
|
@ -131,5 +142,15 @@ abstract class ExpectedKeyVisual {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return mLabel;
|
return mLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class CasePreservedLabel extends Label {
|
||||||
|
CasePreservedLabel(final String label) { super(label); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyVisual toUpperCase(final Locale locale) { return this; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ExpectedKeyVisual preserveCase() { return this; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.keyboard.layout.tests;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardId;
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
||||||
|
import com.android.inputmethod.keyboard.layout.Dvorak;
|
||||||
|
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
|
import com.android.inputmethod.keyboard.layout.tests.TestsEnglishDvorak.EnglishDvorakCustomizer;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* en_US: English (United States)/dvorak, email input field.
|
||||||
|
*/
|
||||||
|
@SmallTest
|
||||||
|
public class TestsDvorakEmail extends LayoutTestsBase {
|
||||||
|
private static final Locale LOCALE = new Locale("en", "US");
|
||||||
|
private static final LayoutBase LAYOUT = new DvorakEmail(new DvorakEmailCustomizer(LOCALE));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
|
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||||
|
final boolean languageSwitchKeyEnabled) {
|
||||||
|
final EditorInfo emailField = new EditorInfo();
|
||||||
|
emailField.inputType =
|
||||||
|
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
|
||||||
|
return super.createKeyboardLayoutSet(
|
||||||
|
subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DvorakEmailCustomizer extends EnglishDvorakCustomizer {
|
||||||
|
DvorakEmailCustomizer(final Locale locale) {
|
||||||
|
super(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEnterKey(final boolean isPhone) {
|
||||||
|
return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEmojiKey(final boolean isPhone) {
|
||||||
|
return LayoutBase.DOMAIN_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
|
return isPhone ? super.getKeysLeftToSpacebar(isPhone)
|
||||||
|
: joinKeys(key("@", LayoutBase.SETTINGS_KEY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DvorakEmail extends Dvorak {
|
||||||
|
public DvorakEmail(final LayoutCustomizer customizer) {
|
||||||
|
super(customizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) {
|
||||||
|
if (isPhone && (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)) {
|
||||||
|
return key("@", joinMoreKeys(additionalMoreKey("1")));
|
||||||
|
}
|
||||||
|
return super.getRow1_1Key(isPhone, elementId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.keyboard.layout.tests;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardId;
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
||||||
|
import com.android.inputmethod.keyboard.layout.Dvorak;
|
||||||
|
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
|
import com.android.inputmethod.keyboard.layout.tests.TestsEnglishDvorak.EnglishDvorakCustomizer;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* en_US: English (United States)/dvorak, URL input field.
|
||||||
|
*/
|
||||||
|
@SmallTest
|
||||||
|
public class TestsDvorakUrl extends LayoutTestsBase {
|
||||||
|
private static final Locale LOCALE = new Locale("en", "US");
|
||||||
|
private static final LayoutBase LAYOUT = new DvorakEmail(new DvorakUrlCustomizer(LOCALE));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
|
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||||
|
final boolean languageSwitchKeyEnabled) {
|
||||||
|
final EditorInfo emailField = new EditorInfo();
|
||||||
|
emailField.inputType =
|
||||||
|
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI;
|
||||||
|
return super.createKeyboardLayoutSet(
|
||||||
|
subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DvorakUrlCustomizer extends EnglishDvorakCustomizer {
|
||||||
|
DvorakUrlCustomizer(final Locale locale) {
|
||||||
|
super(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEnterKey(final boolean isPhone) {
|
||||||
|
return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEmojiKey(final boolean isPhone) {
|
||||||
|
return LayoutBase.DOMAIN_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
|
return isPhone ? super.getKeysLeftToSpacebar(isPhone)
|
||||||
|
: joinKeys(key("/", LayoutBase.SETTINGS_KEY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DvorakEmail extends Dvorak {
|
||||||
|
public DvorakEmail(final LayoutCustomizer customizer) {
|
||||||
|
super(customizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) {
|
||||||
|
if (isPhone && (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||||
|
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)) {
|
||||||
|
return key("/", joinMoreKeys(additionalMoreKey("1")));
|
||||||
|
}
|
||||||
|
return super.getRow1_1Key(isPhone, elementId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,7 +36,7 @@ public class TestsEnglishDvorak extends LayoutTestsBase {
|
||||||
@Override
|
@Override
|
||||||
LayoutBase getLayout() { return LAYOUT; }
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
private static class EnglishDvorakCustomizer extends DvorakCustomizer {
|
public static class EnglishDvorakCustomizer extends DvorakCustomizer {
|
||||||
private final EnglishCustomizer mEnglishCustomizer;
|
private final EnglishCustomizer mEnglishCustomizer;
|
||||||
|
|
||||||
EnglishDvorakCustomizer(final Locale locale) {
|
EnglishDvorakCustomizer(final Locale locale) {
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.keyboard.layout.tests;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
||||||
|
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||||
|
import com.android.inputmethod.keyboard.layout.Qwerty;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* en_US: English (United States)/qwerty, email input field.
|
||||||
|
*/
|
||||||
|
@SmallTest
|
||||||
|
public class TestsQwertyEmail extends LayoutTestsBase {
|
||||||
|
private static final Locale LOCALE = new Locale("en", "US");
|
||||||
|
private static final LayoutBase LAYOUT = new Qwerty(new EnglishEmailCustomizer(LOCALE));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
|
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||||
|
final boolean languageSwitchKeyEnabled) {
|
||||||
|
final EditorInfo emailField = new EditorInfo();
|
||||||
|
emailField.inputType =
|
||||||
|
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
|
||||||
|
return super.createKeyboardLayoutSet(
|
||||||
|
subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EnglishEmailCustomizer extends EnglishCustomizer {
|
||||||
|
EnglishEmailCustomizer(final Locale locale) {
|
||||||
|
super(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEnterKey(final boolean isPhone) {
|
||||||
|
return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEmojiKey(final boolean isPhone) {
|
||||||
|
return LayoutBase.DOMAIN_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
|
return joinKeys(key("@", LayoutBase.SETTINGS_KEY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.inputmethod.keyboard.layout.tests;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
|
||||||
|
import com.android.inputmethod.keyboard.layout.LayoutBase;
|
||||||
|
import com.android.inputmethod.keyboard.layout.Qwerty;
|
||||||
|
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* en_US: English (United States)/qwerty, URL input field.
|
||||||
|
*/
|
||||||
|
@SmallTest
|
||||||
|
public class TestsQwertyUrl extends LayoutTestsBase {
|
||||||
|
private static final Locale LOCALE = new Locale("en", "US");
|
||||||
|
private static final LayoutBase LAYOUT = new Qwerty(new EnglishUrlCustomizer(LOCALE));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
LayoutBase getLayout() { return LAYOUT; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||||
|
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||||
|
final boolean languageSwitchKeyEnabled) {
|
||||||
|
final EditorInfo emailField = new EditorInfo();
|
||||||
|
emailField.inputType =
|
||||||
|
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI;
|
||||||
|
return super.createKeyboardLayoutSet(
|
||||||
|
subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EnglishUrlCustomizer extends EnglishCustomizer {
|
||||||
|
EnglishUrlCustomizer(final Locale locale) {
|
||||||
|
super(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEnterKey(final boolean isPhone) {
|
||||||
|
return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey getEmojiKey(final boolean isPhone) {
|
||||||
|
return LayoutBase.DOMAIN_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||||
|
return joinKeys(key("/", LayoutBase.SETTINGS_KEY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue