Add toggle for number row

This commit is contained in:
Aleksandras Kostarevas 2024-05-07 11:17:13 -05:00
parent bed5f68b11
commit 918f0dbd2d
12 changed files with 165 additions and 3 deletions

View File

@ -522,6 +522,7 @@
<attr name="countryCode" format="string" />
<!-- Enable split keyboard layout. Disabled by default. -->
<attr name="isSplitLayout" format="boolean" />
<attr name="numberRow" format="boolean" />
</declare-styleable>
<declare-styleable name="Keyboard_KeyStyle">

View File

@ -23,6 +23,19 @@
>
<include
latin:keyboardLayout="@xml/key_styles_common" />
<switch>
<case latin:numberRow="true">
<Row
latin:keyWidth="10%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_numbers" />
</Row>
</case>
<default>
</default>
</switch>
<!-- First row -->
<Row>
<switch>

View File

@ -23,6 +23,19 @@
>
<include
latin:keyboardLayout="@xml/key_styles_common" />
<switch>
<case latin:numberRow="true">
<Row
latin:keyWidth="10%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_numbers" />
</Row>
</case>
<default>
</default>
</switch>
<!-- TODO: Consolidate the layout specification between protrait and landscape.
Ideally just the keyWidth should be different and the spacer should adjust to fill
the available space. -->

View File

@ -0,0 +1,97 @@
<?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-auto"
>
<switch>
<case
latin:keyboardLayoutSetElement="alphabet|alphabetAutomaticShifted|alphabetShiftLocked"
>
<Key
latin:keySpec="1"
latin:additionalMoreKeys="!,!text/morekeys_exclamation"
latin:moreKeys="!text/morekeys_symbols_1" />
<Key
latin:keySpec="2"
latin:additionalMoreKeys="\@"
latin:moreKeys="!text/morekeys_symbols_2" />
<Key
latin:keySpec="3"
latin:additionalMoreKeys="\#"
latin:moreKeys="!text/morekeys_symbols_3" />
<Key
latin:keySpec="4"
latin:additionalMoreKeys="$"
latin:moreKeys="!text/morekeys_symbols_4" />
<Key
latin:keySpec="5"
latin:additionalMoreKeys="\\%"
latin:moreKeys="!text/morekeys_symbols_5" />
<Key
latin:keySpec="6"
latin:additionalMoreKeys="^"
latin:moreKeys="!text/morekeys_symbols_6" />
<Key
latin:keySpec="7"
latin:additionalMoreKeys="&amp;"
latin:moreKeys="!text/morekeys_symbols_7" />
<Key
latin:keySpec="8"
latin:additionalMoreKeys="*"
latin:moreKeys="!text/morekeys_symbols_8" />
<Key
latin:keySpec="9"
latin:additionalMoreKeys="("
latin:moreKeys="!text/morekeys_symbols_9" />
<Key
latin:keySpec="0"
latin:additionalMoreKeys=")"
latin:moreKeys="!text/morekeys_symbols_0" />
</case>
<!-- keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted" -->
<default>
<Key
latin:keySpec="!"
latin:additionalMoreKeys="!text/morekeys_exclamation" />
<Key
latin:keySpec="\@" />
<Key
latin:keySpec="\#" />
<Key
latin:keySpec="$"
latin:additionalMoreKeys="!text/morekeys_currency_dollar" />
<Key
latin:keySpec="%"
latin:additionalMoreKeys="!text/morekeys_symbols_percent" />
<Key
latin:keySpec="^" />
<Key
latin:keySpec="&amp;" />
<Key
latin:keySpec="*"
latin:additionalMoreKeys="!text/morekeys_star" />
<Key
latin:keySpec="(" />
<Key
latin:keySpec=")" />
</default>
</switch>
</merge>

View File

@ -23,6 +23,19 @@
>
<include
latin:keyboardLayout="@xml/key_styles_common" />
<switch>
<case latin:numberRow="true">
<Row
latin:keyWidth="10%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_numbers" />
</Row>
</case>
<default>
</default>
</switch>
<Row
latin:keyWidth="10%p"
>

View File

