Fix the bottom row of tablet keyboard layout
This CL eliminates "_" and "/" keys from the bottom row of tablet keyboard. This CL also reorganizes the bottom row of tablet Dvorak keyboard. Bug: 16603887 Change-Id: Ic1570836dea1a475bed5d43aeb6a351507bf5428main
parent
2637be27c5
commit
c9aa1beb6d
|
@ -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");
|
||||
** you may not use this file except in compliance with the License.
|
||||
|
@ -21,27 +21,36 @@
|
|||
<merge
|
||||
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>
|
||||
<case
|
||||
latin:clobberSettingsKey="true"
|
||||
latin:mode="url"
|
||||
>
|
||||
<Key
|
||||
latin:moreKeys="!text/morekeys_tablet_comma"
|
||||
latin:keyStyle="baseTabletCommaKeyStyle" />
|
||||
latin:keySpec="/"
|
||||
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>
|
||||
<!-- clobberSettingsKey="false" -->
|
||||
<default>
|
||||
<Key
|
||||
latin:moreKeys="!text/morekeys_tablet_comma,!text/keyspec_settings"
|
||||
latin:keyStyle="baseTabletCommaKeyStyle" />
|
||||
latin:keySpec="!text/keyspec_tablet_comma"
|
||||
latin:moreKeys="!text/morekeys_tablet_comma,%"
|
||||
latin:keyHintLabel="!text/keyhintlabel_tablet_comma"
|
||||
latin:keyLabelFlags="hasPopupHint"
|
||||
latin:keyStyle="settingsMoreKeysStyle" />
|
||||
</default>
|
||||
</switch>
|
||||
</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:backgroundType="functional" />
|
||||
</case>
|
||||
<case
|
||||
latin:keyboardLayoutSet="dvorak"
|
||||
>
|
||||
<Key
|
||||
latin:keySpec="\?"
|
||||
latin:moreKeys="!text/morekeys_tablet_period,!text/morekeys_question" />
|
||||
</case>
|
||||
<default>
|
||||
<Key
|
||||
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" />
|
||||
<Key
|
||||
latin:keyStyle="spaceKeyStyle"
|
||||
latin:keyWidth="27.0%p" />
|
||||
latin:keyWidth="45.0%p" />
|
||||
<Key
|
||||
latin:keyStyle="zwnjKeyStyle" />
|
||||
</case>
|
||||
|
@ -44,7 +44,7 @@
|
|||
>
|
||||
<Key
|
||||
latin:keyStyle="spaceKeyStyle"
|
||||
latin:keyWidth="36.0%p" />
|
||||
latin:keyWidth="54.0%p" />
|
||||
<Key
|
||||
latin:keyStyle="zwnjKeyStyle" />
|
||||
</case>
|
||||
|
@ -55,13 +55,13 @@
|
|||
latin:keyStyle="languageSwitchKeyStyle" />
|
||||
<Key
|
||||
latin:keyStyle="spaceKeyStyle"
|
||||
latin:keyWidth="36.0%p" />
|
||||
latin:keyWidth="54.0%p" />
|
||||
</case>
|
||||
<!-- languageSwitchKeyEnabled="false" -->
|
||||
<default>
|
||||
<Key
|
||||
latin:keyStyle="spaceKeyStyle"
|
||||
latin:keyWidth="45.0%p" />
|
||||
latin:keyWidth="63.0%p" />
|
||||
</default>
|
||||
</switch>
|
||||
</merge>
|
|
@ -36,6 +36,9 @@
|
|||
</default>
|
||||
</switch>
|
||||
<!-- Base key style for the key which may have settings key as more keys. -->
|
||||
<key-style
|
||||
latin:styleName="baseSettingsMoreKeysStyle"
|
||||
latin:parentStyle="hasShiftedLetterHintStyle" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_styles_settings" />
|
||||
<!-- 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:keyWidth="9.0%p"
|
||||
latin:backgroundType="functional"
|
||||
latin:keyboardLayout="@xml/key_f2" />
|
||||
latin:keyboardLayout="@xml/key_emoji" />
|
||||
</Row>
|
||||
</merge>
|
||||
|
|
|
@ -30,18 +30,14 @@
|
|||
latin:keyWidth="10.0%p" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_comma" />
|
||||
<Key
|
||||
latin:keySpec="_" />
|
||||
<!-- Space key. -->
|
||||
<include
|
||||
latin:keyXPos="28.0%p"
|
||||
latin:keyboardLayout="@xml/key_space_5kw"
|
||||
latin:keyXPos="19.0%p"
|
||||
latin:keyboardLayout="@xml/key_space_7kw"
|
||||
latin:backgroundType="normal" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_f1" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_period" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_f2" />
|
||||
latin:keyboardLayout="@xml/key_emoji" />
|
||||
</Row>
|
||||
</merge>
|
||||
|
|
|
@ -53,6 +53,8 @@
|
|||
latin:keyStyle="shiftKeyStyle"
|
||||
latin:keyWidth="fillRight" />
|
||||
</Row>
|
||||
<!-- Dvorak layout shares almost the same row with Qwerty layout.
|
||||
The difference is defined in xml-sw600dp/row_qwerty4.xml. -->
|
||||
<include
|
||||
latin:keyboardLayout="@xml/row_dvorak4" />
|
||||
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||
</merge>
|
||||
|
|
|
@ -70,6 +70,6 @@
|
|||
<include
|
||||
latin:keyboardLayout="@xml/row_symbols4" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_f2" />
|
||||
latin:keyboardLayout="@xml/key_emoji" />
|
||||
</Row>
|
||||
</merge>
|
||||
|
|
|
@ -72,6 +72,6 @@
|
|||
<include
|
||||
latin:keyboardLayout="@xml/row_symbols_shift4" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_f2" />
|
||||
latin:keyboardLayout="@xml/key_emoji" />
|
||||
</Row>
|
||||
</merge>
|
||||
|
|
|
@ -22,6 +22,15 @@
|
|||
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
||||
>
|
||||
<switch>
|
||||
<case
|
||||
latin:keyboardLayoutSet="dvorak"
|
||||
>
|
||||
<Key
|
||||
latin:keySpec="q"
|
||||
latin:moreKeys="!text/morekeys_q,%"
|
||||
latin:backgroundType="normal"
|
||||
latin:keyStyle="settingsMoreKeysStyle" />
|
||||
</case>
|
||||
<case
|
||||
latin:mode="url"
|
||||
>
|
|
@ -48,6 +48,14 @@
|
|||
latin:moreKeys="!text/morekeys_punctuation"
|
||||
latin:backgroundType="functional" />
|
||||
</case>
|
||||
<case
|
||||
latin:keyboardLayoutSet="dvorak"
|
||||
>
|
||||
<Key
|
||||
latin:keySpec="z"
|
||||
latin:keyLabelFlags="hasPopupHint"
|
||||
latin:moreKeys="!text/morekeys_punctuation,!text/morekeys_z" />
|
||||
</case>
|
||||
<default>
|
||||
<Key
|
||||
latin:keySpec="!text/keyspec_period"
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
</default>
|
||||
</switch>
|
||||
<!-- Base key style for the key which may have settings key as more keys. -->
|
||||
<key-style
|
||||
latin:styleName="baseSettingsMoreKeysStyle" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_styles_settings" />
|
||||
<!-- Functional key styles -->
|
||||
|
|
|
@ -29,15 +29,17 @@
|
|||
>
|
||||
<key-style
|
||||
latin:styleName="settingsMoreKeysStyle"
|
||||
latin:backgroundType="functional" />
|
||||
latin:backgroundType="functional"
|
||||
latin:parentStyle="baseSettingsMoreKeysStyle" />
|
||||
</case>
|
||||
<!-- clobberSettingsKey="false" -->
|
||||
<default>
|
||||
<key-style
|
||||
latin:styleName="settingsMoreKeysStyle"
|
||||
latin:keyLabelFlags="hasPopupHint"
|
||||
latin:moreKeys="!text/keyspec_settings"
|
||||
latin:backgroundType="functional" />
|
||||
latin:additionalMoreKeys="!text/keyspec_settings"
|
||||
latin:backgroundType="functional"
|
||||
latin:parentStyle="baseSettingsMoreKeysStyle" />
|
||||
</default>
|
||||
</switch>
|
||||
</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:keyWidth="15%p" />
|
||||
<include
|
||||
latin:keyboardLayout="@xml/key_f1" />
|
||||
latin:keyboardLayout="@xml/key_comma" />
|
||||
<include
|
||||
latin:keyXPos="25%p"
|
||||
latin:keyboardLayout="@xml/key_space_5kw" />
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
latin:keyWidth="fillRight"
|
||||
latin:visualInsetsLeft="1%p" />
|
||||
</Row>
|
||||
<!-- Dvorak layout shares almost the same row with Qwerty layout.
|
||||
The difference is defined in xml/row_qwerty4.xml. -->
|
||||
<include
|
||||
latin:keyboardLayout="@xml/row_dvorak4" />
|
||||
latin:keyboardLayout="@xml/row_qwerty4" />
|
||||
</merge>
|
||||
|
|
|
@ -112,13 +112,13 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
|
|||
"Unknown subtype: locale=" + locale + " keyboardLayout=" + keyboardLayout);
|
||||
}
|
||||
|
||||
protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||
final EditorInfo editorInfo) {
|
||||
return createKeyboardLayoutSet(subtype, editorInfo, false /* voiceInputKeyEnabled */,
|
||||
false /* languageSwitchKeyEnabled */);
|
||||
}
|
||||
|
||||
protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||
protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
|
||||
final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
|
||||
final boolean languageSwitchKeyEnabled) {
|
||||
final Context context = mThemeContext;
|
||||
|
|
|
@ -78,8 +78,7 @@ public final class Arabic extends LayoutBase {
|
|||
// U+061F: "؟" ARABIC QUESTION MARK
|
||||
// U+061B: "؛" ARABIC SEMICOLON
|
||||
return joinKeys(key("\u060C", joinMoreKeys(
|
||||
":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY)),
|
||||
"_");
|
||||
":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -90,7 +89,7 @@ public final class Arabic extends LayoutBase {
|
|||
// U+060C: "،" ARABIC COMMA
|
||||
// U+061F: "؟" ARABIC QUESTION MARK
|
||||
// U+061B: "؛" ARABIC SEMICOLON
|
||||
return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone)));
|
||||
return joinKeys(key(".", getPunctuationMoreKeys(isPhone)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,14 +62,14 @@ public final class ArmenianPhonetic extends LayoutBase {
|
|||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||
// U+055D: "՝" ARMENIAN COMMA
|
||||
return isPhone ? joinKeys(key("\u055D", SETTINGS_KEY))
|
||||
: joinKeys(key("\u055D", SETTINGS_KEY), "_");
|
||||
: joinKeys(key("\u055D", SETTINGS_KEY));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||
// U+0589: "։" ARMENIAN FULL STOP
|
||||
final ExpectedKey fullStopKey = key("\u0589", getPunctuationMoreKeys(isPhone));
|
||||
return isPhone ? joinKeys(fullStopKey) : joinKeys("/", fullStopKey);
|
||||
return joinKeys(fullStopKey);
|
||||
}
|
||||
|
||||
@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.ExpectedKeyboardBuilder;
|
||||
import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
|
||||
import com.android.inputmethod.latin.settings.CustomInputStyleSettingsFragment;
|
||||
|
||||
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";
|
||||
|
||||
public Dvorak(final LayoutCustomizer customizer) {
|
||||
|
@ -51,17 +52,19 @@ public final class Dvorak extends LayoutBase {
|
|||
|
||||
@Override
|
||||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||
return isPhone ? joinKeys(key("q", SETTINGS_KEY)) :
|
||||
joinKeys(SETTINGS_KEY, key("_", moreKey("-")));
|
||||
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||
return isPhone ? joinKeys(key("q", SETTINGS_KEY))
|
||||
: joinKeys(key("!", joinMoreKeys("\u00A1", SETTINGS_KEY)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||
final ExpectedAdditionalMoreKey[] punctuationMoreKeys =
|
||||
convertToAdditionalMoreKeys(getPunctuationMoreKeys(isPhone));
|
||||
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||
return isPhone
|
||||
? joinKeys(key("z", punctuationMoreKeys))
|
||||
: joinKeys("/", key("?", moreKey("!")));
|
||||
: joinKeys(key("?", joinMoreKeys(punctuationMoreKeys, "\u00BF")));
|
||||
}
|
||||
|
||||
private static ExpectedAdditionalMoreKey[] convertToAdditionalMoreKeys(
|
||||
|
@ -76,7 +79,33 @@ public final class Dvorak extends LayoutBase {
|
|||
}
|
||||
|
||||
@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
|
||||
public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) {
|
||||
|
@ -86,18 +115,9 @@ public final class Dvorak extends LayoutBase {
|
|||
}
|
||||
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
|
||||
getCommonAlphabetLayout(isPhone));
|
||||
if (elementId == KeyboardId.ELEMENT_ALPHABET
|
||||
|| elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
|
||||
builder.addKeysOnTheLeftOfRow(1,
|
||||
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")));
|
||||
}
|
||||
builder.replaceKeyOfLabel(ROW1_1, getRow1_1Key(isPhone, elementId))
|
||||
.replaceKeyOfLabel(ROW1_2, getRow1_2Key(isPhone, elementId))
|
||||
.replaceKeyOfLabel(ROW1_3, getRow1_3Key(isPhone, elementId));
|
||||
convertCommonLayoutToKeyboard(builder, isPhone);
|
||||
getCustomizer().setAccentedLetters(builder);
|
||||
if (elementId != KeyboardId.ELEMENT_ALPHABET) {
|
||||
|
@ -107,8 +127,13 @@ public final class Dvorak extends LayoutBase {
|
|||
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()
|
||||
.setKeysOfRow(1,
|
||||
ROW1_1, ROW1_2, ROW1_3,
|
||||
key("p", additionalMoreKey("4")),
|
||||
key("y", additionalMoreKey("5")),
|
||||
key("f", additionalMoreKey("6")),
|
||||
|
|
|
@ -77,8 +77,7 @@ public final class Farsi extends LayoutBase {
|
|||
// U+061B: "؛" ARABIC SEMICOLON
|
||||
return joinKeys(key("\u060C", joinMoreKeys(
|
||||
":", "!", "\u061F", "\u061B", "-", RtlSymbols.DOUBLE_ANGLE_QUOTES_LR_RTL,
|
||||
SETTINGS_KEY)),
|
||||
"_");
|
||||
SETTINGS_KEY)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -86,7 +85,7 @@ public final class Farsi extends LayoutBase {
|
|||
if (isPhone) {
|
||||
return super.getKeysRightToSpacebar(isPhone);
|
||||
}
|
||||
return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone)));
|
||||
return joinKeys(key(".", getPunctuationMoreKeys(isPhone)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -50,7 +50,7 @@ public final class HindiCompact extends LayoutBase {
|
|||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||
// U+0964: "।" DEVANAGARI DANDA
|
||||
final ExpectedKey periodKey = key("\u0964", getPunctuationMoreKeys(isPhone));
|
||||
return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
|
||||
return joinKeys(periodKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -148,6 +148,24 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
|||
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.
|
||||
* @param isPhone true if requesting phone's keys.
|
||||
|
@ -165,8 +183,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
|||
*/
|
||||
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
|
||||
// U+002C: "," COMMA
|
||||
return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
|
||||
: joinKeys(key("\u002C", SETTINGS_KEY), "_");
|
||||
return joinKeys(key("\u002C", SETTINGS_KEY));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -176,7 +193,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
|||
*/
|
||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean 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; }
|
||||
|
||||
// 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(
|
||||
KeyboardIconsSet.NAME_SHIFT_KEY);
|
||||
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(
|
||||
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 SHIFT_KEY = key(ICON_SHIFT,
|
||||
public static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT,
|
||||
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);
|
||||
static final ExpectedKey ALPHABET_KEY = key("ABC", 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
|
||||
static final ExpectedKey ZWNJ_KEY = key(ICON_ZWNJ, "\u200C");
|
||||
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.
|
||||
public static final ExpectedKey[] PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
|
||||
|
@ -300,12 +348,12 @@ public abstract class LayoutBase extends AbstractLayoutBase {
|
|||
if (isPhone) {
|
||||
builder.addKeysOnTheRightOfRow(numberOfRows - 1, DELETE_KEY)
|
||||
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
||||
.addKeysOnTheRightOfRow(numberOfRows, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
||||
.addKeysOnTheRightOfRow(numberOfRows, customizer.getEnterKey(isPhone));
|
||||
} else {
|
||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(numberOfRows - 2, ENTER_KEY)
|
||||
.addKeysOnTheRightOfRow(numberOfRows - 2, customizer.getEnterKey(isPhone))
|
||||
.addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey())
|
||||
.addKeysOnTheRightOfRow(numberOfRows, EMOJI_NORMAL_KEY);
|
||||
.addKeysOnTheRightOfRow(numberOfRows, customizer.getEmojiKey(isPhone));
|
||||
}
|
||||
builder.addKeysOnTheLeftOfRow(
|
||||
numberOfRows - 1, (Object[])customizer.getLeftShiftKeys(isPhone));
|
||||
|
|
|
@ -55,14 +55,14 @@ public final class Myanmar extends LayoutBase {
|
|||
// U+002C: "," COMMA
|
||||
// U+104A: "၊" MYANMAR SIGN LITTLE SECTION
|
||||
return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
|
||||
: joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY), "_");
|
||||
: joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
|
||||
// U+104B: "။" MYANMAR SIGN SECTION
|
||||
final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone));
|
||||
return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey);
|
||||
return joinKeys(periodKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -41,18 +41,18 @@ public class Symbols extends AbstractLayoutBase {
|
|||
customizer.getSingleQuoteMoreKeys(), customizer.getSingleAngleQuoteKeys())));
|
||||
if (isPhone) {
|
||||
builder.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||
.addKeysOnTheRightOfRow(3, DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY)
|
||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||
.addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
||||
.addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone));
|
||||
} else {
|
||||
// Tablet symbols keyboard has extra two keys at the left edge of the 3rd row.
|
||||
builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "="));
|
||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(2, ENTER_KEY)
|
||||
builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone))
|
||||
.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||
.addKeysOnTheRightOfRow(3, customizer.getSymbolsShiftKey(isPhone))
|
||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||
.addKeysOnTheRightOfRow(4, EMOJI_NORMAL_KEY);
|
||||
.addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone));
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
@ -167,7 +167,7 @@ public class Symbols extends AbstractLayoutBase {
|
|||
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||
key("?", moreKey("\u00BF")))
|
||||
.setKeysOfRow(4,
|
||||
key(","), key("_"), SPACE_KEY, key("/"),
|
||||
key(","), key("_"), LayoutBase.SPACE_KEY, key("/"),
|
||||
// U+2026: "…" HORIZONTAL ELLIPSIS
|
||||
key(".", moreKey("\u2026")))
|
||||
.build();
|
||||
|
|
|
@ -37,20 +37,20 @@ public class SymbolsShifted extends AbstractLayoutBase {
|
|||
builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys());
|
||||
if (isPhone) {
|
||||
builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
||||
.addKeysOnTheRightOfRow(3, DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY)
|
||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||
.addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_ACTION_KEY));
|
||||
.addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone));
|
||||
} else {
|
||||
// Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row.
|
||||
// U+00BF: "¿" INVERTED QUESTION MARK
|
||||
// U+00A1: "¡" INVERTED EXCLAMATION MARK
|
||||
builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF"));
|
||||
builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(2, ENTER_KEY)
|
||||
builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY)
|
||||
.addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone))
|
||||
.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
|
||||
.addKeysOnTheRightOfRow(3, customizer.getBackToSymbolsKey())
|
||||
.addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey())
|
||||
.addKeysOnTheRightOfRow(4, EMOJI_NORMAL_KEY);
|
||||
.addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone));
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ public class SymbolsShifted extends AbstractLayoutBase {
|
|||
// U+2264: "≤" LESS-THAN OR EQUAL TO
|
||||
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")),
|
||||
SPACE_KEY,
|
||||
LayoutBase.SPACE_KEY,
|
||||
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
||||
// U+2265: "≥" GREATER-THAN EQUAL TO
|
||||
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
|
||||
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.latin.Constants;
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
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));
|
||||
}
|
||||
|
||||
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) {
|
||||
// This key has no "more keys".
|
||||
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 preserveCase();
|
||||
abstract boolean equalsTo(final String text);
|
||||
abstract boolean equalsTo(final Key key);
|
||||
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
||||
|
@ -68,6 +69,11 @@ abstract class ExpectedKeyOutput {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
ExpectedKeyOutput preserveCase() {
|
||||
return new CasePreservedCode(mCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean equalsTo(final String text) {
|
||||
return StringUtils.codePointCount(text) == 1 && text.codePointAt(0) == mCode;
|
||||
|
@ -93,6 +99,16 @@ abstract class ExpectedKeyOutput {
|
|||
return Constants.isLetterCode(mCode) ? StringUtils.newSingleCodePointString(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));
|
||||
}
|
||||
|
||||
@Override
|
||||
ExpectedKeyOutput preserveCase() {
|
||||
return new CasePreservedText(mText);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean equalsTo(final String text) {
|
||||
return text.equals(text);
|
||||
|
@ -134,5 +155,15 @@ abstract class ExpectedKeyOutput {
|
|||
public String toString() {
|
||||
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 preserveCase();
|
||||
abstract boolean equalsTo(final String text);
|
||||
abstract boolean equalsTo(final Key key);
|
||||
abstract boolean equalsTo(final MoreKeySpec moreKeySpec);
|
||||
|
@ -58,6 +59,11 @@ abstract class ExpectedKeyVisual {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
ExpectedKeyVisual preserveCase() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean equalsTo(final String text) {
|
||||
return false;
|
||||
|
@ -102,6 +108,11 @@ abstract class ExpectedKeyVisual {
|
|||
return new Label(mLabel.toUpperCase(locale));
|
||||
}
|
||||
|
||||
@Override
|
||||
ExpectedKeyVisual preserveCase() {
|
||||
return new CasePreservedLabel(mLabel);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean equalsTo(final String text) {
|
||||
return mLabel.equals(text);
|
||||
|
@ -131,5 +142,15 @@ abstract class ExpectedKeyVisual {
|
|||
public String toString() {
|
||||
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
|
||||
LayoutBase getLayout() { return LAYOUT; }
|
||||
|
||||
private static class EnglishDvorakCustomizer extends DvorakCustomizer {
|
||||
public static class EnglishDvorakCustomizer extends DvorakCustomizer {
|
||||
private final EnglishCustomizer mEnglishCustomizer;
|
||||
|
||||
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