From 8ca65aebc9d754fb381f6cb2bf26c97dbdedb498 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Wed, 28 Aug 2024 22:08:00 +0200 Subject: [PATCH] allow customizing text on space bar fixes #956 fixes #875 (set text to space) --- .../keyboard/keyboard/MainKeyboardView.java | 18 +++++++++++++----- .../keyboard/latin/settings/Settings.java | 1 + .../latin/settings/SettingsValues.java | 2 ++ .../latin/utils/LanguageOnSpacebarUtils.java | 5 +++-- app/src/main/res/values/strings.xml | 2 ++ .../main/res/xml/prefs_screen_appearance.xml | 6 ++++++ 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java b/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java index 85deefb86..4fa989e81 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java +++ b/app/src/main/java/helium314/keyboard/keyboard/MainKeyboardView.java @@ -659,6 +659,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy invalidateKey(shortcutKey); } + // the whole language on spacebar thing could probably be simplified quite a bit public void startDisplayLanguageOnSpacebar(final boolean subtypeChanged, final int languageOnSpacebarFormatType, final boolean hasMultipleEnabledIMEsOrSubtypes) { @@ -799,13 +800,16 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy paint.setTextAlign(Align.CENTER); paint.setTypeface(Typeface.DEFAULT); paint.setTextSize(mLanguageOnSpacebarTextSize); - final String languageText; - if (DebugFlags.DEBUG_ENABLED) { + final String customText = Settings.getInstance().getCurrent().mSpaceBarText; + final String spaceText; + if (!customText.isEmpty()) { + spaceText = customText; + } else if (DebugFlags.DEBUG_ENABLED) { final String l = KeyboardSwitcher.getInstance().getLocaleAndConfidenceInfo(); - languageText = l != null ? l : layoutLanguageOnSpacebar(paint, keyboard.mId.mSubtype, width); + spaceText = l != null ? l : layoutLanguageOnSpacebar(paint, keyboard.mId.mSubtype, width); } else - languageText = layoutLanguageOnSpacebar(paint, keyboard.mId.mSubtype, width); + spaceText = layoutLanguageOnSpacebar(paint, keyboard.mId.mSubtype, width); // Draw language text with shadow final float descent = paint.descent(); final float textHeight = -paint.ascent() + descent; @@ -818,7 +822,11 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy } paint.setColor(mLanguageOnSpacebarTextColor); paint.setAlpha(mLanguageOnSpacebarAnimAlpha); - canvas.drawText(languageText, width / 2f, baseline - descent, paint); + if (!fitsTextIntoWidth(width, spaceText, paint)) { + final float textWidth = TypefaceUtils.getStringWidth(spaceText, paint); + paint.setTextScaleX((width - mLanguageOnSpacebarHorizontalMargin * 2) / textWidth); + } + canvas.drawText(spaceText, width / 2f, baseline - descent, paint); paint.clearShadowLayer(); paint.setTextScaleX(1.0f); } diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java index b94e916b1..df1435353 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -164,6 +164,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_ABC_AFTER_CLIP = "abc_after_clip"; public static final String PREF_ABC_AFTER_SYMBOL_SPACE = "abc_after_symbol_space"; public static final String PREF_REMOVE_REDUNDANT_POPUPS = "remove_redundant_popups"; + public static final String PREF_SPACE_BAR_TEXT = "space_bar_text"; // Emoji public static final String PREF_EMOJI_RECENT_KEYS = "emoji_recent_keys"; diff --git a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java index 92e755fc5..a7426326d 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java @@ -117,6 +117,7 @@ public class SettingsValues { public final boolean mAlphaAfterClipHistoryEntry; public final boolean mAlphaAfterSymbolAndSpace; public final boolean mRemoveRedundantPopups; + public final String mSpaceBarText; // From the input box @NonNull @@ -264,6 +265,7 @@ public class SettingsValues { mAlphaAfterClipHistoryEntry = prefs.getBoolean(Settings.PREF_ABC_AFTER_CLIP, false); mAlphaAfterSymbolAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_SYMBOL_SPACE, true); mRemoveRedundantPopups = prefs.getBoolean(Settings.PREF_REMOVE_REDUNDANT_POPUPS, true); + mSpaceBarText = prefs.getString(Settings.PREF_SPACE_BAR_TEXT, ""); } public boolean isApplicationSpecifiedCompletionsOn() { diff --git a/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java index 3d70cb21e..d4a26999c 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java +++ b/app/src/main/java/helium314/keyboard/latin/utils/LanguageOnSpacebarUtils.java @@ -32,8 +32,9 @@ public final class LanguageOnSpacebarUtils { // This utility class is not publicly instantiable. } - public static int getLanguageOnSpacebarFormatType( - @NonNull final RichInputMethodSubtype subtype) { + public static int getLanguageOnSpacebarFormatType(@NonNull final RichInputMethodSubtype subtype) { + if (!Settings.getInstance().getCurrent().mSpaceBarText.isEmpty()) + return FORMAT_TYPE_FULL_LOCALE; if (subtype.isNoLanguage()) { return FORMAT_TYPE_FULL_LOCALE; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2536ce1f7..8d1cf5e3b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -305,6 +305,8 @@ Keyboard height scale Bottom padding scale + + Custom text on space bar English (UK) diff --git a/app/src/main/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml index ea44b42ca..603132cbc 100644 --- a/app/src/main/res/xml/prefs_screen_appearance.xml +++ b/app/src/main/res/xml/prefs_screen_appearance.xml @@ -101,6 +101,12 @@ latin:minValue="0" latin:maxValue="500" /> + +