From e6950c370c240ebc73d9db189a5ca7ad6a10eb9d Mon Sep 17 00:00:00 2001 From: sspanak Date: Sun, 2 Feb 2025 15:20:56 +0200 Subject: [PATCH] added v-shaped numpad layout --- .../screens/appearance/AppearanceScreen.java | 7 ++- .../screens/appearance/ItemAlignment.java | 11 ++--- .../appearance/ItemNumpadKeyHeight.java | 3 +- .../screens/appearance/ItemNumpadShape.java | 49 +++++++++++++++++++ .../preferences/settings/SettingsStore.java | 6 ++- .../tt9/preferences/settings/SettingsUI.java | 30 ++++++++---- .../sspanak/tt9/ui/main/MainLayoutNumpad.java | 49 +++++++------------ .../sspanak/tt9/ui/main/keys/SoftKey.java | 24 +++++++++ .../tt9/ui/main/keys/SoftKeyArrow.java | 2 + .../sspanak/tt9/ui/main/keys/SoftKeyLF4.java | 10 ++++ .../sspanak/tt9/ui/main/keys/SoftKeyOk.java | 11 +++++ .../tt9/ui/main/keys/SoftKeyPunctuation.java | 35 ++++++------- app/src/main/res/layout/main_numpad.xml | 7 +-- .../res/layout/panel_numpad_text_editing.xml | 8 ++- app/src/main/res/values-bg/strings.xml | 3 ++ app/src/main/res/values-de/strings.xml | 3 ++ app/src/main/res/values-es/strings.xml | 3 ++ app/src/main/res/values-fr/strings.xml | 3 ++ app/src/main/res/values-it/strings.xml | 3 ++ app/src/main/res/values-iw/strings.xml | 3 ++ app/src/main/res/values-lt/strings.xml | 3 ++ app/src/main/res/values-nl/strings.xml | 3 ++ app/src/main/res/values-pt-rBR/strings.xml | 3 ++ app/src/main/res/values-ru/strings.xml | 3 ++ app/src/main/res/values-tr/strings.xml | 3 ++ app/src/main/res/values-uk/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 4 ++ app/src/main/res/values/styles.xml | 14 ++++-- .../main/res/xml/prefs_screen_appearance.xml | 4 ++ 29 files changed, 228 insertions(+), 82 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadShape.java diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java index 2f14b960..c22f7a23 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/AppearanceScreen.java @@ -28,22 +28,25 @@ public class AppearanceScreen extends BaseScreenFragment { ItemAlignment alignment = new ItemAlignment(findPreference(ItemAlignment.NAME), activity.getSettings()); ItemNumpadKeyHeight numpadKeyHeight = new ItemNumpadKeyHeight(findPreference(ItemNumpadKeyHeight.NAME), activity.getSettings()); ItemWidth keyboardWidth = new ItemWidth(findPreference(ItemWidth.NAME), activity.getSettings()); + ItemNumpadShape numpadShape = new ItemNumpadShape(findPreference(ItemNumpadShape.NAME), activity.getSettings()); ItemDropDown[] items = { new ItemSelectTheme(findPreference(ItemSelectTheme.NAME), activity), new ItemSelectLayoutType( findPreference(ItemSelectLayoutType.NAME), activity, - (layout) -> { + (layout) -> { // on layout change numpadKeyHeight.onLayoutChange(layout); alignment.onLayoutChange(layout); keyboardWidth.onLayoutChange(layout); + numpadShape.onLayoutChange(layout); } ), new ItemSelectSettingsFontSize(findPreference(ItemSelectSettingsFontSize.NAME), this), numpadKeyHeight, alignment, - keyboardWidth + keyboardWidth, + numpadShape }; for (ItemDropDown item : items) { diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlignment.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlignment.java index 508982cb..1dc10336 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlignment.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemAlignment.java @@ -1,7 +1,6 @@ package io.github.sspanak.tt9.preferences.screens.appearance; import android.content.Context; -import android.os.Build; import android.view.Gravity; import androidx.preference.DropDownPreference; @@ -30,18 +29,13 @@ public class ItemAlignment extends ItemDropDown { Context context = item.getContext(); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - item.setVisible(false); - return this; - } - LinkedHashMap options = new LinkedHashMap<>(); options.put(Gravity.START, context.getString(R.string.virtual_numpad_alignment_left)); options.put(Gravity.CENTER_HORIZONTAL, context.getString(R.string.virtual_numpad_alignment_center)); options.put(Gravity.END, context.getString(R.string.virtual_numpad_alignment_right)); super.populateIntegers(options); - super.setValue(settings.getAlignment() + ""); + super.setValue(String.valueOf(settings.getAlignment())); onLayoutChange(settings.getMainViewLayout()); return this; @@ -49,7 +43,8 @@ public class ItemAlignment extends ItemDropDown { void onLayoutChange(int mainViewLayout) { if (item != null) { - item.setEnabled(mainViewLayout != SettingsStore.LAYOUT_STEALTH); + item.setVisible(mainViewLayout != SettingsStore.LAYOUT_STEALTH); + item.setIconSpaceReserved(false); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadKeyHeight.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadKeyHeight.java index 230521dd..4f606824 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadKeyHeight.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadKeyHeight.java @@ -43,7 +43,8 @@ public class ItemNumpadKeyHeight extends ItemDropDown { void onLayoutChange(int mainViewLayout) { if (item != null) { - item.setEnabled(mainViewLayout == SettingsStore.LAYOUT_NUMPAD); + item.setVisible(mainViewLayout == SettingsStore.LAYOUT_NUMPAD); + item.setIconSpaceReserved(false); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadShape.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadShape.java new file mode 100644 index 00000000..643b2b53 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadShape.java @@ -0,0 +1,49 @@ +package io.github.sspanak.tt9.preferences.screens.appearance; + +import android.content.Context; + +import androidx.preference.DropDownPreference; + +import java.util.LinkedHashMap; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.items.ItemDropDown; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; + +public class ItemNumpadShape extends ItemDropDown { + static final String NAME = "pref_numpad_shape"; + + private final SettingsStore settings; + + public ItemNumpadShape(DropDownPreference item, SettingsStore settings) { + super(item); + this.settings = settings; + } + + @Override + public ItemDropDown populate() { + if (item == null) { + return this; + } + + Context context = item.getContext(); + + LinkedHashMap options = new LinkedHashMap<>(); + options.put(SettingsStore.NUMPAD_SHAPE_SQUARE, context.getString(R.string.pref_numpad_shape_square)); + options.put(SettingsStore.NUMPAD_SHAPE_V, context.getString(R.string.pref_numpad_shape_v)); + options.put(SettingsStore.NUMPAD_SHAPE_LONG_SPACE, context.getString(R.string.pref_numpad_shape_long_space)); + + super.populateIntegers(options); + super.setValue(String.valueOf(settings.getNumpadShape())); + onLayoutChange(settings.getMainViewLayout()); + + return this; + } + + void onLayoutChange(int mainViewLayout) { + if (item != null) { + item.setVisible(mainViewLayout == SettingsStore.LAYOUT_NUMPAD); + item.setIconSpaceReserved(false); + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java index aa9b7ac4..45808bcb 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsStore.java @@ -24,13 +24,15 @@ public class SettingsStore extends SettingsUI { public final static byte SLOW_QUERY_TIME = 50; // ms public final static int SLOW_QUERY_TIMEOUT = 3000; // ms public final static float SOFT_KEY_AMOUNT_OF_KEY_SIZE_FOR_SWIPE = 0.5f; // 1 = full key size + public final static int SOFT_KEY_DOUBLE_CLICK_DELAY = 500; // ms + public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_HEIGHT = 360; // dp public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_NORMAL_WIDTH = 640; // dp public final static float SOFT_KEY_SCALE_SCREEN_COMPENSATION_MAX = 1.4f; - public final static int SOFT_KEY_DOUBLE_CLICK_DELAY = 500; // ms - public final static int SOFT_KEY_REPEAT_DELAY = 40; // ms public final static int SOFT_KEY_TITLE_MAX_CHARS = 5; public final static int SOFT_KEY_TITLE_MAX_CHARS_INDIC = 3; + public final static float SOFT_KEY_V_SHAPE_RATIO_INNER = 1.1f; + public final static float SOFT_KEY_V_SHAPE_RATIO_OUTER = (float) Math.pow(SOFT_KEY_V_SHAPE_RATIO_INNER, 2); public final static int SUGGESTIONS_MAX = 20; public final static int SUGGESTIONS_MIN = 8; public final static int SUGGESTIONS_POSITIONS_LIMIT = 100; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java index 0b3288cd..85febab4 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsUI.java @@ -19,6 +19,10 @@ public class SettingsUI extends SettingsTyping { public final static int LAYOUT_SMALL = 3; public final static int LAYOUT_NUMPAD = 4; + public final static int NUMPAD_SHAPE_SQUARE = 0; + public final static int NUMPAD_SHAPE_V = 1; + public final static int NUMPAD_SHAPE_LONG_SPACE = 2; + private final int DEFAULT_LAYOUT; private final boolean DEFAULT_STATUS_ICON; @@ -82,6 +86,23 @@ public class SettingsUI extends SettingsTyping { return getStringifiedInt("pref_numpad_key_height", getNumpadKeyDefaultHeight()); } + public int getNumpadShape() { + return getStringifiedInt("pref_numpad_shape", NUMPAD_SHAPE_SQUARE); + } + + public boolean isNumpadShapeLongSpace() { return getNumpadShape() == NUMPAD_SHAPE_LONG_SPACE; } + public boolean isNumpadShapeSquare() { return getNumpadShape() == NUMPAD_SHAPE_SQUARE; } + public boolean isNumpadShapeV() { return getNumpadShape() == NUMPAD_SHAPE_V; } + + public int getSettingsFontSize() { + int defaultSize = DeviceInfo.isQinF21() || DeviceInfo.isLgX100S() ? FONT_SIZE_LARGE : FONT_SIZE_DEFAULT; + return getStringifiedInt("pref_font_size", defaultSize); + } + + public int getTheme() { + return getStringifiedInt("pref_theme", AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + } + public int getDefaultWidthPercent() { if (!DeviceInfo.isLandscapeOrientation(context)) { return 100; @@ -107,15 +128,6 @@ public class SettingsUI extends SettingsTyping { return getStringifiedInt("pref_numpad_width", getDefaultWidthPercent()); } - public int getSettingsFontSize() { - int defaultSize = DeviceInfo.isQinF21() || DeviceInfo.isLgX100S() ? FONT_SIZE_LARGE : FONT_SIZE_DEFAULT; - return getStringifiedInt("pref_font_size", defaultSize); - } - - public int getTheme() { - return getStringifiedInt("pref_theme", AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); - } - public void setMainViewLayout(int layout) { if (layout != LAYOUT_STEALTH && layout != LAYOUT_TRAY && layout != LAYOUT_SMALL && layout != LAYOUT_NUMPAD) { Logger.w(getClass().getSimpleName(), "Ignoring invalid main view layout: " + layout); diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java index 28830c23..54a6856e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java @@ -2,9 +2,7 @@ package io.github.sspanak.tt9.ui.main; import android.content.res.Resources; import android.view.ViewGroup; -import android.view.ViewParent; import android.widget.LinearLayout; -import android.widget.RelativeLayout; import androidx.annotation.NonNull; @@ -13,8 +11,8 @@ import java.util.ArrayList; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.hacks.DeviceInfo; import io.github.sspanak.tt9.ime.TraditionalT9; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.main.keys.SoftKey; -import io.github.sspanak.tt9.ui.main.keys.SoftKeyArrow; import io.github.sspanak.tt9.ui.main.keys.SoftKeySettings; class MainLayoutNumpad extends BaseMainLayout { @@ -101,7 +99,7 @@ class MainLayoutNumpad extends BaseMainLayout { * be adjusted so that the entire Main View would take up around 50% of the screen in landscape mode * and 75% in portrait mode. Returns the adjusted height of a single key. */ - private int getKeyHeightCompat() { + private int calculateKeyHeight() { int keyHeight = tt9.getSettings().getNumpadKeyHeight(); int screenHeight = DeviceInfo.getScreenHeight(tt9.getApplicationContext()); @@ -115,46 +113,33 @@ class MainLayoutNumpad extends BaseMainLayout { } - void setKeyHeight(int height) { + private void setKeyHeight(int height) { if (view == null || height <= 0) { return; } for (SoftKey key : getKeys()) { - if ((key instanceof SoftKeyArrow)) { - continue; - } - - // adjust the key height - ViewGroup.LayoutParams layout = key.getLayoutParams(); - if (layout != null) { - layout.height = height; - key.setLayoutParams(layout); - } - - // adjust the overlay height (if it exists) - ViewParent parent = key.getParent(); - if (!(parent instanceof RelativeLayout)) { - continue; - } - - layout = ((RelativeLayout) parent).getLayoutParams(); - if (layout != null) { - layout.height = height; - ((RelativeLayout) parent).setLayoutParams(layout); - } + key.setHeight(height); } } + private int getKeyColumnHeight() { + int keyHeight = calculateKeyHeight(); + int lastKeyHeight = tt9.getSettings().isNumpadShapeV() ? Math.round(keyHeight * SettingsStore.SOFT_KEY_V_SHAPE_RATIO_OUTER) : keyHeight; + return keyHeight * 3 + lastKeyHeight; + } + + int getHeight(boolean forceRecalculate) { if (height <= 0 || forceRecalculate) { Resources resources = tt9.getResources(); + height = + Math.round(resources.getDimension(R.dimen.numpad_status_bar_spacing_top)) + resources.getDimensionPixelSize(R.dimen.numpad_status_bar_spacing_bottom) + resources.getDimensionPixelSize(R.dimen.numpad_suggestion_height) - + getKeyHeightCompat() * 4 + + getKeyColumnHeight() + Math.round(resources.getDimension(R.dimen.numpad_keys_spacing_bottom)); } @@ -177,7 +162,7 @@ class MainLayoutNumpad extends BaseMainLayout { @NonNull @Override protected ArrayList getKeys() { - if (!keys.isEmpty()) { + if (!keys.isEmpty() || view == null) { return keys; } @@ -219,6 +204,8 @@ class MainLayoutNumpad extends BaseMainLayout { keys.add(table.findViewById(R.id.soft_key_107)); keys.add(table.findViewById(R.id.soft_key_108)); keys.add(table.findViewById(R.id.soft_key_109)); + keys.add(table.findViewById(R.id.soft_key_punctuation_101)); + keys.add(table.findViewById(R.id.soft_key_punctuation_102)); keys.addAll(getKeysFromContainer(view.findViewById(R.id.status_bar_container))); @@ -229,9 +216,9 @@ class MainLayoutNumpad extends BaseMainLayout { @Override void render() { getView(); - setKeyHeight(getKeyHeightCompat()); - setWidth(tt9.getSettings().getWidthPercent(), tt9.getSettings().getAlignment()); enableClickHandlers(); + setKeyHeight(calculateKeyHeight()); + setWidth(tt9.getSettings().getWidthPercent(), tt9.getSettings().getAlignment()); for (SoftKey key : getKeys()) { key.render(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java index eb89806a..01c9a121 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java @@ -6,6 +6,7 @@ import android.text.SpannableString; import android.text.style.RelativeSizeSpan; import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup; import android.view.ViewParent; import android.widget.RelativeLayout; import android.widget.TextView; @@ -74,6 +75,29 @@ public class SoftKey extends BaseClickableKey { } + public void setHeight(int height) { + if (height <= 0) { + return; + } + + // adjust the key height + ViewGroup.LayoutParams layout = getLayoutParams(); + if (layout != null) { + layout.height = height; + setLayoutParams(layout); + } + + // adjust the overlay height (if it exists) + getOverlayWrapper(); + layout = overlay != null ? overlay.getLayoutParams() : null; + if (layout != null) { + layout.height = height; + overlay.setLayoutParams(layout); + } + } + + + /** * getTitle * Generates the name of the key, for example: "OK", "Backspace", "1", etc... diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java index b3f47241..badc8993 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java @@ -13,6 +13,8 @@ public class SoftKeyArrow extends SoftKey { public SoftKeyArrow(Context context, AttributeSet attrs) { super(context, attrs); } public SoftKeyArrow(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } + @Override public void setHeight(int height) {} + @Override protected boolean handlePress() { hold = false; diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF4.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF4.java index b7e9539b..c61eb4fd 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF4.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyLF4.java @@ -5,6 +5,7 @@ import android.util.AttributeSet; import android.view.Gravity; import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.Vibration; public class SoftKeyLF4 extends BaseSwipeableKey { @@ -72,6 +73,15 @@ public class SoftKeyLF4 extends BaseSwipeableKey { return tt9 != null && !tt9.isInputModeNumeric(); } + @Override + public void setHeight(int height) { + if (tt9 != null && tt9.getSettings().isMainLayoutNumpad() && tt9.getSettings().isNumpadShapeV()) { + height = Math.round(height * SettingsStore.SOFT_KEY_V_SHAPE_RATIO_OUTER); + } + + super.setHeight(height); + } + @Override public void render() { if (tt9 != null && tt9.isInputModeNumeric()) { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyOk.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyOk.java index 78248f1b..246b60cb 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyOk.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyOk.java @@ -4,6 +4,8 @@ import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; + public class SoftKeyOk extends SoftKey { public SoftKeyOk(Context context) { super(context); } public SoftKeyOk(Context context, AttributeSet attrs) { super(context, attrs); } @@ -26,6 +28,15 @@ public class SoftKeyOk extends SoftKey { return false; } + @Override + public void setHeight(int height) { + if (tt9 != null && tt9.getSettings().isMainLayoutNumpad() && tt9.getSettings().isNumpadShapeV()) { + height = Math.round(height * SettingsStore.SOFT_KEY_V_SHAPE_RATIO_OUTER); + } + + super.setHeight(height); + } + @Override public void render() { if (tt9 != null) { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java index fddd49a2..a573a80c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java @@ -5,34 +5,26 @@ import android.util.AttributeSet; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.languages.LanguageKind; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.chars.Characters; public class SoftKeyPunctuation extends SoftKey { - public SoftKeyPunctuation(Context context) { - super(context); - } - - public SoftKeyPunctuation(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SoftKeyPunctuation(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } + public SoftKeyPunctuation(Context context) { super(context); } + public SoftKeyPunctuation(Context context, AttributeSet attrs) { super(context, attrs); } + public SoftKeyPunctuation(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected boolean handleRelease() { - return validateTT9Handler() && tt9.onText(getKeyChar(), false); + return + tt9 != null + && !tt9.isTextEditingActive() + && tt9.onText(getKeyChar(), false); } @Override protected String getTitle() { String keyChar = getKeyChar(); - return switch (keyChar) { - case "" -> "PUNC"; - case "*" -> "✱"; - default -> keyChar; - }; + return "*".equals(keyChar) ? "✱" : keyChar; } private String getKeyChar() { @@ -66,4 +58,13 @@ public class SoftKeyPunctuation extends SoftKey { return "?"; } + + @Override + public void setHeight(int height) { + if (tt9 != null && tt9.getSettings().isMainLayoutNumpad() && tt9.getSettings().isNumpadShapeV()) { + height = Math.round(height * SettingsStore.SOFT_KEY_V_SHAPE_RATIO_INNER); + } + + super.setHeight(height); + } } diff --git a/app/src/main/res/layout/main_numpad.xml b/app/src/main/res/layout/main_numpad.xml index 594a94af..e6c40212 100644 --- a/app/src/main/res/layout/main_numpad.xml +++ b/app/src/main/res/layout/main_numpad.xml @@ -9,12 +9,7 @@ - - + diff --git a/app/src/main/res/layout/panel_numpad_text_editing.xml b/app/src/main/res/layout/panel_numpad_text_editing.xml index cf8be786..d80cdb37 100644 --- a/app/src/main/res/layout/panel_numpad_text_editing.xml +++ b/app/src/main/res/layout/panel_numpad_text_editing.xml @@ -27,7 +27,9 @@ - + @@ -93,7 +95,9 @@ - + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 62e8a06c..cf3e257a 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -191,4 +191,7 @@ Забранен символ:%1$s Забранени символи:%1$s Геометрия + Форма + Квадрат + V-образна diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 83f1da86..fdb5b96a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -179,4 +179,7 @@ Verbotene Zeichen:%1$s Das Filtern ist in dieser Sprache nicht möglich. Geometrie + Form + Quadrat + V-Form diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fada00ad..1333e51f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -189,4 +189,7 @@ Carácter prohibido:%1$s Caracteres prohibidos:%1$s Geometría + Forma + Cuadrado + Forma de V diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 72710a4f..a6be7434 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -187,4 +187,7 @@ Caractère interdit:%1$s Caractères interdits:%1$s Géométrie + Forme + Carré + Forme en V diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 578c8b40..124fa7d9 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -179,5 +179,8 @@ Caratteri vietati:%1$s Il filtraggio non è possibile in questa lingua. Geometria + Forma + Quadrato + Forma a V diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 1b70932c..bfc47ecb 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -192,4 +192,7 @@ תווים אסורים:%1$s לא ניתן לסנן בשפה זו. גיאומטריה + צורה + ריבוע + צורת V diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 0fdeac71..597bdc70 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -198,4 +198,7 @@ Draudžiamas simbolis:%1$s Draudžiami simboliai:%1$s Geometrija + Forma + Kvadratas + V formos diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 12bb2b85..c3736e70 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -178,4 +178,7 @@ Verboden tekens:%1$s Het filteren is niet mogelijk in deze taal. Geometrie + Vorm + Vierkant + V-vorm diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fd6d56cd..558116d7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -192,4 +192,7 @@ Caracteres proibidos:%1$s Não é possível filtrar neste idioma. Geometria + Forma + Quadrado + Forma em V diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cb4b91c6..dbe2039d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -189,4 +189,7 @@ Запрещённый символ:%1$s Запрещённые символы:%1$s Геометрия + Форма + Квадрат + V-образная форма diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 321893af..149f76bf 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -192,4 +192,7 @@ Yasaklı karakter:%1$s Yasaklı karakterler:%1$s Geometri + Şekil + Kare + V-şekli diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cd865928..3edcfc1a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -200,4 +200,7 @@ Заборонений символ:%1$s Заборонені символи:%1$s Геометрія + Форма + Квадрат + V-подібна diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 643ece48..e38da9e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,10 @@ Suggestion list only Alignment Height + Shape + Square + V-Shape + Long Spacebar Width Learn Word Pairs Remember commonly used phrases to improve the suggestions accuracy. diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 204a6bf5..1985658c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -203,6 +203,13 @@ Numpad Columns *******************************************--> + + - diff --git a/app/src/main/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml index 4b195790..50036742 100644 --- a/app/src/main/res/xml/prefs_screen_appearance.xml +++ b/app/src/main/res/xml/prefs_screen_appearance.xml @@ -15,6 +15,10 @@ app:title="@string/pref_layout" /> + +