From 5401f1e40c9d1b9a771ac82045d1176acdf3680a Mon Sep 17 00:00:00 2001 From: sspanak Date: Sun, 2 Feb 2025 21:54:07 +0200 Subject: [PATCH] added a setting for changing the function key width --- .../screens/appearance/AppearanceScreen.java | 3 + .../appearance/ItemNumpadFnKeyScale.java | 62 +++++++++++++++++++ .../preferences/settings/BaseSettings.java | 8 +++ .../tt9/preferences/settings/SettingsUI.java | 16 +++++ .../sspanak/tt9/ui/main/MainLayoutNumpad.java | 25 +++++++- .../tt9/ui/main/keys/BaseSwipeableKey.java | 16 +---- app/src/main/res/layout/panel_numpad_left.xml | 3 +- .../main/res/layout/panel_numpad_right.xml | 4 +- app/src/main/res/values-bg/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + .../main/res/xml/prefs_screen_appearance.xml | 4 ++ 22 files changed, 136 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadFnKeyScale.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 a489fd32..dbf54ce2 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 @@ -30,6 +30,7 @@ public class AppearanceScreen extends BaseScreenFragment { ItemWidth keyboardWidth = new ItemWidth(findPreference(ItemWidth.NAME), activity.getSettings()); ItemNumpadShape numpadShape = new ItemNumpadShape(findPreference(ItemNumpadShape.NAME), activity.getSettings()); ItemShowArrows showArrows = new ItemShowArrows(findPreference(ItemShowArrows.NAME), activity.getSettings()); + ItemNumpadFnKeyScale fnKeyWidth = new ItemNumpadFnKeyScale(findPreference(ItemNumpadFnKeyScale.NAME), activity.getSettings()); ItemDropDown[] items = { new ItemSelectTheme(findPreference(ItemSelectTheme.NAME), activity), @@ -42,6 +43,7 @@ public class AppearanceScreen extends BaseScreenFragment { keyboardWidth.onLayoutChange(layout); numpadShape.onLayoutChange(layout); showArrows.onLayoutChange(layout); + fnKeyWidth.onLayoutChange(layout); } ), new ItemSelectSettingsFontSize(findPreference(ItemSelectSettingsFontSize.NAME), this), @@ -49,6 +51,7 @@ public class AppearanceScreen extends BaseScreenFragment { alignment, keyboardWidth, numpadShape, + fnKeyWidth }; for (ItemDropDown item : items) { diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadFnKeyScale.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadFnKeyScale.java new file mode 100644 index 00000000..e40f3e9f --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/appearance/ItemNumpadFnKeyScale.java @@ -0,0 +1,62 @@ +package io.github.sspanak.tt9.preferences.screens.appearance; + +import androidx.preference.DropDownPreference; + +import java.util.LinkedHashMap; + +import io.github.sspanak.tt9.preferences.items.ItemDropDown; +import io.github.sspanak.tt9.preferences.settings.SettingsStore; + +public class ItemNumpadFnKeyScale extends ItemDropDown { + public static final String NAME = "pref_numpad_fn_key_width"; + + private final SettingsStore settings; + + ItemNumpadFnKeyScale(DropDownPreference item, SettingsStore settings) { + super(item); + this.settings = settings; + } + + @Override + public ItemDropDown populate() { + if (item == null) { + return this; + } + + LinkedHashMap options = new LinkedHashMap<>(); + options.put("1", "100 %"); + options.put("0.85", "115 %"); + options.put("0.675", "135 %"); + options.put("0.477", "150 %"); // whatever... + + super.populate(options); + super.setValue(getClosestOption(settings.getNumpadFnKeyScale(), options)); + onLayoutChange(settings.getMainViewLayout()); + + return this; + } + + private String getClosestOption(float value, LinkedHashMap options) { + float minDiff = Float.MAX_VALUE; + String closest = null; + + for (String key : options.keySet()) { + float fKey = Float.parseFloat(key); + float diff = Math.abs(value - fKey); + + if (diff < minDiff) { + minDiff = diff; + closest = key; + } + } + + return closest; + } + + 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/BaseSettings.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java index f9e7b620..4c02a2d9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/BaseSettings.java @@ -24,4 +24,12 @@ class BaseSettings { return defaultValue; } } + + protected float getStringifiedFloat(String key, float defaultValue) { + try { + return Float.parseFloat(prefs.getString(key, String.valueOf(defaultValue))); + } catch (NumberFormatException ignored) { + return defaultValue; + } + } } 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 0f4fec43..4933460a 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 @@ -2,6 +2,7 @@ package io.github.sspanak.tt9.preferences.settings; import android.content.Context; import android.content.res.Configuration; +import android.util.TypedValue; import android.view.Gravity; import androidx.appcompat.app.AppCompatDelegate; @@ -90,6 +91,21 @@ public class SettingsUI extends SettingsTyping { return getStringifiedInt("pref_numpad_key_height", getNumpadKeyDefaultHeight()); } + public float getNumpadFnKeyDefaultScale() { + // The simpler getResource.getFloat() requires API 29, so we must get the value manually. + try { + TypedValue outValue = new TypedValue(); + context.getResources().getValue(R.dimen.numpad_key_fn_layout_weight, outValue, true); + return outValue.getFloat(); + } catch (Exception e) { + return 0.625f; + } + } + + public float getNumpadFnKeyScale() { + return getStringifiedFloat("pref_numpad_fn_key_width", getNumpadFnKeyDefaultScale()); + } + public int getNumpadShape() { return getStringifiedInt("pref_numpad_shape", NUMPAD_SHAPE_SQUARE); } 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 54a6856e..c0460da3 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 @@ -131,12 +131,34 @@ class MainLayoutNumpad extends BaseMainLayout { } + private void setKeyColumnWidth(float layoutWeight) { + if (view == null || layoutWeight <= 0) { + return; + } + + LinearLayout leftColumn = view.findViewById(R.id.numpad_column_fn_left); + LinearLayout rightColumn = view.findViewById(R.id.numpad_column_fn_right); + + LinearLayout.LayoutParams leftParams = leftColumn != null ? (LinearLayout.LayoutParams) leftColumn.getLayoutParams() : null; + LinearLayout.LayoutParams rightParams = rightColumn != null ? (LinearLayout.LayoutParams) rightColumn.getLayoutParams() : null; + if (leftParams == null || rightParams == null) { + return; + } + + leftParams.weight = layoutWeight; + rightParams.weight = layoutWeight; + leftColumn.setLayoutParams(leftParams); + rightColumn.setLayoutParams(rightParams); + + } + + int getHeight(boolean forceRecalculate) { if (height <= 0 || forceRecalculate) { Resources resources = tt9.getResources(); height = - + Math.round(resources.getDimension(R.dimen.numpad_status_bar_spacing_top)) + 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) + getKeyColumnHeight() @@ -219,6 +241,7 @@ class MainLayoutNumpad extends BaseMainLayout { enableClickHandlers(); setKeyHeight(calculateKeyHeight()); setWidth(tt9.getSettings().getWidthPercent(), tt9.getSettings().getAlignment()); + setKeyColumnWidth(tt9.getSettings().getNumpadFnKeyScale()); for (SoftKey key : getKeys()) { key.render(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/BaseSwipeableKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/BaseSwipeableKey.java index e8142c73..0b89465e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/BaseSwipeableKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/BaseSwipeableKey.java @@ -2,13 +2,11 @@ package io.github.sspanak.tt9.ui.main.keys; import android.content.Context; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Timer; abstract public class BaseSwipeableKey extends BaseSoftKeyWithSideText { @@ -77,18 +75,8 @@ abstract public class BaseSwipeableKey extends BaseSoftKeyWithSideText { return getSwipeYThreshold(); } - try { - // The simpler getResource.getFloat() requires API 29, so we must get the value manually. - TypedValue outValue = new TypedValue(); - getResources().getValue(R.dimen.numpad_key_fn_layout_weight, outValue, true); - float functionKeyScale = outValue.getFloat(); - - float keyWidth = tt9.getWidth() / 5f * functionKeyScale; - return keyWidth * SettingsStore.SOFT_KEY_AMOUNT_OF_KEY_SIZE_FOR_SWIPE; - } catch (Exception e) { - Logger.e(LOG_TAG, "Error calculating the swipe X threshold. Using default to prevent crashing. " + e); - return getSwipeYThreshold(); - } + float keyWidth = tt9.getWidth() / 5f * tt9.getSettings().getNumpadFnKeyDefaultScale(); + return keyWidth * SettingsStore.SOFT_KEY_AMOUNT_OF_KEY_SIZE_FOR_SWIPE; } diff --git a/app/src/main/res/layout/panel_numpad_left.xml b/app/src/main/res/layout/panel_numpad_left.xml index c658c11b..cd2d3887 100644 --- a/app/src/main/res/layout/panel_numpad_left.xml +++ b/app/src/main/res/layout/panel_numpad_left.xml @@ -1,7 +1,8 @@ + style="@style/TTheme.Numpad.Column.Fn" + android:id="@+id/numpad_column_fn_left"> + style="@style/TTheme.Numpad.Column.Fn" + android:id="@+id/numpad_column_fn_right"> Експортиране на CSV (%1$s)… Екранна подредба Височина + Ширина на клавишите с букви Размер на шрифта в настройките По подразбиране Червен бутон diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9a5e7194..88a5e39a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -132,6 +132,7 @@ Wörterbuchbenachrichtigungen Benachrichtigen über Wörterbuchaktualisierungen und den Ladevorgang. Höhe + Breite der Buchstabentasten Schriftgröße der Einstellungen Standard Befehlsliste anzeigen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 092d3453..45ff6ac5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -144,6 +144,7 @@ Exportando CSV (%1$s)… Distribución del teclado en pantalla Altura + Anchura de las teclas de letras Tamaño de fuente de configuración Predeterminado Botón rojo diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6dca2e7b..44abe83c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -142,6 +142,7 @@ Exportation CSV en cours (%1$s)… Disposition à l\'écran Hauteur + Largeur des touches de lettres Taille de la police des paramètres Par défaut Bouton rouge diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1ee73f57..264f1d5b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -133,6 +133,7 @@ Notifiche del dizionario Ricevere notifiche sugli aggiornamenti del dizionario e sul progresso del caricamento. Altezza + Larghezza dei tasti lettera Dimensione del carattere delle impostazioni Predefinita Mostra elenco comandi diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 5b0d7580..082d7311 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -145,6 +145,7 @@ התראות מילון לקבל התראות על עדכוני המילון ועל התקדמות הטעינה. גובה + רוחב מקשי האותיות גודל הגופן בהגדרות ברירת מחדל הצג רשימת פקודות diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 94a9bc29..a1155fec 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -153,6 +153,7 @@ Jei jums patinka %1$s, galite pavaišinti mane alumi čia: %2$s. Klaviatūros išdėstymas ekrane Aukštis + Raidžių klavišų plotis Nustatymų šrifto dydis Numatytasis Raudonas mygtukas diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index aff5c511..7c8ef7a2 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -132,6 +132,7 @@ Woordenboekmeldingen Ontvang meldingen over woordenboekupdates en de voortgang van het laden. Hoogte + Breedte van lettertoetsen Instellingen lettergrootte Standaard Toon opdrachtenlijst diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8f4bd3db..d004669a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -145,6 +145,7 @@ Notificações do dicionário Receber notificações sobre atualizações do dicionário e sobre o progresso do carregamento. Altura + Largura das teclas de letras Tamanho da fonte das configurações Padrão Lista de comandos diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index aa42d797..9d04874d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -144,6 +144,7 @@ Экспорт CSV (%1$s)… Экранная раскладка Высота + Ширина буквенных клавиш Размер шрифта в настройках По умолчанию Красная кнопка diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a0b0768c..350ff80d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -131,6 +131,7 @@ Sözlük Bildirimleri Sözlük güncelleme ve yüklemeleri hakkında bildirimde bulunun. Yükseklik + Harf tuşlarının genişliği Yazı tipi boyutunu ayarla Standart diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e50bd2c3..e973f951 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -155,6 +155,7 @@ Експорт CSV (%1$s)… Екранна розкладка Висота + Ширина літерних клавіш Розмір шрифту у налаштуваннях За замовчуванням Червона кнопка diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc0e02fe..0bf57a87 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,6 +68,7 @@ No Auto Character for Double 0-key Press + Letter Keys Width Settings Font Size Default Large diff --git a/app/src/main/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml index 2b410e7e..70ed5db9 100644 --- a/app/src/main/res/xml/prefs_screen_appearance.xml +++ b/app/src/main/res/xml/prefs_screen_appearance.xml @@ -35,6 +35,10 @@ app:key="pref_arrow_keys_visible" app:title="@string/pref_arrow_keys_visible" app:summary="@string/pref_arrow_keys_visible_summary" /> + +