From 79badf93b1cd1c94a20fba93698a69fcddc3fa89 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sun, 10 Sep 2023 00:20:21 +0200 Subject: [PATCH] allow showing all moreKeys --- .../keyboard/internal/KeyboardTextsSet.java | 4 +++ .../settings/AdvancedSettingsFragment.java | 3 ++ .../inputmethod/latin/settings/Settings.java | 35 ++++++------------- .../latin/settings/SettingsValues.java | 12 +++---- .../latin/utils/AdditionalSubtypeUtils.java | 24 +++++++------ app/src/main/res/values/strings.xml | 4 +++ .../main/res/xml/prefs_screen_advanced.xml | 6 ++++ 7 files changed, 46 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java index ac1a37960..df7510f2b 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java @@ -61,6 +61,10 @@ public final class KeyboardTextsSet { mResourceLocale = SubtypeLocaleUtils.NO_LANGUAGE.equals(locale.toString()) ? null : locale; mResourcePackageName = resourcePackageName; mTextsTables.clear(); + if (Settings.getInstance().getCurrent().mShowAllMoreKeys) { + mTextsTables.add(KeyboardTextsTable.getTextsTable(new Locale(SubtypeLocaleUtils.NO_LANGUAGE))); + return; + } mTextsTables.add(KeyboardTextsTable.getTextsTable(locale)); if (locale != RichInputMethodManager.getInstance().getCurrentSubtypeLocale()) return; // emojiCategory calls this several times with "zz" locale diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java index 8494e5d2a..47e9e314b 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java @@ -27,6 +27,7 @@ import android.os.Bundle; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; +import org.dslul.openboard.inputmethod.keyboard.KeyboardLayoutSet; import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.SystemBroadcastReceiver; @@ -160,6 +161,8 @@ public final class AdvancedSettingsFragment extends SubScreenFragment { public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { if (key.equals(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) { SystemBroadcastReceiver.toggleAppIcon(requireContext()); + } else if (key.equals(Settings.PREF_SHOW_ALL_MORE_KEYS)) { + KeyboardLayoutSet.onKeyboardThemeChanged(); } } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java index 12627e43f..8d9fbb7ba 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java @@ -88,39 +88,28 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE = "show_suggestions_setting"; public static final String PREF_SHOW_SUGGESTIONS = "show_suggestions"; public static final String PREF_KEY_USE_PERSONALIZED_DICTS = "pref_key_use_personalized_dicts"; - public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD = - "pref_key_use_double_space_period"; - public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE = - "pref_key_block_potentially_offensive"; - public static final boolean ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS = - Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT; + public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD = "pref_key_use_double_space_period"; + public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE = "pref_key_block_potentially_offensive"; public static final boolean SHOULD_SHOW_LXX_SUGGESTION_UI = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; - public static final String PREF_LANGUAGE_SWITCH_KEY = - "pref_language_switch_key"; - public static final String PREF_SHOW_EMOJI_KEY = - "pref_show_emoji_key"; - public static final String PREF_SHOW_CLIPBOARD_KEY = - "pref_show_clipboard_key"; + public static final String PREF_LANGUAGE_SWITCH_KEY = "pref_language_switch_key"; + public static final String PREF_SHOW_EMOJI_KEY = "pref_show_emoji_key"; + public static final String PREF_SHOW_CLIPBOARD_KEY = "pref_show_clipboard_key"; public static final String PREF_CUSTOM_INPUT_STYLES = "custom_input_styles"; public static final String PREF_ENABLE_SPLIT_KEYBOARD = "pref_split_keyboard"; public static final String PREF_KEYBOARD_HEIGHT_SCALE = "pref_keyboard_height_scale"; public static final String PREF_SPACE_TRACKPAD = "pref_space_trackpad"; public static final String PREF_DELETE_SWIPE = "pref_delete_swipe"; public static final String PREF_AUTOSPACE_AFTER_PUNCTUATION = "pref_autospace_after_punctuation"; - public static final String PREF_ALWAYS_INCOGNITO_MODE = - "pref_always_incognito_mode"; + public static final String PREF_ALWAYS_INCOGNITO_MODE = "pref_always_incognito_mode"; public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction"; public static final String PREF_GESTURE_INPUT = "gesture_input"; - public static final String PREF_VIBRATION_DURATION_SETTINGS = - "pref_vibration_duration_settings"; + public static final String PREF_VIBRATION_DURATION_SETTINGS = "pref_vibration_duration_settings"; public static final String PREF_KEYPRESS_SOUND_VOLUME = "pref_keypress_sound_volume"; public static final String PREF_KEY_LONGPRESS_TIMEOUT = "pref_key_longpress_timeout"; - public static final String PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY = - "pref_enable_emoji_alt_physical_key"; + public static final String PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY = "pref_enable_emoji_alt_physical_key"; public static final String PREF_GESTURE_PREVIEW_TRAIL = "pref_gesture_preview_trail"; - public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT = - "pref_gesture_floating_preview_text"; + public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT = "pref_gesture_floating_preview_text"; public static final String PREF_SHOW_SETUP_WIZARD_ICON = "pref_show_setup_wizard_icon"; public static final String PREF_ONE_HANDED_MODE = "pref_one_handed_mode_enabled"; @@ -128,10 +117,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal"; - public static final String PREF_ENABLE_METRICS_LOGGING = "pref_enable_metrics_logging"; - - public static final String PREF_SHOW_NUMBER_ROW = - "pref_show_number_row"; + public static final String PREF_SHOW_NUMBER_ROW = "pref_show_number_row"; public static final String PREF_SHOW_HINTS = "pref_show_hints"; @@ -147,6 +133,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_ENABLED_INPUT_STYLES = "pref_enabled_input_styles"; public static final String PREF_SELECTED_INPUT_STYLE = "pref_selected_input_style"; public static final String PREF_USE_SYSTEM_LOCALES = "pref_use_system_locales"; + public static final String PREF_SHOW_ALL_MORE_KEYS = "pref_show_all_more_keys"; public static final String PREF_DONT_SHOW_MISSING_DICTIONARY_DIALOG = "pref_dont_show_missing_dict_dialog"; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index 155a9fa7e..f42dfca7e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -23,6 +23,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.util.Log; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -89,6 +90,7 @@ public class SettingsValues { public final boolean mOneHandedModeEnabled; public final int mOneHandedModeGravity; public final boolean mNarrowKeyGaps; + public final boolean mShowAllMoreKeys; public final List mSecondaryLocales; // Use bigrams to predict the next word when there is no input for it yet public final boolean mBigramPredictionEnabled; @@ -101,7 +103,6 @@ public class SettingsValues { public final boolean mShowAppIcon; public final boolean mIsShowAppIconSettingInPreferences; public final boolean mCloudSyncEnabled; - public final boolean mEnableMetricsLogging; public final boolean mShouldShowLxxSuggestionUi; // Use split layout for keyboard. public final boolean mIsSplitKeyboardEnabled; @@ -180,7 +181,6 @@ public class SettingsValues { mBigramPredictionEnabled = readBigramPredictionEnabled(prefs, res); mDoubleSpacePeriodTimeout = res.getInteger(R.integer.config_double_space_period_timeout); mHasHardwareKeyboard = Settings.readHasHardwareKeyboard(res.getConfiguration()); - mEnableMetricsLogging = prefs.getBoolean(Settings.PREF_ENABLE_METRICS_LOGGING, true); mIsSplitKeyboardEnabled = prefs.getBoolean(Settings.PREF_ENABLE_SPLIT_KEYBOARD, false); mScreenMetrics = Settings.readScreenMetrics(res); @@ -250,7 +250,9 @@ public class SettingsValues { mClipboardHistoryRetentionTime = Settings.readClipboardHistoryRetentionTime(prefs, res); mOneHandedModeEnabled = Settings.readOneHandedModeEnabled(prefs); mOneHandedModeGravity = Settings.readOneHandedModeGravity(prefs); - mSecondaryLocales = Settings.getSecondaryLocales(prefs, SubtypeSettingsKt.getSelectedSubtype(prefs).getLocale()); + final InputMethodSubtype selectedSubtype = SubtypeSettingsKt.getSelectedSubtype(prefs); + mSecondaryLocales = Settings.getSecondaryLocales(prefs, selectedSubtype.getLocale()); + mShowAllMoreKeys = selectedSubtype.isAsciiCapable() && prefs.getBoolean(Settings.PREF_SHOW_ALL_MORE_KEYS, false); mColors = Settings.getColorsForCurrentTheme(context, prefs); @@ -260,10 +262,6 @@ public class SettingsValues { mNarrowKeyGaps = prefs.getBoolean(Settings.PREF_NARROW_KEY_GAPS, true); } - public boolean isMetricsLoggingEnabled() { - return mEnableMetricsLogging; - } - public boolean isApplicationSpecifiedCompletionsOn() { return mInputAttributes.mApplicationSpecifiedCompletionOn; } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java index 078b32e30..bd3ee47ff 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AdditionalSubtypeUtils.java @@ -16,13 +16,11 @@ package org.dslul.openboard.inputmethod.latin.utils; -import android.os.Build; import android.text.TextUtils; import android.util.Log; import android.view.inputmethod.InputMethodSubtype; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.compat.InputMethodSubtypeCompatUtils; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.common.StringUtils; @@ -66,13 +64,17 @@ public final class AdditionalSubtypeUtils { localeString, keyboardLayoutSetName, isAsciiCapable, isEmojiCapable); final int platformVersionIndependentSubtypeId = getPlatformVersionIndependentSubtypeId(localeString, keyboardLayoutSetName); - // NOTE: In KitKat and later, InputMethodSubtypeBuilder#setIsAsciiCapable is also available. - // TODO: Use InputMethodSubtypeBuilder#setIsAsciiCapable when appropriate. - return new InputMethodSubtype(nameId, - R.drawable.ic_ime_switcher_dark, localeString, KEYBOARD_MODE, - platformVersionDependentExtraValues, - false /* isAuxiliary */, false /* overrideImplicitlyEnabledSubtype */, - platformVersionIndependentSubtypeId); + return new InputMethodSubtype.InputMethodSubtypeBuilder() + .setSubtypeNameResId(nameId) + .setSubtypeIconResId(R.drawable.ic_ime_switcher_dark) + .setSubtypeLocale(localeString) + .setSubtypeMode(KEYBOARD_MODE) + .setSubtypeExtraValue(platformVersionDependentExtraValues) + .setIsAuxiliary(false) + .setOverridesImplicitlyEnabledSubtype(false) + .setSubtypeId(platformVersionIndependentSubtypeId) + .setIsAsciiCapable(isAsciiCapable) + .build(); } public static InputMethodSubtype createDummyAdditionalSubtype( @@ -111,7 +113,7 @@ public final class AdditionalSubtypeUtils { if (subtype != null) subtypesList.add(subtype); } - return subtypesList.toArray(new InputMethodSubtype[subtypesList.size()]); + return subtypesList.toArray(new InputMethodSubtype[0]); } // use string created with getPrefSubtype @@ -191,7 +193,7 @@ public final class AdditionalSubtypeUtils { extraValueItems.add(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME + "=" + SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(keyboardLayoutSetName)); } - if (isEmojiCapable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (isEmojiCapable) { extraValueItems.add(EMOJI_CAPABLE); } extraValueItems.add(IS_ADDITIONAL_SUBTYPE); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7584c4f6e..2bfd8d5fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -191,6 +191,10 @@ Autospace after punctuation Automatically insert space after punctuation when typing a new word + + Show all keys in popup + + When using a latin keyboard, more characters are available on long-pressing a key Force incognito mode diff --git a/app/src/main/res/xml/prefs_screen_advanced.xml b/app/src/main/res/xml/prefs_screen_advanced.xml index 6cd15a6d3..f8896c17d 100644 --- a/app/src/main/res/xml/prefs_screen_advanced.xml +++ b/app/src/main/res/xml/prefs_screen_advanced.xml @@ -82,6 +82,12 @@ android:summary="@string/autospace_after_punctuation_summary" android:defaultValue="false" /> + +