@ -82,6 +82,7 @@ public final class KeyboardId {
public final String mCustomActionLabel;
public final boolean mHasShortcutKey;
public final boolean mIsSplitLayout;
public final boolean mNumberRow;
private final int mHashCode;
@ -98,6 +99,7 @@ public final class KeyboardId {
? mEditorInfo.actionLabel.toString() : null;
mHasShortcutKey = params.mVoiceInputKeyEnabled;
mIsSplitLayout = params.mIsSplitLayoutEnabled;
mNumberRow = params.mNumberRow;
mHashCode = computeHashCode(this);
}
@ -118,7 +120,8 @@ public final class KeyboardId {
id.navigateNext(),
id.navigatePrevious(),
id.mSubtype,
id.mIsSplitLayout
id.mIsSplitLayout,
id.mNumberRow
});
}
@ -139,7 +142,8 @@ public final class KeyboardId {
&& other.navigateNext() == navigateNext()
&& other.navigatePrevious() == navigatePrevious()
&& other.mSubtype.equals(mSubtype)
&& other.mIsSplitLayout == mIsSplitLayout;
&& other.mIsSplitLayout == mIsSplitLayout
&& other.mNumberRow == mNumberRow;
}
private static boolean isAlphabetKeyboard(final int elementId) {

View File

@ -133,6 +133,8 @@ public final class KeyboardLayoutSet {
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
new SparseArray<>();
boolean mNumberRow;
}
public static void onSystemLocaleChanged() {
@ -337,6 +339,11 @@ public final class KeyboardLayoutSet {
return this;
}
public Builder setNumberRow(final boolean enabled) {
mParams.mNumberRow = enabled;
return this;
}
// Super redux version of reading the script ID for some subtype from Xml.
static int readScriptId(final Resources resources, final InputMethodSubtype subtype) {
final String layoutSetName = KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX

View File

@ -130,6 +130,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
builder.setBottomEmojiKeyEnabled(mLatinIMELegacy.shouldShowEmojiKey());
builder.setSplitLayoutEnabledByUser(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED
&& settingsValues.mIsSplitKeyboardEnabled);
builder.setNumberRow(settingsValues.mIsNumberRowEnabled);
mKeyboardLayoutSet = builder.build();
try {
mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState);

View File

@ -696,13 +696,15 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
final boolean countryCodeMatched = matchCountryCodes(caseAttr, locale);
final boolean splitLayoutMatched = matchBoolean(caseAttr,
R.styleable.Keyboard_Case_isSplitLayout, id.mIsSplitLayout);
final boolean numberRowMatched = matchBoolean(caseAttr,
R.styleable.Keyboard_Case_numberRow, id.mNumberRow);
final boolean selected = keyboardLayoutSetMatched && keyboardLayoutSetElementMatched
&& keyboardThemeMacthed && modeMatched && navigateNextMatched
&& navigatePreviousMatched && passwordInputMatched && clobberSettingsKeyMatched
&& hasShortcutKeyMatched && languageSwitchKeyEnabledMatched
&& isMultiLineMatched && imeActionMatched && isIconDefinedMatched
&& localeCodeMatched && languageCodeMatched && countryCodeMatched
&& splitLayoutMatched;
&& splitLayoutMatched && numberRowMatched;
if (DEBUG) {
startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE,

View File

@ -103,6 +103,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_SHOW_EMOJI_KEY =
"pref_show_emoji_key";
public static final String PREF_ENABLE_NUMBER_ROW = "pref_enable_number_row";
private static final String PREF_LAST_USED_PERSONALIZATION_TOKEN =
"pref_last_used_personalization_token";
private static final String PREF_LAST_PERSONALIZATION_DICT_WIPED_TIME =

View File

@ -88,6 +88,7 @@ public class SettingsValues {
public final boolean mShouldShowLxxSuggestionUi;
// Use split layout for keyboard.
public final boolean mIsSplitKeyboardEnabled;
public final boolean mIsNumberRowEnabled;
public final int mScreenMetrics;
// From the input box
@ -142,6 +143,7 @@ public class SettingsValues {
? prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false)
: true /* forcibly */;
mShowsEmojiKey = Settings.readShowsEmojiKey(prefs);
mIsNumberRowEnabled = prefs.getBoolean(Settings.PREF_ENABLE_NUMBER_ROW, false);
mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true)

View File

@ -54,6 +54,11 @@ fun TypingScreen(navController: NavHostController = rememberNavController()) {
subtitle = "Suggest emojis while you're typing",
setting = SHOW_EMOJI_SUGGESTIONS
)
SettingToggleSharedPrefs(
title = "Number row",
key = Settings.PREF_ENABLE_NUMBER_ROW,
default = false
)
SettingToggleSharedPrefs(
title = "Emoji key",
subtitle = "Show the emoji key on the bottom row",