diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java
index 2b679dd26..76a6d56df 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java
+++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java
@@ -20,6 +20,7 @@ import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;
+import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -49,8 +50,8 @@ import helium314.keyboard.latin.utils.Log;
import helium314.keyboard.latin.utils.RecapitalizeStatus;
import helium314.keyboard.latin.utils.ResourceUtils;
import helium314.keyboard.latin.utils.ScriptUtils;
-import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional;
+import helium314.keyboard.latin.utils.ToolbarMode;
public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
@@ -64,6 +65,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
private LinearLayout mClipboardStripView;
private HorizontalScrollView mClipboardStripScrollView;
private SuggestionStripView mSuggestionStripView;
+ private FrameLayout mStripContainer;
private ClipboardHistoryView mClipboardHistoryView;
private TextView mFakeToastView;
private LatinIME mLatinIME;
@@ -307,6 +309,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
@NonNull final SettingsValues settingsValues,
@NonNull final KeyboardSwitchState toggleState) {
final int visibility = isImeSuppressedByHardwareKeyboard(settingsValues, toggleState) ? View.GONE : View.VISIBLE;
+ final int stripVisibility = settingsValues.mToolbarMode == ToolbarMode.HIDDEN ? View.GONE : View.VISIBLE;
+ mStripContainer.setVisibility(stripVisibility);
PointerTracker.switchTo(mKeyboardView);
mKeyboardView.setVisibility(visibility);
// The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}.
@@ -317,7 +321,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mEmojiPalettesView.stopEmojiPalettes();
mEmojiTabStripView.setVisibility(View.GONE);
mClipboardStripScrollView.setVisibility(View.GONE);
- mSuggestionStripView.setVisibility(View.VISIBLE);
+ mSuggestionStripView.setVisibility(stripVisibility);
mClipboardHistoryView.setVisibility(View.GONE);
mClipboardHistoryView.stopClipboardHistory();
}
@@ -334,6 +338,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
// @see LatinIME#onComputeInset(android.inputmethodservice.InputMethodService.Insets)
mKeyboardView.setVisibility(View.GONE);
mSuggestionStripView.setVisibility(View.GONE);
+ mStripContainer.setVisibility(getSecondaryStripVisibility());
mClipboardStripScrollView.setVisibility(View.GONE);
mEmojiTabStripView.setVisibility(View.VISIBLE);
mClipboardHistoryView.setVisibility(View.GONE);
@@ -355,6 +360,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mKeyboardView.setVisibility(View.GONE);
mEmojiTabStripView.setVisibility(View.GONE);
mSuggestionStripView.setVisibility(View.GONE);
+ mStripContainer.setVisibility(getSecondaryStripVisibility());
mClipboardStripScrollView.post(() -> mClipboardStripScrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT));
mClipboardStripScrollView.setVisibility(View.VISIBLE);
mEmojiPalettesView.setVisibility(View.GONE);
@@ -539,6 +545,10 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
}
}
+ private static int getSecondaryStripVisibility() {
+ return Settings.getValues().mSecondaryStripVisible? View.VISIBLE : View.GONE;
+ }
+
// Displays a toast-like message with the provided text for a specified duration.
private void showFakeToast(final String text, final int timeMillis) {
if (mFakeToastView.getVisibility() == View.VISIBLE) return;
@@ -606,6 +616,10 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
return mKeyboardView.isShowingPopupKeysPanel();
}
+ public boolean isShowingStripContainer() {
+ return mStripContainer.isShown();
+ }
+
public View getVisibleKeyboardView() {
if (isShowingEmojiPalettes()) {
return mEmojiPalettesView;
@@ -631,6 +645,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
return mKeyboardView;
}
+ public FrameLayout getStripContainer() { return mStripContainer; }
+
public void deallocateMemory() {
if (mKeyboardView != null) {
mKeyboardView.cancelAllOngoingEvents();
@@ -684,6 +700,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mClipboardStripView = mCurrentInputView.findViewById(R.id.clipboard_strip);
mClipboardStripScrollView = mCurrentInputView.findViewById(R.id.clipboard_strip_scroll_view);
mSuggestionStripView = mCurrentInputView.findViewById(R.id.suggestion_strip_view);
+ mStripContainer = mCurrentInputView.findViewById(R.id.strip_container);
prefs.registerOnSharedPreferenceChangeListener(mSuggestionStripView);
prefs.registerOnSharedPreferenceChangeListener(mClipboardHistoryView);
diff --git a/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardHistoryView.kt b/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardHistoryView.kt
index 0f0cb756f..931146cb1 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardHistoryView.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardHistoryView.kt
@@ -30,6 +30,7 @@ import helium314.keyboard.latin.common.Constants
import helium314.keyboard.latin.settings.Settings
import helium314.keyboard.latin.utils.ResourceUtils
import helium314.keyboard.latin.utils.ToolbarKey
+import helium314.keyboard.latin.utils.ToolbarMode
import helium314.keyboard.latin.utils.createToolbarKey
import helium314.keyboard.latin.utils.getCodeForToolbarKey
import helium314.keyboard.latin.utils.getCodeForToolbarKeyLongClick
@@ -68,8 +69,10 @@ class ClipboardHistoryView @JvmOverloads constructor(
keyBackgroundId = keyboardViewAttr.getResourceId(R.styleable.KeyboardView_keyBackground, 0)
keyboardViewAttr.recycle()
val keyboardAttr = context.obtainStyledAttributes(attrs, R.styleable.Keyboard, defStyle, R.style.SuggestionStripView)
- getEnabledClipboardToolbarKeys(context.prefs())
- .forEach { toolbarKeys.add(createToolbarKey(context, KeyboardIconsSet.instance, it)) }
+ if (Settings.getValues().mSecondaryStripVisible) {
+ getEnabledClipboardToolbarKeys(context.prefs())
+ .forEach { toolbarKeys.add(createToolbarKey(context, KeyboardIconsSet.instance, it)) }
+ }
keyboardAttr.recycle()
fitsSystemWindows = true
}
@@ -79,7 +82,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
val res = context.resources
// The main keyboard expands to the entire this {@link KeyboardView}.
val width = ResourceUtils.getKeyboardWidth(context, Settings.getValues()) + paddingLeft + paddingRight
- val height = ResourceUtils.getKeyboardHeight(res, Settings.getValues()) + paddingTop + paddingBottom
+ val height = ResourceUtils.getSecondaryKeyboardHeight(res, Settings.getValues()) + paddingTop + paddingBottom
setMeasuredDimension(width, height)
}
diff --git a/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardLayoutParams.kt b/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardLayoutParams.kt
index c5edd6ab5..a07b30712 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardLayoutParams.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/clipboard/ClipboardLayoutParams.kt
@@ -3,7 +3,6 @@
package helium314.keyboard.keyboard.clipboard
import android.content.Context
-import android.content.res.Resources
import android.view.View
import android.widget.FrameLayout
import androidx.recyclerview.widget.RecyclerView
@@ -22,7 +21,7 @@ class ClipboardLayoutParams(ctx: Context) {
init {
val res = ctx.resources
val sv = Settings.getValues()
- val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
+ val defaultKeyboardHeight = ResourceUtils.getSecondaryKeyboardHeight(res, sv)
val defaultKeyboardWidth = ResourceUtils.getKeyboardWidth(ctx, sv)
if (sv.mNarrowKeyGaps) {
diff --git a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiLayoutParams.kt b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiLayoutParams.kt
index b423ca44c..220997b8c 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiLayoutParams.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiLayoutParams.kt
@@ -22,7 +22,7 @@ internal class EmojiLayoutParams(res: Resources) {
init {
val sv = Settings.getValues()
- val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
+ val defaultKeyboardHeight = ResourceUtils.getSecondaryKeyboardHeight(res, sv)
val keyVerticalGap = if (sv.mNarrowKeyGaps) {
res.getFraction(R.fraction.config_key_vertical_gap_holo_narrow,
diff --git a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java
index 1999ef8f8..4023be50f 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java
+++ b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java
@@ -219,7 +219,7 @@ public final class EmojiPalettesView extends LinearLayout
// The main keyboard expands to the entire this {@link KeyboardView}.
final int width = ResourceUtils.getKeyboardWidth(getContext(), Settings.getValues())
+ getPaddingLeft() + getPaddingRight();
- final int height = ResourceUtils.getKeyboardHeight(res, Settings.getValues())
+ final int height = ResourceUtils.getSecondaryKeyboardHeight(res, Settings.getValues())
+ getPaddingTop() + getPaddingBottom();
mEmojiCategoryPageIndicatorView.mWidth = width;
setMeasuredDimension(width, height);
@@ -243,8 +243,10 @@ public final class EmojiPalettesView extends LinearLayout
if (initialized) return;
mEmojiCategory.initialize();
mTabStrip = (LinearLayout) KeyboardSwitcher.getInstance().getEmojiTabStrip();
- for (final EmojiCategory.CategoryProperties properties : mEmojiCategory.getShownCategories()) {
- addTab(mTabStrip, properties.mCategoryId);
+ if (Settings.getValues().mSecondaryStripVisible) {
+ for (final EmojiCategory.CategoryProperties properties : mEmojiCategory.getShownCategories()) {
+ addTab(mTabStrip, properties.mCategoryId);
+ }
}
mPager = findViewById(R.id.emoji_pager);
@@ -404,13 +406,15 @@ public final class EmojiPalettesView extends LinearLayout
mEmojiCategory.getCurrentCategoryId()), ! initial);
}
- final View old = mTabStrip.findViewWithTag((long) oldCategoryId);
- final View current = mTabStrip.findViewWithTag((long) categoryId);
+ if (Settings.getValues().mSecondaryStripVisible) {
+ final View old = mTabStrip.findViewWithTag((long) oldCategoryId);
+ final View current = mTabStrip.findViewWithTag((long) categoryId);
- if (old instanceof ImageView)
- Settings.getValues().mColors.setColor((ImageView) old, ColorType.EMOJI_CATEGORY);
- if (current instanceof ImageView)
- Settings.getValues().mColors.setColor((ImageView) current, ColorType.EMOJI_CATEGORY_SELECTED);
+ if (old instanceof ImageView)
+ Settings.getValues().mColors.setColor((ImageView) old, ColorType.EMOJI_CATEGORY);
+ if (current instanceof ImageView)
+ Settings.getValues().mColors.setColor((ImageView) current, ColorType.EMOJI_CATEGORY_SELECTED);
+ }
}
}
diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt
index 35ab32dfe..f58a0b522 100644
--- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt
+++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt
@@ -72,7 +72,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte
var keyWidth = defaultKeyWidth * sqrt(Settings.getValues().mKeyboardHeightScale)
val defaultKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false)
val defaultBottomPadding = context.resources.getFraction(R.fraction.config_keyboard_bottom_padding_holo, defaultKeyboardHeight, defaultKeyboardHeight)
- val emojiKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false) * 0.75f + params.mVerticalGap - defaultBottomPadding - context.resources.getDimensionPixelSize(R.dimen.config_emoji_category_page_id_height)
+ val emojiKeyboardHeight = defaultKeyboardHeight * 0.75f + params.mVerticalGap - defaultBottomPadding - context.resources.getDimensionPixelSize(R.dimen.config_emoji_category_page_id_height)
var keyHeight = emojiKeyboardHeight * params.mDefaultRowHeight * Settings.getValues().mKeyboardHeightScale // still apply height scale to key
if (Settings.getValues().mEmojiKeyFit) {
diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java
index 3a65b8f93..36107954f 100644
--- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java
+++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java
@@ -87,6 +87,7 @@ import helium314.keyboard.latin.utils.StatsUtils;
import helium314.keyboard.latin.utils.StatsUtilsManager;
import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
import helium314.keyboard.latin.utils.SubtypeSettings;
+import helium314.keyboard.latin.utils.ToolbarMode;
import helium314.keyboard.latin.utils.ViewLayoutUtils;
import helium314.keyboard.settings.SettingsActivity;
import kotlin.collections.CollectionsKt;
@@ -879,7 +880,8 @@ public class LatinIME extends InputMethodService implements
mInputView = view;
mInsetsUpdater = ViewOutlineProviderUtilsKt.setInsetsOutlineProvider(view);
updateSoftInputWindowLayoutParameters();
- mSuggestionStripView = view.findViewById(R.id.suggestion_strip_view);
+ mSuggestionStripView = mSettings.getCurrent().mToolbarMode == ToolbarMode.HIDDEN?
+ null : view.findViewById(R.id.suggestion_strip_view);
if (hasSuggestionStripView()) {
mSuggestionStripView.setListener(this, view);
}
@@ -931,8 +933,9 @@ public class LatinIME extends InputMethodService implements
mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype),
mSettings.getCurrent());
loadKeyboard();
- if (mSuggestionStripView != null)
+ if (hasSuggestionStripView()) {
mSuggestionStripView.setRtl(mRichImm.getCurrentSubtype().isRtlSubtype());
+ }
}
/** alias to onCurrentInputMethodSubtypeChanged with a better name, as it's also used for internal switching */
@@ -1215,7 +1218,7 @@ public class LatinIME extends InputMethodService implements
@Override
public void hideWindow() {
- if (mSuggestionStripView != null)
+ if (hasSuggestionStripView() && mSettings.getCurrent().mToolbarMode == ToolbarMode.EXPANDABLE)
mSuggestionStripView.setToolbarVisibility(false);
mKeyboardSwitcher.onHideWindow();
@@ -1271,7 +1274,7 @@ public class LatinIME extends InputMethodService implements
return;
}
final View visibleKeyboardView = mKeyboardSwitcher.getWrapperView();
- if (visibleKeyboardView == null || !hasSuggestionStripView()) {
+ if (visibleKeyboardView == null) {
return;
}
final int inputHeight = mInputView.getHeight();
@@ -1283,8 +1286,13 @@ public class LatinIME extends InputMethodService implements
mInsetsUpdater.setInsets(outInsets);
return;
}
- final int visibleTopY = inputHeight - visibleKeyboardView.getHeight() - mSuggestionStripView.getHeight();
- mSuggestionStripView.setMoreSuggestionsHeight(visibleTopY);
+ final int stripHeight = mKeyboardSwitcher.isShowingStripContainer() ? mKeyboardSwitcher.getStripContainer().getHeight() : 0;
+ final int visibleTopY = inputHeight - visibleKeyboardView.getHeight() - stripHeight;
+
+ if (hasSuggestionStripView()) {
+ mSuggestionStripView.setMoreSuggestionsHeight(visibleTopY);
+ }
+
// Need to set expanded touchable region only if a keyboard view is being shown.
if (visibleKeyboardView.isShown()) {
final int touchLeft = 0;
@@ -1368,6 +1376,10 @@ public class LatinIME extends InputMethodService implements
@RequiresApi(api = Build.VERSION_CODES.R)
public InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull Bundle uiExtras) {
Log.d(TAG,"onCreateInlineSuggestionsRequest called");
+ if (Settings.getValues().mSuggestionStripHiddenPerUserSettings) {
+ return null;
+ }
+
return InlineAutofillUtils.createInlineSuggestionRequest(mDisplayContext);
}
@@ -1629,7 +1641,7 @@ public class LatinIME extends InputMethodService implements
dismissGestureFloatingPreviewText /* dismissDelayed */);
}
- public boolean hasSuggestionStripView() {
+ private boolean hasSuggestionStripView() {
return null != mSuggestionStripView;
}
diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt
index 0dff54197..f8a91e0ea 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt
+++ b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt
@@ -145,6 +145,8 @@ object Defaults {
const val PREF_SELECTED_SUBTYPE = ""
const val PREF_URL_DETECTION = false
const val PREF_DONT_SHOW_MISSING_DICTIONARY_DIALOG = false
+ const val PREF_TOOLBAR_MODE = "EXPANDABLE"
+ const val PREF_TOOLBAR_HIDING_GLOBAL = true
const val PREF_QUICK_PIN_TOOLBAR_KEYS = false
val PREF_PINNED_TOOLBAR_KEYS = defaultPinnedToolbarPref
val PREF_TOOLBAR_KEYS = defaultToolbarPref
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 6b6c5ddf4..87449c563 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
@@ -37,6 +37,7 @@ import helium314.keyboard.latin.utils.StatsUtils;
import helium314.keyboard.latin.utils.SubtypeSettings;
import helium314.keyboard.latin.utils.ToolbarKey;
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
+import helium314.keyboard.latin.utils.ToolbarMode;
import java.io.File;
import java.util.Arrays;
@@ -168,6 +169,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_REMOVE_REDUNDANT_POPUPS = "remove_redundant_popups";
public static final String PREF_SPACE_BAR_TEXT = "space_bar_text";
public static final String PREF_TIMESTAMP_FORMAT = "timestamp_format";
+ public static final String PREF_TOOLBAR_MODE = "toolbar_mode";
+ public static final String PREF_TOOLBAR_HIDING_GLOBAL = "toolbar_hiding_global";
// Emoji
public static final String PREF_EMOJI_MAX_SDK = "emoji_max_sdk";
@@ -324,6 +327,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
mPrefs.edit().putBoolean(Settings.PREF_ALWAYS_INCOGNITO_MODE, !oldValue).apply();
}
+ public static ToolbarMode readToolbarMode(final SharedPreferences prefs) {
+ return ToolbarMode.valueOf(prefs.getString(PREF_TOOLBAR_MODE, Defaults.PREF_TOOLBAR_MODE));
+ }
+
public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) {
return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) {
case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR;
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 9c0b66f23..26ae4658c 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
@@ -31,6 +31,7 @@ import helium314.keyboard.latin.utils.JniUtils;
import helium314.keyboard.latin.utils.ScriptUtils;
import helium314.keyboard.latin.utils.SubtypeSettings;
import helium314.keyboard.latin.utils.SubtypeUtilsKt;
+import helium314.keyboard.latin.utils.ToolbarMode;
import java.util.List;
import java.util.Locale;
@@ -114,6 +115,8 @@ public class SettingsValues {
public final boolean mUrlDetectionEnabled;
public final float mBottomPaddingScale;
public final float mSidePaddingScale;
+ public final ToolbarMode mToolbarMode;
+ public final boolean mToolbarHidingGlobal;
public final boolean mAutoShowToolbar;
public final boolean mAutoHideToolbar;
public final boolean mAlphaAfterEmojiInEmojiView;
@@ -131,6 +134,8 @@ public class SettingsValues {
public final InputAttributes mInputAttributes;
// Deduced settings
+ public final boolean mSuggestionStripHiddenPerUserSettings;
+ public final boolean mSecondaryStripVisible;
public final int mKeypressVibrationDuration;
public final float mKeypressSoundVolume;
public final boolean mAutoCorrectionEnabledPerUserSettings;
@@ -160,6 +165,8 @@ public class SettingsValues {
mInputAttributes = inputAttributes;
// Get the settings preferences
+ mToolbarMode = Settings.readToolbarMode(prefs);
+ mToolbarHidingGlobal = prefs.getBoolean(Settings.PREF_TOOLBAR_HIDING_GLOBAL, Defaults.PREF_TOOLBAR_HIDING_GLOBAL);
mAutoCap = prefs.getBoolean(Settings.PREF_AUTO_CAP, Defaults.PREF_AUTO_CAP) && ScriptUtils.scriptSupportsUppercase(mLocale);
mVibrateOn = Settings.readVibrationEnabled(prefs);
mVibrateInDndMode = prefs.getBoolean(Settings.PREF_VIBRATE_IN_DND_MODE, Defaults.PREF_VIBRATE_IN_DND_MODE);
@@ -180,7 +187,7 @@ public class SettingsValues {
mShowTldPopupKeys = prefs.getBoolean(Settings.PREF_SHOW_TLD_POPUP_KEYS, Defaults.PREF_SHOW_TLD_POPUP_KEYS);
mSpaceForLangChange = prefs.getBoolean(Settings.PREF_SPACE_TO_CHANGE_LANG, Defaults.PREF_SPACE_TO_CHANGE_LANG);
mShowsEmojiKey = prefs.getBoolean(Settings.PREF_SHOW_EMOJI_KEY, Defaults.PREF_SHOW_EMOJI_KEY);
- mVarToolbarDirection = prefs.getBoolean(Settings.PREF_VARIABLE_TOOLBAR_DIRECTION, Defaults.PREF_VARIABLE_TOOLBAR_DIRECTION);
+ mVarToolbarDirection = mToolbarMode != ToolbarMode.HIDDEN && prefs.getBoolean(Settings.PREF_VARIABLE_TOOLBAR_DIRECTION, Defaults.PREF_VARIABLE_TOOLBAR_DIRECTION);
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, Defaults.PREF_KEY_USE_PERSONALIZED_DICTS);
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, Defaults.PREF_KEY_USE_DOUBLE_SPACE_PERIOD)
&& inputAttributes.mIsGeneralTextInput;
@@ -209,7 +216,7 @@ public class SettingsValues {
mSplitKeyboardSpacerRelativeWidth = mIsSplitKeyboardEnabled
? Math.min(Math.max((displayWidthDp - 600) / 600f + 0.15f, 0.15f), 0.35f) * Settings.readSplitSpacerScale(prefs, isLandscape)
: 0f;
- mQuickPinToolbarKeys = prefs.getBoolean(Settings.PREF_QUICK_PIN_TOOLBAR_KEYS, Defaults.PREF_QUICK_PIN_TOOLBAR_KEYS);
+ mQuickPinToolbarKeys = mToolbarMode == ToolbarMode.EXPANDABLE && prefs.getBoolean(Settings.PREF_QUICK_PIN_TOOLBAR_KEYS, Defaults.PREF_QUICK_PIN_TOOLBAR_KEYS);
mScreenMetrics = Settings.readScreenMetrics(res);
// Compute other readable settings
@@ -224,13 +231,15 @@ public class SettingsValues {
mGestureFloatingPreviewDynamicEnabled = Settings.readGestureDynamicPreviewEnabled(prefs);
mGestureFastTypingCooldown = prefs.getInt(Settings.PREF_GESTURE_FAST_TYPING_COOLDOWN, Defaults.PREF_GESTURE_FAST_TYPING_COOLDOWN);
mGestureTrailFadeoutDuration = prefs.getInt(Settings.PREF_GESTURE_TRAIL_FADEOUT_DURATION, Defaults.PREF_GESTURE_TRAIL_FADEOUT_DURATION);
+ mSuggestionStripHiddenPerUserSettings = mToolbarMode == ToolbarMode.HIDDEN || mToolbarMode == ToolbarMode.TOOLBAR_KEYS;
mOverrideShowingSuggestions = mInputAttributes.mMayOverrideShowingSuggestions
&& prefs.getBoolean(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS, Defaults.PREF_ALWAYS_SHOW_SUGGESTIONS)
&& ((inputAttributes.mInputType & InputType.TYPE_MASK_VARIATION) != InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT
|| !prefs.getBoolean(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS_EXCEPT_WEB_TEXT, Defaults.PREF_ALWAYS_SHOW_SUGGESTIONS_EXCEPT_WEB_TEXT));
final boolean suggestionsEnabled = prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, Defaults.PREF_SHOW_SUGGESTIONS);
- mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && suggestionsEnabled)
- || mOverrideShowingSuggestions;
+ mSuggestionsEnabledPerUserSettings = ((mInputAttributes.mShouldShowSuggestions && suggestionsEnabled)
+ || mOverrideShowingSuggestions) && !mSuggestionStripHiddenPerUserSettings;
+ mSecondaryStripVisible = mToolbarMode != ToolbarMode.HIDDEN || ! mToolbarHidingGlobal;
mIncognitoModeEnabled = prefs.getBoolean(Settings.PREF_ALWAYS_INCOGNITO_MODE, Defaults.PREF_ALWAYS_INCOGNITO_MODE) || mInputAttributes.mNoLearning
|| mInputAttributes.mIsPasswordField;
mKeyboardHeightScale = prefs.getFloat(Settings.PREF_KEYBOARD_HEIGHT_SCALE, Defaults.PREF_KEYBOARD_HEIGHT_SCALE);
@@ -275,8 +284,8 @@ public class SettingsValues {
mBottomPaddingScale = Settings.readBottomPaddingScale(prefs, isLandscape);
mSidePaddingScale = Settings.readSidePaddingScale(prefs, isLandscape);
mLongPressSymbolsForNumpad = prefs.getBoolean(Settings.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD, Defaults.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD);
- mAutoShowToolbar = prefs.getBoolean(Settings.PREF_AUTO_SHOW_TOOLBAR, Defaults.PREF_AUTO_SHOW_TOOLBAR);
- mAutoHideToolbar = suggestionsEnabled && prefs.getBoolean(Settings.PREF_AUTO_HIDE_TOOLBAR, Defaults.PREF_AUTO_HIDE_TOOLBAR);
+ mAutoShowToolbar = mToolbarMode == ToolbarMode.EXPANDABLE && prefs.getBoolean(Settings.PREF_AUTO_SHOW_TOOLBAR, Defaults.PREF_AUTO_SHOW_TOOLBAR);
+ mAutoHideToolbar = mSuggestionsEnabledPerUserSettings && prefs.getBoolean(Settings.PREF_AUTO_HIDE_TOOLBAR, Defaults.PREF_AUTO_HIDE_TOOLBAR);
mAlphaAfterEmojiInEmojiView = prefs.getBoolean(Settings.PREF_ABC_AFTER_EMOJI, Defaults.PREF_ABC_AFTER_EMOJI);
mAlphaAfterClipHistoryEntry = prefs.getBoolean(Settings.PREF_ABC_AFTER_CLIP, Defaults.PREF_ABC_AFTER_CLIP);
mAlphaAfterSymbolAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_SYMBOL_SPACE, Defaults.PREF_ABC_AFTER_SYMBOL_SPACE);
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 9a8e49f36..bab6e4157 100644
--- a/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
+++ b/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
@@ -59,6 +59,7 @@ import helium314.keyboard.latin.suggestions.PopupSuggestionsView.MoreSuggestions
import helium314.keyboard.latin.utils.KtxKt;
import helium314.keyboard.latin.utils.Log;
import helium314.keyboard.latin.utils.ToolbarKey;
+import helium314.keyboard.latin.utils.ToolbarMode;
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
import java.util.ArrayList;
@@ -107,6 +108,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
private final SuggestionStripLayoutHelper mLayoutHelper;
private final StripVisibilityGroup mStripVisibilityGroup;
private boolean isExternalSuggestionVisible = false; // Required to disable the more suggestions if other suggestions are visible
+ private final ToolbarMode mToolbarMode;
private static class StripVisibilityGroup {
private final View mSuggestionStripView;
@@ -153,6 +155,11 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
mPinnedKeys = findViewById(R.id.pinned_keys);
mToolbar = findViewById(R.id.toolbar);
mToolbarContainer = findViewById(R.id.toolbar_container);
+ mToolbarMode = Settings.getValues().mToolbarMode;
+
+ if (mToolbarMode == ToolbarMode.TOOLBAR_KEYS) {
+ setToolbarVisibility(true);
+ }
final Typeface customTypeface = Settings.getInstance().getCustomTypeface();
for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) {
@@ -192,11 +199,13 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
getResources().getDimensionPixelSize(R.dimen.config_suggestions_strip_edge_key_width),
LinearLayout.LayoutParams.MATCH_PARENT
);
- for (final ToolbarKey key : ToolbarUtilsKt.getEnabledToolbarKeys(prefs)) {
- final ImageButton button = createToolbarKey(context, iconsSet, key);
- button.setLayoutParams(toolbarKeyLayoutParams);
- setupKey(button, colors);
- mToolbar.addView(button);
+ if (mToolbarMode == ToolbarMode.TOOLBAR_KEYS || mToolbarMode == ToolbarMode.EXPANDABLE) {
+ for (final ToolbarKey key : ToolbarUtilsKt.getEnabledToolbarKeys(prefs)) {
+ final ImageButton button = createToolbarKey(context, iconsSet, key);
+ button.setLayoutParams(toolbarKeyLayoutParams);
+ setupKey(button, colors);
+ mToolbar.addView(button);
+ }
}
final int toolbarHeight = Math.min(mToolbarExpandKey.getLayoutParams().height, (int) getResources().getDimension(R.dimen.config_suggestions_strip_height));
@@ -208,22 +217,23 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
mEnabledToolKeyBackground.setGradientType(GradientDrawable.RADIAL_GRADIENT);
mEnabledToolKeyBackground.setGradientRadius(mToolbarExpandKey.getLayoutParams().height / 2f); // nothing else has a usable height at this state
- mToolbarExpandKey.setOnClickListener(this);
- mToolbarExpandKey.setImageDrawable(Settings.getValues().mIncognitoModeEnabled ? mIncognitoIcon : mToolbarArrowIcon);
colors.setColor(mToolbarExpandKey, ColorType.TOOL_BAR_EXPAND_KEY);
colors.setColor(mToolbarExpandKey.getBackground(), ColorType.TOOL_BAR_EXPAND_KEY_BACKGROUND);
- for (final ToolbarKey pinnedKey : ToolbarUtilsKt.getPinnedToolbarKeys(prefs)) {
- final ImageButton button = createToolbarKey(context, iconsSet, pinnedKey);
- button.setLayoutParams(toolbarKeyLayoutParams);
- setupKey(button, colors);
- mPinnedKeys.addView(button);
- final View pinnedKeyInToolbar = mToolbar.findViewWithTag(pinnedKey);
- if (pinnedKeyInToolbar != null && Settings.getValues().mQuickPinToolbarKeys)
- pinnedKeyInToolbar.setBackground(mEnabledToolKeyBackground);
+ if (!Settings.getValues().mSuggestionStripHiddenPerUserSettings) {
+ for (final ToolbarKey pinnedKey : ToolbarUtilsKt.getPinnedToolbarKeys(prefs)) {
+ final ImageButton button = createToolbarKey(context, iconsSet, pinnedKey);
+ button.setLayoutParams(toolbarKeyLayoutParams);
+ setupKey(button, colors);
+ mPinnedKeys.addView(button);
+ final View pinnedKeyInToolbar = mToolbar.findViewWithTag(pinnedKey);
+ if (pinnedKeyInToolbar != null && Settings.getValues().mQuickPinToolbarKeys)
+ pinnedKeyInToolbar.setBackground(mEnabledToolKeyBackground);
+ }
}
colors.setBackground(this, ColorType.STRIP_BACKGROUND);
+ updateKeys();
}
@Override
@@ -248,7 +258,14 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
final View pinnedVoiceKey = mPinnedKeys.findViewWithTag(ToolbarKey.VOICE);
if (pinnedVoiceKey != null)
pinnedVoiceKey.setVisibility(currentSettingsValues.mShowsVoiceInputKey ? VISIBLE : GONE);
- mToolbarExpandKey.setImageDrawable(currentSettingsValues.mIncognitoModeEnabled ? mIncognitoIcon : mToolbarArrowIcon);
+ final boolean toolbarIsExpandable = mToolbarMode == ToolbarMode.EXPANDABLE;
+ if (currentSettingsValues.mIncognitoModeEnabled) {
+ mToolbarExpandKey.setImageDrawable(mIncognitoIcon);
+ mToolbarExpandKey.setVisibility(VISIBLE);
+ } else {
+ mToolbarExpandKey.setImageDrawable(mToolbarArrowIcon);
+ mToolbarExpandKey.setVisibility(toolbarIsExpandable ? VISIBLE : GONE);
+ }
mToolbarExpandKey.setScaleX((mToolbarContainer.getVisibility() != VISIBLE ? 1f : -1f) * mRtl);
// hide pinned keys if device is locked, and avoid expanding toolbar
@@ -256,7 +273,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
final boolean hideToolbarKeys = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1
? km.isDeviceLocked()
: km.isKeyguardLocked();
- mToolbarExpandKey.setOnClickListener(hideToolbarKeys ? null : this);
+ mToolbarExpandKey.setOnClickListener(hideToolbarKeys || !toolbarIsExpandable ? null : this);
mPinnedKeys.setVisibility(hideToolbarKeys ? GONE : mSuggestionsStrip.getVisibility());
isExternalSuggestionVisible = false;
}
@@ -275,7 +292,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
clear();
setRtl(isRtlLanguage);
- updateKeys();
mSuggestedWords = suggestedWords;
mStartIndexOfMoreSuggestions = mLayoutHelper.layoutAndReturnStartIndexOfMoreSuggestions(
getContext(), mSuggestedWords, mSuggestionsStrip, this);
diff --git a/app/src/main/java/helium314/keyboard/latin/utils/ResourceUtils.java b/app/src/main/java/helium314/keyboard/latin/utils/ResourceUtils.java
index 3ff53dadd..be44521d3 100644
--- a/app/src/main/java/helium314/keyboard/latin/utils/ResourceUtils.java
+++ b/app/src/main/java/helium314/keyboard/latin/utils/ResourceUtils.java
@@ -55,6 +55,15 @@ public final class ResourceUtils {
return windowBounds.width() - insets.left - insets.right;
}
+ public static int getSecondaryKeyboardHeight(final Resources res, final SettingsValues settingsValues) {
+ final int keyboardHeight = getKeyboardHeight(res, settingsValues);
+ if (settingsValues.mToolbarMode == ToolbarMode.HIDDEN && ! settingsValues.mToolbarHidingGlobal) {
+ // Small adjustment to match the height of the main keyboard which has a hidden strip container.
+ return keyboardHeight - (int) res.getDimension(R.dimen.config_suggestions_strip_height);
+ }
+ return keyboardHeight;
+ }
+
public static int getKeyboardHeight(final Resources res, final SettingsValues settingsValues) {
final int defaultKeyboardHeight = getDefaultKeyboardHeight(res, settingsValues.mShowsNumberRow);
// mKeyboardHeightScale Ranges from [.5,1.5], from xml/prefs_screen_appearance.xml
diff --git a/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt
index 1293d33a4..d2b2a742e 100644
--- a/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt
+++ b/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt
@@ -115,6 +115,10 @@ enum class ToolbarKey {
PAGE_UP, PAGE_DOWN, FULL_LEFT, FULL_RIGHT, PAGE_START, PAGE_END
}
+enum class ToolbarMode {
+ EXPANDABLE, TOOLBAR_KEYS, SUGGESTION_STRIP, HIDDEN,
+}
+
val toolbarKeyStrings = entries.associateWithTo(EnumMap(ToolbarKey::class.java)) { it.toString().lowercase(Locale.US) }
val defaultToolbarPref by lazy {
diff --git a/app/src/main/java/helium314/keyboard/settings/screens/ToolbarScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/ToolbarScreen.kt
index 192d6e661..191bf87a3 100644
--- a/app/src/main/java/helium314/keyboard/settings/screens/ToolbarScreen.kt
+++ b/app/src/main/java/helium314/keyboard/settings/screens/ToolbarScreen.kt
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
@@ -28,29 +29,47 @@ import helium314.keyboard.keyboard.internal.KeyboardIconsSet
import helium314.keyboard.latin.R
import helium314.keyboard.latin.settings.Defaults
import helium314.keyboard.latin.settings.Settings
-import helium314.keyboard.settings.Setting
-import helium314.keyboard.settings.preferences.Preference
-import helium314.keyboard.settings.preferences.ReorderSwitchPreference
+import helium314.keyboard.latin.utils.Log
+import helium314.keyboard.latin.utils.ToolbarMode
+import helium314.keyboard.latin.utils.getActivity
+import helium314.keyboard.latin.utils.getStringResourceOrName
+import helium314.keyboard.latin.utils.prefs
import helium314.keyboard.settings.SearchSettingsScreen
-import helium314.keyboard.settings.preferences.SwitchPreference
+import helium314.keyboard.settings.Setting
+import helium314.keyboard.settings.SettingsActivity
import helium314.keyboard.settings.Theme
import helium314.keyboard.settings.dialogs.ToolbarKeysCustomizer
import helium314.keyboard.settings.initPreview
+import helium314.keyboard.settings.preferences.ListPreference
+import helium314.keyboard.settings.preferences.Preference
+import helium314.keyboard.settings.preferences.ReorderSwitchPreference
+import helium314.keyboard.settings.preferences.SwitchPreference
import helium314.keyboard.settings.previewDark
@Composable
fun ToolbarScreen(
onClickBack: () -> Unit,
) {
+ val prefs = LocalContext.current.prefs()
+ val b = (LocalContext.current.getActivity() as? SettingsActivity)?.prefChanged?.collectAsState()
+ if ((b?.value ?: 0) < 0)
+ Log.v("irrelevant", "stupid way to trigger recomposition on preference change")
+ val toolbarMode = Settings.readToolbarMode(prefs)
val items = listOf(
- Settings.PREF_TOOLBAR_KEYS,
- Settings.PREF_PINNED_TOOLBAR_KEYS,
- Settings.PREF_CLIPBOARD_TOOLBAR_KEYS,
- Settings.PREF_TOOLBAR_CUSTOM_KEY_CODES,
- Settings.PREF_QUICK_PIN_TOOLBAR_KEYS,
- Settings.PREF_AUTO_SHOW_TOOLBAR,
- Settings.PREF_AUTO_HIDE_TOOLBAR,
- Settings.PREF_VARIABLE_TOOLBAR_DIRECTION
+ Settings.PREF_TOOLBAR_MODE,
+ if (toolbarMode == ToolbarMode.HIDDEN) Settings.PREF_TOOLBAR_HIDING_GLOBAL else null,
+ if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.TOOLBAR_KEYS))
+ Settings.PREF_TOOLBAR_KEYS else null,
+ if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.SUGGESTION_STRIP))
+ Settings.PREF_PINNED_TOOLBAR_KEYS else null,
+ if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.TOOLBAR_KEYS))
+ Settings.PREF_CLIPBOARD_TOOLBAR_KEYS else null,
+ if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.TOOLBAR_KEYS))
+ Settings.PREF_TOOLBAR_CUSTOM_KEY_CODES else null,
+ if (toolbarMode == ToolbarMode.EXPANDABLE) Settings.PREF_QUICK_PIN_TOOLBAR_KEYS else null,
+ if (toolbarMode == ToolbarMode.EXPANDABLE) Settings.PREF_AUTO_SHOW_TOOLBAR else null,
+ if (toolbarMode == ToolbarMode.EXPANDABLE) Settings.PREF_AUTO_HIDE_TOOLBAR else null,
+ if (toolbarMode != ToolbarMode.HIDDEN) Settings.PREF_VARIABLE_TOOLBAR_DIRECTION else null,
)
SearchSettingsScreen(
onClickBack = onClickBack,
@@ -60,6 +79,23 @@ fun ToolbarScreen(
}
fun createToolbarSettings(context: Context) = listOf(
+ Setting(context, Settings.PREF_TOOLBAR_MODE, R.string.toolbar_mode) { setting ->
+ val ctx = LocalContext.current
+ val items =
+ ToolbarMode.entries.map { it.name.lowercase().getStringResourceOrName("toolbar_mode_", ctx) to it.name }
+ ListPreference(
+ setting,
+ items,
+ Defaults.PREF_TOOLBAR_MODE
+ ) {
+ KeyboardSwitcher.getInstance().setThemeNeedsReload()
+ }
+ },
+ Setting(context, Settings.PREF_TOOLBAR_HIDING_GLOBAL, R.string.toolbar_hiding_global) {
+ SwitchPreference(it, Defaults.PREF_TOOLBAR_HIDING_GLOBAL) {
+ KeyboardSwitcher.getInstance().setThemeNeedsReload()
+ }
+ },
Setting(context, Settings.PREF_TOOLBAR_KEYS, R.string.toolbar_keys) {
ReorderSwitchPreference(it, Defaults.PREF_TOOLBAR_KEYS)
},
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6561c5ca4..76f2f3b0e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -284,6 +284,18 @@
Language (priority)
Layout
Symbols
+
+ Toolbar mode
+
+ Toolbar keys and suggestions
+
+ Toolbar keys only
+
+ Suggestions only
+
+ Hidden
+
+ Hide clipboard and emoji toolbars too
Select toolbar keys