mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-06 06:40:17 +00:00
Add toolbar modes (#1606)
This commit is contained in:
parent
38bbcd9a83
commit
ec2bbb461d
15 changed files with 191 additions and 61 deletions
|
@ -20,6 +20,7 @@ import android.view.View;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
import android.widget.HorizontalScrollView;
|
import android.widget.HorizontalScrollView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
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.RecapitalizeStatus;
|
||||||
import helium314.keyboard.latin.utils.ResourceUtils;
|
import helium314.keyboard.latin.utils.ResourceUtils;
|
||||||
import helium314.keyboard.latin.utils.ScriptUtils;
|
import helium314.keyboard.latin.utils.ScriptUtils;
|
||||||
import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
|
|
||||||
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional;
|
import helium314.keyboard.latin.utils.SubtypeUtilsAdditional;
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode;
|
||||||
|
|
||||||
public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
|
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
|
||||||
|
@ -64,6 +65,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
private LinearLayout mClipboardStripView;
|
private LinearLayout mClipboardStripView;
|
||||||
private HorizontalScrollView mClipboardStripScrollView;
|
private HorizontalScrollView mClipboardStripScrollView;
|
||||||
private SuggestionStripView mSuggestionStripView;
|
private SuggestionStripView mSuggestionStripView;
|
||||||
|
private FrameLayout mStripContainer;
|
||||||
private ClipboardHistoryView mClipboardHistoryView;
|
private ClipboardHistoryView mClipboardHistoryView;
|
||||||
private TextView mFakeToastView;
|
private TextView mFakeToastView;
|
||||||
private LatinIME mLatinIME;
|
private LatinIME mLatinIME;
|
||||||
|
@ -307,6 +309,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
@NonNull final SettingsValues settingsValues,
|
@NonNull final SettingsValues settingsValues,
|
||||||
@NonNull final KeyboardSwitchState toggleState) {
|
@NonNull final KeyboardSwitchState toggleState) {
|
||||||
final int visibility = isImeSuppressedByHardwareKeyboard(settingsValues, toggleState) ? View.GONE : View.VISIBLE;
|
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);
|
PointerTracker.switchTo(mKeyboardView);
|
||||||
mKeyboardView.setVisibility(visibility);
|
mKeyboardView.setVisibility(visibility);
|
||||||
// The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}.
|
// The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}.
|
||||||
|
@ -317,7 +321,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
mEmojiPalettesView.stopEmojiPalettes();
|
mEmojiPalettesView.stopEmojiPalettes();
|
||||||
mEmojiTabStripView.setVisibility(View.GONE);
|
mEmojiTabStripView.setVisibility(View.GONE);
|
||||||
mClipboardStripScrollView.setVisibility(View.GONE);
|
mClipboardStripScrollView.setVisibility(View.GONE);
|
||||||
mSuggestionStripView.setVisibility(View.VISIBLE);
|
mSuggestionStripView.setVisibility(stripVisibility);
|
||||||
mClipboardHistoryView.setVisibility(View.GONE);
|
mClipboardHistoryView.setVisibility(View.GONE);
|
||||||
mClipboardHistoryView.stopClipboardHistory();
|
mClipboardHistoryView.stopClipboardHistory();
|
||||||
}
|
}
|
||||||
|
@ -334,6 +338,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
// @see LatinIME#onComputeInset(android.inputmethodservice.InputMethodService.Insets)
|
// @see LatinIME#onComputeInset(android.inputmethodservice.InputMethodService.Insets)
|
||||||
mKeyboardView.setVisibility(View.GONE);
|
mKeyboardView.setVisibility(View.GONE);
|
||||||
mSuggestionStripView.setVisibility(View.GONE);
|
mSuggestionStripView.setVisibility(View.GONE);
|
||||||
|
mStripContainer.setVisibility(getSecondaryStripVisibility());
|
||||||
mClipboardStripScrollView.setVisibility(View.GONE);
|
mClipboardStripScrollView.setVisibility(View.GONE);
|
||||||
mEmojiTabStripView.setVisibility(View.VISIBLE);
|
mEmojiTabStripView.setVisibility(View.VISIBLE);
|
||||||
mClipboardHistoryView.setVisibility(View.GONE);
|
mClipboardHistoryView.setVisibility(View.GONE);
|
||||||
|
@ -355,6 +360,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
mKeyboardView.setVisibility(View.GONE);
|
mKeyboardView.setVisibility(View.GONE);
|
||||||
mEmojiTabStripView.setVisibility(View.GONE);
|
mEmojiTabStripView.setVisibility(View.GONE);
|
||||||
mSuggestionStripView.setVisibility(View.GONE);
|
mSuggestionStripView.setVisibility(View.GONE);
|
||||||
|
mStripContainer.setVisibility(getSecondaryStripVisibility());
|
||||||
mClipboardStripScrollView.post(() -> mClipboardStripScrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT));
|
mClipboardStripScrollView.post(() -> mClipboardStripScrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT));
|
||||||
mClipboardStripScrollView.setVisibility(View.VISIBLE);
|
mClipboardStripScrollView.setVisibility(View.VISIBLE);
|
||||||
mEmojiPalettesView.setVisibility(View.GONE);
|
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.
|
// Displays a toast-like message with the provided text for a specified duration.
|
||||||
private void showFakeToast(final String text, final int timeMillis) {
|
private void showFakeToast(final String text, final int timeMillis) {
|
||||||
if (mFakeToastView.getVisibility() == View.VISIBLE) return;
|
if (mFakeToastView.getVisibility() == View.VISIBLE) return;
|
||||||
|
@ -606,6 +616,10 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
return mKeyboardView.isShowingPopupKeysPanel();
|
return mKeyboardView.isShowingPopupKeysPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isShowingStripContainer() {
|
||||||
|
return mStripContainer.isShown();
|
||||||
|
}
|
||||||
|
|
||||||
public View getVisibleKeyboardView() {
|
public View getVisibleKeyboardView() {
|
||||||
if (isShowingEmojiPalettes()) {
|
if (isShowingEmojiPalettes()) {
|
||||||
return mEmojiPalettesView;
|
return mEmojiPalettesView;
|
||||||
|
@ -631,6 +645,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
return mKeyboardView;
|
return mKeyboardView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FrameLayout getStripContainer() { return mStripContainer; }
|
||||||
|
|
||||||
public void deallocateMemory() {
|
public void deallocateMemory() {
|
||||||
if (mKeyboardView != null) {
|
if (mKeyboardView != null) {
|
||||||
mKeyboardView.cancelAllOngoingEvents();
|
mKeyboardView.cancelAllOngoingEvents();
|
||||||
|
@ -684,6 +700,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
mClipboardStripView = mCurrentInputView.findViewById(R.id.clipboard_strip);
|
mClipboardStripView = mCurrentInputView.findViewById(R.id.clipboard_strip);
|
||||||
mClipboardStripScrollView = mCurrentInputView.findViewById(R.id.clipboard_strip_scroll_view);
|
mClipboardStripScrollView = mCurrentInputView.findViewById(R.id.clipboard_strip_scroll_view);
|
||||||
mSuggestionStripView = mCurrentInputView.findViewById(R.id.suggestion_strip_view);
|
mSuggestionStripView = mCurrentInputView.findViewById(R.id.suggestion_strip_view);
|
||||||
|
mStripContainer = mCurrentInputView.findViewById(R.id.strip_container);
|
||||||
|
|
||||||
prefs.registerOnSharedPreferenceChangeListener(mSuggestionStripView);
|
prefs.registerOnSharedPreferenceChangeListener(mSuggestionStripView);
|
||||||
prefs.registerOnSharedPreferenceChangeListener(mClipboardHistoryView);
|
prefs.registerOnSharedPreferenceChangeListener(mClipboardHistoryView);
|
||||||
|
|
|
@ -30,6 +30,7 @@ import helium314.keyboard.latin.common.Constants
|
||||||
import helium314.keyboard.latin.settings.Settings
|
import helium314.keyboard.latin.settings.Settings
|
||||||
import helium314.keyboard.latin.utils.ResourceUtils
|
import helium314.keyboard.latin.utils.ResourceUtils
|
||||||
import helium314.keyboard.latin.utils.ToolbarKey
|
import helium314.keyboard.latin.utils.ToolbarKey
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode
|
||||||
import helium314.keyboard.latin.utils.createToolbarKey
|
import helium314.keyboard.latin.utils.createToolbarKey
|
||||||
import helium314.keyboard.latin.utils.getCodeForToolbarKey
|
import helium314.keyboard.latin.utils.getCodeForToolbarKey
|
||||||
import helium314.keyboard.latin.utils.getCodeForToolbarKeyLongClick
|
import helium314.keyboard.latin.utils.getCodeForToolbarKeyLongClick
|
||||||
|
@ -68,8 +69,10 @@ class ClipboardHistoryView @JvmOverloads constructor(
|
||||||
keyBackgroundId = keyboardViewAttr.getResourceId(R.styleable.KeyboardView_keyBackground, 0)
|
keyBackgroundId = keyboardViewAttr.getResourceId(R.styleable.KeyboardView_keyBackground, 0)
|
||||||
keyboardViewAttr.recycle()
|
keyboardViewAttr.recycle()
|
||||||
val keyboardAttr = context.obtainStyledAttributes(attrs, R.styleable.Keyboard, defStyle, R.style.SuggestionStripView)
|
val keyboardAttr = context.obtainStyledAttributes(attrs, R.styleable.Keyboard, defStyle, R.style.SuggestionStripView)
|
||||||
getEnabledClipboardToolbarKeys(context.prefs())
|
if (Settings.getValues().mSecondaryStripVisible) {
|
||||||
.forEach { toolbarKeys.add(createToolbarKey(context, KeyboardIconsSet.instance, it)) }
|
getEnabledClipboardToolbarKeys(context.prefs())
|
||||||
|
.forEach { toolbarKeys.add(createToolbarKey(context, KeyboardIconsSet.instance, it)) }
|
||||||
|
}
|
||||||
keyboardAttr.recycle()
|
keyboardAttr.recycle()
|
||||||
fitsSystemWindows = true
|
fitsSystemWindows = true
|
||||||
}
|
}
|
||||||
|
@ -79,7 +82,7 @@ class ClipboardHistoryView @JvmOverloads constructor(
|
||||||
val res = context.resources
|
val res = context.resources
|
||||||
// The main keyboard expands to the entire this {@link KeyboardView}.
|
// The main keyboard expands to the entire this {@link KeyboardView}.
|
||||||
val width = ResourceUtils.getKeyboardWidth(context, Settings.getValues()) + paddingLeft + paddingRight
|
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)
|
setMeasuredDimension(width, height)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
package helium314.keyboard.keyboard.clipboard
|
package helium314.keyboard.keyboard.clipboard
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -22,7 +21,7 @@ class ClipboardLayoutParams(ctx: Context) {
|
||||||
init {
|
init {
|
||||||
val res = ctx.resources
|
val res = ctx.resources
|
||||||
val sv = Settings.getValues()
|
val sv = Settings.getValues()
|
||||||
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
|
val defaultKeyboardHeight = ResourceUtils.getSecondaryKeyboardHeight(res, sv)
|
||||||
val defaultKeyboardWidth = ResourceUtils.getKeyboardWidth(ctx, sv)
|
val defaultKeyboardWidth = ResourceUtils.getKeyboardWidth(ctx, sv)
|
||||||
|
|
||||||
if (sv.mNarrowKeyGaps) {
|
if (sv.mNarrowKeyGaps) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ internal class EmojiLayoutParams(res: Resources) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val sv = Settings.getValues()
|
val sv = Settings.getValues()
|
||||||
val defaultKeyboardHeight = ResourceUtils.getKeyboardHeight(res, sv)
|
val defaultKeyboardHeight = ResourceUtils.getSecondaryKeyboardHeight(res, sv)
|
||||||
|
|
||||||
val keyVerticalGap = if (sv.mNarrowKeyGaps) {
|
val keyVerticalGap = if (sv.mNarrowKeyGaps) {
|
||||||
res.getFraction(R.fraction.config_key_vertical_gap_holo_narrow,
|
res.getFraction(R.fraction.config_key_vertical_gap_holo_narrow,
|
||||||
|
|
|
@ -219,7 +219,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
// The main keyboard expands to the entire this {@link KeyboardView}.
|
// The main keyboard expands to the entire this {@link KeyboardView}.
|
||||||
final int width = ResourceUtils.getKeyboardWidth(getContext(), Settings.getValues())
|
final int width = ResourceUtils.getKeyboardWidth(getContext(), Settings.getValues())
|
||||||
+ getPaddingLeft() + getPaddingRight();
|
+ getPaddingLeft() + getPaddingRight();
|
||||||
final int height = ResourceUtils.getKeyboardHeight(res, Settings.getValues())
|
final int height = ResourceUtils.getSecondaryKeyboardHeight(res, Settings.getValues())
|
||||||
+ getPaddingTop() + getPaddingBottom();
|
+ getPaddingTop() + getPaddingBottom();
|
||||||
mEmojiCategoryPageIndicatorView.mWidth = width;
|
mEmojiCategoryPageIndicatorView.mWidth = width;
|
||||||
setMeasuredDimension(width, height);
|
setMeasuredDimension(width, height);
|
||||||
|
@ -243,8 +243,10 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
if (initialized) return;
|
if (initialized) return;
|
||||||
mEmojiCategory.initialize();
|
mEmojiCategory.initialize();
|
||||||
mTabStrip = (LinearLayout) KeyboardSwitcher.getInstance().getEmojiTabStrip();
|
mTabStrip = (LinearLayout) KeyboardSwitcher.getInstance().getEmojiTabStrip();
|
||||||
for (final EmojiCategory.CategoryProperties properties : mEmojiCategory.getShownCategories()) {
|
if (Settings.getValues().mSecondaryStripVisible) {
|
||||||
addTab(mTabStrip, properties.mCategoryId);
|
for (final EmojiCategory.CategoryProperties properties : mEmojiCategory.getShownCategories()) {
|
||||||
|
addTab(mTabStrip, properties.mCategoryId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mPager = findViewById(R.id.emoji_pager);
|
mPager = findViewById(R.id.emoji_pager);
|
||||||
|
@ -404,13 +406,15 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
mEmojiCategory.getCurrentCategoryId()), ! initial);
|
mEmojiCategory.getCurrentCategoryId()), ! initial);
|
||||||
}
|
}
|
||||||
|
|
||||||
final View old = mTabStrip.findViewWithTag((long) oldCategoryId);
|
if (Settings.getValues().mSecondaryStripVisible) {
|
||||||
final View current = mTabStrip.findViewWithTag((long) categoryId);
|
final View old = mTabStrip.findViewWithTag((long) oldCategoryId);
|
||||||
|
final View current = mTabStrip.findViewWithTag((long) categoryId);
|
||||||
|
|
||||||
if (old instanceof ImageView)
|
if (old instanceof ImageView)
|
||||||
Settings.getValues().mColors.setColor((ImageView) old, ColorType.EMOJI_CATEGORY);
|
Settings.getValues().mColors.setColor((ImageView) old, ColorType.EMOJI_CATEGORY);
|
||||||
if (current instanceof ImageView)
|
if (current instanceof ImageView)
|
||||||
Settings.getValues().mColors.setColor((ImageView) current, ColorType.EMOJI_CATEGORY_SELECTED);
|
Settings.getValues().mColors.setColor((ImageView) current, ColorType.EMOJI_CATEGORY_SELECTED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte
|
||||||
var keyWidth = defaultKeyWidth * sqrt(Settings.getValues().mKeyboardHeightScale)
|
var keyWidth = defaultKeyWidth * sqrt(Settings.getValues().mKeyboardHeightScale)
|
||||||
val defaultKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false)
|
val defaultKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false)
|
||||||
val defaultBottomPadding = context.resources.getFraction(R.fraction.config_keyboard_bottom_padding_holo, defaultKeyboardHeight, defaultKeyboardHeight)
|
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
|
var keyHeight = emojiKeyboardHeight * params.mDefaultRowHeight * Settings.getValues().mKeyboardHeightScale // still apply height scale to key
|
||||||
|
|
||||||
if (Settings.getValues().mEmojiKeyFit) {
|
if (Settings.getValues().mEmojiKeyFit) {
|
||||||
|
|
|
@ -87,6 +87,7 @@ import helium314.keyboard.latin.utils.StatsUtils;
|
||||||
import helium314.keyboard.latin.utils.StatsUtilsManager;
|
import helium314.keyboard.latin.utils.StatsUtilsManager;
|
||||||
import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
|
import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
|
||||||
import helium314.keyboard.latin.utils.SubtypeSettings;
|
import helium314.keyboard.latin.utils.SubtypeSettings;
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode;
|
||||||
import helium314.keyboard.latin.utils.ViewLayoutUtils;
|
import helium314.keyboard.latin.utils.ViewLayoutUtils;
|
||||||
import helium314.keyboard.settings.SettingsActivity;
|
import helium314.keyboard.settings.SettingsActivity;
|
||||||
import kotlin.collections.CollectionsKt;
|
import kotlin.collections.CollectionsKt;
|
||||||
|
@ -879,7 +880,8 @@ public class LatinIME extends InputMethodService implements
|
||||||
mInputView = view;
|
mInputView = view;
|
||||||
mInsetsUpdater = ViewOutlineProviderUtilsKt.setInsetsOutlineProvider(view);
|
mInsetsUpdater = ViewOutlineProviderUtilsKt.setInsetsOutlineProvider(view);
|
||||||
updateSoftInputWindowLayoutParameters();
|
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()) {
|
if (hasSuggestionStripView()) {
|
||||||
mSuggestionStripView.setListener(this, view);
|
mSuggestionStripView.setListener(this, view);
|
||||||
}
|
}
|
||||||
|
@ -931,8 +933,9 @@ public class LatinIME extends InputMethodService implements
|
||||||
mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype),
|
mInputLogic.onSubtypeChanged(SubtypeLocaleUtils.getCombiningRulesExtraValue(subtype),
|
||||||
mSettings.getCurrent());
|
mSettings.getCurrent());
|
||||||
loadKeyboard();
|
loadKeyboard();
|
||||||
if (mSuggestionStripView != null)
|
if (hasSuggestionStripView()) {
|
||||||
mSuggestionStripView.setRtl(mRichImm.getCurrentSubtype().isRtlSubtype());
|
mSuggestionStripView.setRtl(mRichImm.getCurrentSubtype().isRtlSubtype());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** alias to onCurrentInputMethodSubtypeChanged with a better name, as it's also used for internal switching */
|
/** 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
|
@Override
|
||||||
public void hideWindow() {
|
public void hideWindow() {
|
||||||
if (mSuggestionStripView != null)
|
if (hasSuggestionStripView() && mSettings.getCurrent().mToolbarMode == ToolbarMode.EXPANDABLE)
|
||||||
mSuggestionStripView.setToolbarVisibility(false);
|
mSuggestionStripView.setToolbarVisibility(false);
|
||||||
mKeyboardSwitcher.onHideWindow();
|
mKeyboardSwitcher.onHideWindow();
|
||||||
|
|
||||||
|
@ -1271,7 +1274,7 @@ public class LatinIME extends InputMethodService implements
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final View visibleKeyboardView = mKeyboardSwitcher.getWrapperView();
|
final View visibleKeyboardView = mKeyboardSwitcher.getWrapperView();
|
||||||
if (visibleKeyboardView == null || !hasSuggestionStripView()) {
|
if (visibleKeyboardView == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int inputHeight = mInputView.getHeight();
|
final int inputHeight = mInputView.getHeight();
|
||||||
|
@ -1283,8 +1286,13 @@ public class LatinIME extends InputMethodService implements
|
||||||
mInsetsUpdater.setInsets(outInsets);
|
mInsetsUpdater.setInsets(outInsets);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int visibleTopY = inputHeight - visibleKeyboardView.getHeight() - mSuggestionStripView.getHeight();
|
final int stripHeight = mKeyboardSwitcher.isShowingStripContainer() ? mKeyboardSwitcher.getStripContainer().getHeight() : 0;
|
||||||
mSuggestionStripView.setMoreSuggestionsHeight(visibleTopY);
|
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.
|
// Need to set expanded touchable region only if a keyboard view is being shown.
|
||||||
if (visibleKeyboardView.isShown()) {
|
if (visibleKeyboardView.isShown()) {
|
||||||
final int touchLeft = 0;
|
final int touchLeft = 0;
|
||||||
|
@ -1368,6 +1376,10 @@ public class LatinIME extends InputMethodService implements
|
||||||
@RequiresApi(api = Build.VERSION_CODES.R)
|
@RequiresApi(api = Build.VERSION_CODES.R)
|
||||||
public InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull Bundle uiExtras) {
|
public InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull Bundle uiExtras) {
|
||||||
Log.d(TAG,"onCreateInlineSuggestionsRequest called");
|
Log.d(TAG,"onCreateInlineSuggestionsRequest called");
|
||||||
|
if (Settings.getValues().mSuggestionStripHiddenPerUserSettings) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return InlineAutofillUtils.createInlineSuggestionRequest(mDisplayContext);
|
return InlineAutofillUtils.createInlineSuggestionRequest(mDisplayContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1629,7 +1641,7 @@ public class LatinIME extends InputMethodService implements
|
||||||
dismissGestureFloatingPreviewText /* dismissDelayed */);
|
dismissGestureFloatingPreviewText /* dismissDelayed */);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasSuggestionStripView() {
|
private boolean hasSuggestionStripView() {
|
||||||
return null != mSuggestionStripView;
|
return null != mSuggestionStripView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,8 @@ object Defaults {
|
||||||
const val PREF_SELECTED_SUBTYPE = ""
|
const val PREF_SELECTED_SUBTYPE = ""
|
||||||
const val PREF_URL_DETECTION = false
|
const val PREF_URL_DETECTION = false
|
||||||
const val PREF_DONT_SHOW_MISSING_DICTIONARY_DIALOG = 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
|
const val PREF_QUICK_PIN_TOOLBAR_KEYS = false
|
||||||
val PREF_PINNED_TOOLBAR_KEYS = defaultPinnedToolbarPref
|
val PREF_PINNED_TOOLBAR_KEYS = defaultPinnedToolbarPref
|
||||||
val PREF_TOOLBAR_KEYS = defaultToolbarPref
|
val PREF_TOOLBAR_KEYS = defaultToolbarPref
|
||||||
|
|
|
@ -37,6 +37,7 @@ import helium314.keyboard.latin.utils.StatsUtils;
|
||||||
import helium314.keyboard.latin.utils.SubtypeSettings;
|
import helium314.keyboard.latin.utils.SubtypeSettings;
|
||||||
import helium314.keyboard.latin.utils.ToolbarKey;
|
import helium314.keyboard.latin.utils.ToolbarKey;
|
||||||
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
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_REMOVE_REDUNDANT_POPUPS = "remove_redundant_popups";
|
||||||
public static final String PREF_SPACE_BAR_TEXT = "space_bar_text";
|
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_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
|
// Emoji
|
||||||
public static final String PREF_EMOJI_MAX_SDK = "emoji_max_sdk";
|
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();
|
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) {
|
public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) {
|
||||||
return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) {
|
return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, Defaults.PREF_SPACE_HORIZONTAL_SWIPE)) {
|
||||||
case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR;
|
case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR;
|
||||||
|
|
|
@ -31,6 +31,7 @@ import helium314.keyboard.latin.utils.JniUtils;
|
||||||
import helium314.keyboard.latin.utils.ScriptUtils;
|
import helium314.keyboard.latin.utils.ScriptUtils;
|
||||||
import helium314.keyboard.latin.utils.SubtypeSettings;
|
import helium314.keyboard.latin.utils.SubtypeSettings;
|
||||||
import helium314.keyboard.latin.utils.SubtypeUtilsKt;
|
import helium314.keyboard.latin.utils.SubtypeUtilsKt;
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -114,6 +115,8 @@ public class SettingsValues {
|
||||||
public final boolean mUrlDetectionEnabled;
|
public final boolean mUrlDetectionEnabled;
|
||||||
public final float mBottomPaddingScale;
|
public final float mBottomPaddingScale;
|
||||||
public final float mSidePaddingScale;
|
public final float mSidePaddingScale;
|
||||||
|
public final ToolbarMode mToolbarMode;
|
||||||
|
public final boolean mToolbarHidingGlobal;
|
||||||
public final boolean mAutoShowToolbar;
|
public final boolean mAutoShowToolbar;
|
||||||
public final boolean mAutoHideToolbar;
|
public final boolean mAutoHideToolbar;
|
||||||
public final boolean mAlphaAfterEmojiInEmojiView;
|
public final boolean mAlphaAfterEmojiInEmojiView;
|
||||||
|
@ -131,6 +134,8 @@ public class SettingsValues {
|
||||||
public final InputAttributes mInputAttributes;
|
public final InputAttributes mInputAttributes;
|
||||||
|
|
||||||
// Deduced settings
|
// Deduced settings
|
||||||
|
public final boolean mSuggestionStripHiddenPerUserSettings;
|
||||||
|
public final boolean mSecondaryStripVisible;
|
||||||
public final int mKeypressVibrationDuration;
|
public final int mKeypressVibrationDuration;
|
||||||
public final float mKeypressSoundVolume;
|
public final float mKeypressSoundVolume;
|
||||||
public final boolean mAutoCorrectionEnabledPerUserSettings;
|
public final boolean mAutoCorrectionEnabledPerUserSettings;
|
||||||
|
@ -160,6 +165,8 @@ public class SettingsValues {
|
||||||
mInputAttributes = inputAttributes;
|
mInputAttributes = inputAttributes;
|
||||||
|
|
||||||
// Get the settings preferences
|
// 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);
|
mAutoCap = prefs.getBoolean(Settings.PREF_AUTO_CAP, Defaults.PREF_AUTO_CAP) && ScriptUtils.scriptSupportsUppercase(mLocale);
|
||||||
mVibrateOn = Settings.readVibrationEnabled(prefs);
|
mVibrateOn = Settings.readVibrationEnabled(prefs);
|
||||||
mVibrateInDndMode = prefs.getBoolean(Settings.PREF_VIBRATE_IN_DND_MODE, Defaults.PREF_VIBRATE_IN_DND_MODE);
|
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);
|
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);
|
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);
|
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);
|
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)
|
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, Defaults.PREF_KEY_USE_DOUBLE_SPACE_PERIOD)
|
||||||
&& inputAttributes.mIsGeneralTextInput;
|
&& inputAttributes.mIsGeneralTextInput;
|
||||||
|
@ -209,7 +216,7 @@ public class SettingsValues {
|
||||||
mSplitKeyboardSpacerRelativeWidth = mIsSplitKeyboardEnabled
|
mSplitKeyboardSpacerRelativeWidth = mIsSplitKeyboardEnabled
|
||||||
? Math.min(Math.max((displayWidthDp - 600) / 600f + 0.15f, 0.15f), 0.35f) * Settings.readSplitSpacerScale(prefs, isLandscape)
|
? Math.min(Math.max((displayWidthDp - 600) / 600f + 0.15f, 0.15f), 0.35f) * Settings.readSplitSpacerScale(prefs, isLandscape)
|
||||||
: 0f;
|
: 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);
|
mScreenMetrics = Settings.readScreenMetrics(res);
|
||||||
|
|
||||||
// Compute other readable settings
|
// Compute other readable settings
|
||||||
|
@ -224,13 +231,15 @@ public class SettingsValues {
|
||||||
mGestureFloatingPreviewDynamicEnabled = Settings.readGestureDynamicPreviewEnabled(prefs);
|
mGestureFloatingPreviewDynamicEnabled = Settings.readGestureDynamicPreviewEnabled(prefs);
|
||||||
mGestureFastTypingCooldown = prefs.getInt(Settings.PREF_GESTURE_FAST_TYPING_COOLDOWN, Defaults.PREF_GESTURE_FAST_TYPING_COOLDOWN);
|
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);
|
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
|
mOverrideShowingSuggestions = mInputAttributes.mMayOverrideShowingSuggestions
|
||||||
&& prefs.getBoolean(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS, Defaults.PREF_ALWAYS_SHOW_SUGGESTIONS)
|
&& 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
|
&& ((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));
|
|| !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);
|
final boolean suggestionsEnabled = prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, Defaults.PREF_SHOW_SUGGESTIONS);
|
||||||
mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && suggestionsEnabled)
|
mSuggestionsEnabledPerUserSettings = ((mInputAttributes.mShouldShowSuggestions && suggestionsEnabled)
|
||||||
|| mOverrideShowingSuggestions;
|
|| mOverrideShowingSuggestions) && !mSuggestionStripHiddenPerUserSettings;
|
||||||
|
mSecondaryStripVisible = mToolbarMode != ToolbarMode.HIDDEN || ! mToolbarHidingGlobal;
|
||||||
mIncognitoModeEnabled = prefs.getBoolean(Settings.PREF_ALWAYS_INCOGNITO_MODE, Defaults.PREF_ALWAYS_INCOGNITO_MODE) || mInputAttributes.mNoLearning
|
mIncognitoModeEnabled = prefs.getBoolean(Settings.PREF_ALWAYS_INCOGNITO_MODE, Defaults.PREF_ALWAYS_INCOGNITO_MODE) || mInputAttributes.mNoLearning
|
||||||
|| mInputAttributes.mIsPasswordField;
|
|| mInputAttributes.mIsPasswordField;
|
||||||
mKeyboardHeightScale = prefs.getFloat(Settings.PREF_KEYBOARD_HEIGHT_SCALE, Defaults.PREF_KEYBOARD_HEIGHT_SCALE);
|
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);
|
mBottomPaddingScale = Settings.readBottomPaddingScale(prefs, isLandscape);
|
||||||
mSidePaddingScale = Settings.readSidePaddingScale(prefs, isLandscape);
|
mSidePaddingScale = Settings.readSidePaddingScale(prefs, isLandscape);
|
||||||
mLongPressSymbolsForNumpad = prefs.getBoolean(Settings.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD, Defaults.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD);
|
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);
|
mAutoShowToolbar = mToolbarMode == ToolbarMode.EXPANDABLE && 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);
|
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);
|
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);
|
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);
|
mAlphaAfterSymbolAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_SYMBOL_SPACE, Defaults.PREF_ABC_AFTER_SYMBOL_SPACE);
|
||||||
|
|
|
@ -59,6 +59,7 @@ import helium314.keyboard.latin.suggestions.PopupSuggestionsView.MoreSuggestions
|
||||||
import helium314.keyboard.latin.utils.KtxKt;
|
import helium314.keyboard.latin.utils.KtxKt;
|
||||||
import helium314.keyboard.latin.utils.Log;
|
import helium314.keyboard.latin.utils.Log;
|
||||||
import helium314.keyboard.latin.utils.ToolbarKey;
|
import helium314.keyboard.latin.utils.ToolbarKey;
|
||||||
|
import helium314.keyboard.latin.utils.ToolbarMode;
|
||||||
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -107,6 +108,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
private final SuggestionStripLayoutHelper mLayoutHelper;
|
private final SuggestionStripLayoutHelper mLayoutHelper;
|
||||||
private final StripVisibilityGroup mStripVisibilityGroup;
|
private final StripVisibilityGroup mStripVisibilityGroup;
|
||||||
private boolean isExternalSuggestionVisible = false; // Required to disable the more suggestions if other suggestions are visible
|
private boolean isExternalSuggestionVisible = false; // Required to disable the more suggestions if other suggestions are visible
|
||||||
|
private final ToolbarMode mToolbarMode;
|
||||||
|
|
||||||
private static class StripVisibilityGroup {
|
private static class StripVisibilityGroup {
|
||||||
private final View mSuggestionStripView;
|
private final View mSuggestionStripView;
|
||||||
|
@ -153,6 +155,11 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
mPinnedKeys = findViewById(R.id.pinned_keys);
|
mPinnedKeys = findViewById(R.id.pinned_keys);
|
||||||
mToolbar = findViewById(R.id.toolbar);
|
mToolbar = findViewById(R.id.toolbar);
|
||||||
mToolbarContainer = findViewById(R.id.toolbar_container);
|
mToolbarContainer = findViewById(R.id.toolbar_container);
|
||||||
|
mToolbarMode = Settings.getValues().mToolbarMode;
|
||||||
|
|
||||||
|
if (mToolbarMode == ToolbarMode.TOOLBAR_KEYS) {
|
||||||
|
setToolbarVisibility(true);
|
||||||
|
}
|
||||||
|
|
||||||
final Typeface customTypeface = Settings.getInstance().getCustomTypeface();
|
final Typeface customTypeface = Settings.getInstance().getCustomTypeface();
|
||||||
for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) {
|
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),
|
getResources().getDimensionPixelSize(R.dimen.config_suggestions_strip_edge_key_width),
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT
|
LinearLayout.LayoutParams.MATCH_PARENT
|
||||||
);
|
);
|
||||||
for (final ToolbarKey key : ToolbarUtilsKt.getEnabledToolbarKeys(prefs)) {
|
if (mToolbarMode == ToolbarMode.TOOLBAR_KEYS || mToolbarMode == ToolbarMode.EXPANDABLE) {
|
||||||
final ImageButton button = createToolbarKey(context, iconsSet, key);
|
for (final ToolbarKey key : ToolbarUtilsKt.getEnabledToolbarKeys(prefs)) {
|
||||||
button.setLayoutParams(toolbarKeyLayoutParams);
|
final ImageButton button = createToolbarKey(context, iconsSet, key);
|
||||||
setupKey(button, colors);
|
button.setLayoutParams(toolbarKeyLayoutParams);
|
||||||
mToolbar.addView(button);
|
setupKey(button, colors);
|
||||||
|
mToolbar.addView(button);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final int toolbarHeight = Math.min(mToolbarExpandKey.getLayoutParams().height, (int) getResources().getDimension(R.dimen.config_suggestions_strip_height));
|
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.setGradientType(GradientDrawable.RADIAL_GRADIENT);
|
||||||
mEnabledToolKeyBackground.setGradientRadius(mToolbarExpandKey.getLayoutParams().height / 2f); // nothing else has a usable height at this state
|
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, ColorType.TOOL_BAR_EXPAND_KEY);
|
||||||
colors.setColor(mToolbarExpandKey.getBackground(), ColorType.TOOL_BAR_EXPAND_KEY_BACKGROUND);
|
colors.setColor(mToolbarExpandKey.getBackground(), ColorType.TOOL_BAR_EXPAND_KEY_BACKGROUND);
|
||||||
|
|
||||||
for (final ToolbarKey pinnedKey : ToolbarUtilsKt.getPinnedToolbarKeys(prefs)) {
|
if (!Settings.getValues().mSuggestionStripHiddenPerUserSettings) {
|
||||||
final ImageButton button = createToolbarKey(context, iconsSet, pinnedKey);
|
for (final ToolbarKey pinnedKey : ToolbarUtilsKt.getPinnedToolbarKeys(prefs)) {
|
||||||
button.setLayoutParams(toolbarKeyLayoutParams);
|
final ImageButton button = createToolbarKey(context, iconsSet, pinnedKey);
|
||||||
setupKey(button, colors);
|
button.setLayoutParams(toolbarKeyLayoutParams);
|
||||||
mPinnedKeys.addView(button);
|
setupKey(button, colors);
|
||||||
final View pinnedKeyInToolbar = mToolbar.findViewWithTag(pinnedKey);
|
mPinnedKeys.addView(button);
|
||||||
if (pinnedKeyInToolbar != null && Settings.getValues().mQuickPinToolbarKeys)
|
final View pinnedKeyInToolbar = mToolbar.findViewWithTag(pinnedKey);
|
||||||
pinnedKeyInToolbar.setBackground(mEnabledToolKeyBackground);
|
if (pinnedKeyInToolbar != null && Settings.getValues().mQuickPinToolbarKeys)
|
||||||
|
pinnedKeyInToolbar.setBackground(mEnabledToolKeyBackground);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
colors.setBackground(this, ColorType.STRIP_BACKGROUND);
|
colors.setBackground(this, ColorType.STRIP_BACKGROUND);
|
||||||
|
updateKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -248,7 +258,14 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
final View pinnedVoiceKey = mPinnedKeys.findViewWithTag(ToolbarKey.VOICE);
|
final View pinnedVoiceKey = mPinnedKeys.findViewWithTag(ToolbarKey.VOICE);
|
||||||
if (pinnedVoiceKey != null)
|
if (pinnedVoiceKey != null)
|
||||||
pinnedVoiceKey.setVisibility(currentSettingsValues.mShowsVoiceInputKey ? VISIBLE : GONE);
|
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);
|
mToolbarExpandKey.setScaleX((mToolbarContainer.getVisibility() != VISIBLE ? 1f : -1f) * mRtl);
|
||||||
|
|
||||||
// hide pinned keys if device is locked, and avoid expanding toolbar
|
// 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
|
final boolean hideToolbarKeys = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1
|
||||||
? km.isDeviceLocked()
|
? km.isDeviceLocked()
|
||||||
: km.isKeyguardLocked();
|
: km.isKeyguardLocked();
|
||||||
mToolbarExpandKey.setOnClickListener(hideToolbarKeys ? null : this);
|
mToolbarExpandKey.setOnClickListener(hideToolbarKeys || !toolbarIsExpandable ? null : this);
|
||||||
mPinnedKeys.setVisibility(hideToolbarKeys ? GONE : mSuggestionsStrip.getVisibility());
|
mPinnedKeys.setVisibility(hideToolbarKeys ? GONE : mSuggestionsStrip.getVisibility());
|
||||||
isExternalSuggestionVisible = false;
|
isExternalSuggestionVisible = false;
|
||||||
}
|
}
|
||||||
|
@ -275,7 +292,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
|
||||||
public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
|
public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
|
||||||
clear();
|
clear();
|
||||||
setRtl(isRtlLanguage);
|
setRtl(isRtlLanguage);
|
||||||
updateKeys();
|
|
||||||
mSuggestedWords = suggestedWords;
|
mSuggestedWords = suggestedWords;
|
||||||
mStartIndexOfMoreSuggestions = mLayoutHelper.layoutAndReturnStartIndexOfMoreSuggestions(
|
mStartIndexOfMoreSuggestions = mLayoutHelper.layoutAndReturnStartIndexOfMoreSuggestions(
|
||||||
getContext(), mSuggestedWords, mSuggestionsStrip, this);
|
getContext(), mSuggestedWords, mSuggestionsStrip, this);
|
||||||
|
|
|
@ -55,6 +55,15 @@ public final class ResourceUtils {
|
||||||
return windowBounds.width() - insets.left - insets.right;
|
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) {
|
public static int getKeyboardHeight(final Resources res, final SettingsValues settingsValues) {
|
||||||
final int defaultKeyboardHeight = getDefaultKeyboardHeight(res, settingsValues.mShowsNumberRow);
|
final int defaultKeyboardHeight = getDefaultKeyboardHeight(res, settingsValues.mShowsNumberRow);
|
||||||
// mKeyboardHeightScale Ranges from [.5,1.5], from xml/prefs_screen_appearance.xml
|
// mKeyboardHeightScale Ranges from [.5,1.5], from xml/prefs_screen_appearance.xml
|
||||||
|
|
|
@ -115,6 +115,10 @@ enum class ToolbarKey {
|
||||||
PAGE_UP, PAGE_DOWN, FULL_LEFT, FULL_RIGHT, PAGE_START, PAGE_END
|
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 toolbarKeyStrings = entries.associateWithTo(EnumMap(ToolbarKey::class.java)) { it.toString().lowercase(Locale.US) }
|
||||||
|
|
||||||
val defaultToolbarPref by lazy {
|
val defaultToolbarPref by lazy {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.Surface
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
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.R
|
||||||
import helium314.keyboard.latin.settings.Defaults
|
import helium314.keyboard.latin.settings.Defaults
|
||||||
import helium314.keyboard.latin.settings.Settings
|
import helium314.keyboard.latin.settings.Settings
|
||||||
import helium314.keyboard.settings.Setting
|
import helium314.keyboard.latin.utils.Log
|
||||||
import helium314.keyboard.settings.preferences.Preference
|
import helium314.keyboard.latin.utils.ToolbarMode
|
||||||
import helium314.keyboard.settings.preferences.ReorderSwitchPreference
|
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.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.Theme
|
||||||
import helium314.keyboard.settings.dialogs.ToolbarKeysCustomizer
|
import helium314.keyboard.settings.dialogs.ToolbarKeysCustomizer
|
||||||
import helium314.keyboard.settings.initPreview
|
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
|
import helium314.keyboard.settings.previewDark
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ToolbarScreen(
|
fun ToolbarScreen(
|
||||||
onClickBack: () -> Unit,
|
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(
|
val items = listOf(
|
||||||
Settings.PREF_TOOLBAR_KEYS,
|
Settings.PREF_TOOLBAR_MODE,
|
||||||
Settings.PREF_PINNED_TOOLBAR_KEYS,
|
if (toolbarMode == ToolbarMode.HIDDEN) Settings.PREF_TOOLBAR_HIDING_GLOBAL else null,
|
||||||
Settings.PREF_CLIPBOARD_TOOLBAR_KEYS,
|
if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.TOOLBAR_KEYS))
|
||||||
Settings.PREF_TOOLBAR_CUSTOM_KEY_CODES,
|
Settings.PREF_TOOLBAR_KEYS else null,
|
||||||
Settings.PREF_QUICK_PIN_TOOLBAR_KEYS,
|
if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.SUGGESTION_STRIP))
|
||||||
Settings.PREF_AUTO_SHOW_TOOLBAR,
|
Settings.PREF_PINNED_TOOLBAR_KEYS else null,
|
||||||
Settings.PREF_AUTO_HIDE_TOOLBAR,
|
if (toolbarMode in listOf(ToolbarMode.EXPANDABLE, ToolbarMode.TOOLBAR_KEYS))
|
||||||
Settings.PREF_VARIABLE_TOOLBAR_DIRECTION
|
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(
|
SearchSettingsScreen(
|
||||||
onClickBack = onClickBack,
|
onClickBack = onClickBack,
|
||||||
|
@ -60,6 +79,23 @@ fun ToolbarScreen(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createToolbarSettings(context: Context) = listOf(
|
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) {
|
Setting(context, Settings.PREF_TOOLBAR_KEYS, R.string.toolbar_keys) {
|
||||||
ReorderSwitchPreference(it, Defaults.PREF_TOOLBAR_KEYS)
|
ReorderSwitchPreference(it, Defaults.PREF_TOOLBAR_KEYS)
|
||||||
},
|
},
|
||||||
|
|
|
@ -284,6 +284,18 @@
|
||||||
<string name="popup_keys_language_priority" tools:keep="@string/popup_keys_language_priority">Language (priority)</string>
|
<string name="popup_keys_language_priority" tools:keep="@string/popup_keys_language_priority">Language (priority)</string>
|
||||||
<string name="popup_keys_layout" tools:keep="@string/popup_keys_layout">Layout</string>
|
<string name="popup_keys_layout" tools:keep="@string/popup_keys_layout">Layout</string>
|
||||||
<string name="popup_keys_symbols" tools:keep="@string/popup_keys_symbols">Symbols</string>
|
<string name="popup_keys_symbols" tools:keep="@string/popup_keys_symbols">Symbols</string>
|
||||||
|
<!-- Title of the setting to set the toolbar mode -->
|
||||||
|
<string name="toolbar_mode">Toolbar mode</string>
|
||||||
|
<!-- Option to set the toolbar mode to show an expandable toolbar -->
|
||||||
|
<string name="toolbar_mode_expandable">Toolbar keys and suggestions</string>
|
||||||
|
<!-- Option to set the toolbar mode to show the toolbar keys only -->
|
||||||
|
<string name="toolbar_mode_toolbar_keys">Toolbar keys only</string>
|
||||||
|
<!-- Option to set the toolbar mode to show the suggestions strip only -->
|
||||||
|
<string name="toolbar_mode_suggestion_strip">Suggestions only</string>
|
||||||
|
<!-- Option to set the toolbar mode to hidden -->
|
||||||
|
<string name="toolbar_mode_hidden">Hidden</string>
|
||||||
|
<!-- Option to hide clipboard and emoji toolbars when main toolbar is hidden -->
|
||||||
|
<string name="toolbar_hiding_global">Hide clipboard and emoji toolbars too</string>
|
||||||
<!-- Title of the setting to set toolbar keys -->
|
<!-- Title of the setting to set toolbar keys -->
|
||||||
<string name="toolbar_keys">Select toolbar keys</string>
|
<string name="toolbar_keys">Select toolbar keys</string>
|
||||||
<!-- Names of the toolbar keys-->
|
<!-- Names of the toolbar keys-->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue