From fb9008e9fea6abdd1ff838f3b952d8c86c92f98e Mon Sep 17 00:00:00 2001
From: codokie <151087174+codokie@users.noreply.github.com>
Date: Wed, 27 Mar 2024 07:04:59 +0200
Subject: [PATCH] Make toolbar direction for RTL layouts adjustable (#574)
---
.../keyboard/latin/settings/Settings.java | 1 +
.../keyboard/latin/settings/SettingsValues.java | 2 ++
.../latin/suggestions/SuggestionStripView.java | 14 +++++++++-----
app/src/main/res/values/strings.xml | 4 ++++
app/src/main/res/xml/prefs_screen_preferences.xml | 7 +++++++
5 files changed, 23 insertions(+), 5 deletions(-)
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 f9ab3631..29dc5fa9 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
@@ -94,6 +94,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE = "block_potentially_offensive";
public static final String PREF_LANGUAGE_SWITCH_KEY = "language_switch_key";
public static final String PREF_SHOW_EMOJI_KEY = "show_emoji_key";
+ public static final String PREF_VARIABLE_TOOLBAR_DIRECTION = "var_toolbar_direction";
public static final String PREF_ADDITIONAL_SUBTYPES = "additional_subtypes";
public static final String PREF_ENABLE_SPLIT_KEYBOARD = "split_keyboard";
public static final String PREF_SPLIT_SPACER_SCALE = "split_spacer_scale";
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 52170b9b..2549748f 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
@@ -68,6 +68,7 @@ public class SettingsValues {
public final boolean mShowsPopupHints;
public final boolean mSpaceForLangChange;
public final boolean mShowsEmojiKey;
+ public final boolean mVarToolbarDirection;
public final boolean mUsePersonalizedDicts;
public final boolean mUseDoubleSpacePeriod;
public final boolean mBlockPotentiallyOffensive;
@@ -150,6 +151,7 @@ public class SettingsValues {
mShowsPopupHints = prefs.getBoolean(Settings.PREF_SHOW_POPUP_HINTS, false);
mSpaceForLangChange = prefs.getBoolean(Settings.PREF_SPACE_TO_CHANGE_LANG, true);
mShowsEmojiKey = prefs.getBoolean(Settings.PREF_SHOW_EMOJI_KEY, false);
+ mVarToolbarDirection = prefs.getBoolean(Settings.PREF_VARIABLE_TOOLBAR_DIRECTION, true);
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true)
&& inputAttributes.mIsGeneralTextInput;
diff --git a/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java b/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
index 33ba1d8a..84e1a39c 100644
--- a/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
+++ b/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
@@ -126,9 +126,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
showSuggestionsStrip();
}
- public void setLayoutDirection(final boolean isRtlLanguage) {
- final int layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL
- : ViewCompat.LAYOUT_DIRECTION_LTR;
+ public void setLayoutDirection(final int layoutDirection) {
ViewCompat.setLayoutDirection(mSuggestionStripView, layoutDirection);
ViewCompat.setLayoutDirection(mSuggestionsStrip, layoutDirection);
}
@@ -265,8 +263,14 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
}
public void setRtl(final boolean isRtlLanguage) {
- mStripVisibilityGroup.setLayoutDirection(isRtlLanguage);
- mRtl = isRtlLanguage ? -1 : 1;
+ final int layoutDirection;
+ if (!Settings.getInstance().getCurrent().mVarToolbarDirection)
+ layoutDirection = ViewCompat.LAYOUT_DIRECTION_LOCALE;
+ else{
+ layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR;
+ mRtl = isRtlLanguage ? -1 : 1;
+ }
+ mStripVisibilityGroup.setLayoutDirection(layoutDirection);
}
public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index eb5acd0e..c7eedde0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -776,4 +776,8 @@ New dictionary:
None
Move Cursor
+
+ Variable toolbar direction
+
+ Reverse direction when a right-to-left keyboard subtype is selected
diff --git a/app/src/main/res/xml/prefs_screen_preferences.xml b/app/src/main/res/xml/prefs_screen_preferences.xml
index bab93e66..e473f589 100644
--- a/app/src/main/res/xml/prefs_screen_preferences.xml
+++ b/app/src/main/res/xml/prefs_screen_preferences.xml
@@ -98,6 +98,13 @@
android:key="toolbar_keys"
android:title="@string/toolbar_keys" />
+
+