From f7d82b9589dec6eb5e819526c0abe626592260ab Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sat, 29 Jun 2024 20:34:32 +0200 Subject: [PATCH] allow customizing currency keys, fixes #353 --- .../keyboard_parser/LocaleKeyboardInfos.kt | 5 ++++ .../settings/AdvancedSettingsFragment.kt | 30 +++++++++++++++++++ .../keyboard/latin/settings/Settings.java | 5 ++++ app/src/main/res/values/strings.xml | 4 +++ .../main/res/xml/prefs_screen_advanced.xml | 5 ++++ 5 files changed, 49 insertions(+) diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt index 0cbd84712..aeda0105b 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/LocaleKeyboardInfos.kt @@ -274,6 +274,11 @@ private const val READER_MODE_NUMBER_ROW = 4 // probably could be improved and extended, currently this is what's done in key_styles_currency.xml private fun getCurrencyKey(locale: Locale): Pair> { + Settings.getInstance().readCustomCurrencyKey().takeIf { it.isNotBlank() }?.let { + val split = it.trim().splitOnWhitespace() + if (split.isNotEmpty()) + return split[0] to (split.toSet() + genericCurrencyPopupKeys).filterNot { it == split[0] } + } if (locale.country.matches(euroCountries)) return euro if (locale.toString().matches(euroLocales)) diff --git a/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt b/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt index 3669fec44..79988c0d9 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt @@ -12,9 +12,13 @@ import android.content.SharedPreferences import android.net.Uri import android.os.Build import android.os.Bundle +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.TextView import helium314.keyboard.latin.utils.Log import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog +import androidx.core.content.edit import androidx.preference.Preference import androidx.preference.PreferenceManager import kotlinx.serialization.encodeToString @@ -48,6 +52,7 @@ import helium314.keyboard.latin.utils.CUSTOM_LAYOUT_PREFIX import helium314.keyboard.latin.utils.DeviceProtectedUtils import helium314.keyboard.latin.utils.ExecutorUtils import helium314.keyboard.latin.utils.JniUtils +import helium314.keyboard.latin.utils.ResourceUtils import helium314.keyboard.latin.utils.editCustomLayout import helium314.keyboard.latin.utils.getCustomLayoutFiles import helium314.keyboard.latin.utils.getStringResourceOrName @@ -137,6 +142,11 @@ class AdvancedSettingsFragment : SubScreenFragment() { showCustomizeFunctionalKeyLayoutsDialog() true } + + findPreference(Settings.PREF_CUSTOM_CURRENCY_KEY)?.setOnPreferenceClickListener { + customCurrencyDialog() + true + } } override fun onStart() { @@ -451,6 +461,26 @@ class AdvancedSettingsFragment : SubScreenFragment() { } } + private fun customCurrencyDialog() { + val layout = LinearLayout(requireContext()) + layout.orientation = LinearLayout.VERTICAL + layout.addView(TextView(requireContext()).apply { setText(R.string.customize_currencies_detail) }) + val et = EditText(requireContext()).apply { setText(sharedPreferences.getString(Settings.PREF_CUSTOM_CURRENCY_KEY, "")) } + layout.addView(et) + val padding = ResourceUtils.toPx(8, resources) + layout.setPadding(3 * padding, padding, padding, padding) + AlertDialog.Builder(requireContext()) + .setTitle(R.string.customize_currencies) + .setView(layout) + .setPositiveButton(android.R.string.ok) { _, _ -> + sharedPreferences.edit { putString(Settings.PREF_CUSTOM_CURRENCY_KEY, et.text.toString()) } + KeyboardLayoutSet.onSystemLocaleChanged() + } + .setNegativeButton(android.R.string.cancel, null) + .setNeutralButton(R.string.button_default) { _, _ -> sharedPreferences.edit { putString(Settings.PREF_CUSTOM_CURRENCY_KEY, "") } } + .show() + } + private fun setupKeyLongpressTimeoutSettings() { val prefs = sharedPreferences findPreference(Settings.PREF_KEY_LONGPRESS_TIMEOUT)?.setInterface(object : ValueProxy { diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java index ebaa1c7a1..0344073ff 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -127,6 +127,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_SHOW_NUMBER_ROW = "show_number_row"; public static final String PREF_LOCALIZED_NUMBER_ROW = "localized_number_row"; + public static final String PREF_CUSTOM_CURRENCY_KEY = "custom_currency_key"; public static final String PREF_SHOW_HINTS = "show_hints"; public static final String PREF_POPUP_KEYS_ORDER = "popup_keys_order"; @@ -661,4 +662,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public String getInLocale(@StringRes final int resId, final Locale locale) { return RunInLocaleKt.runInLocale(mContext, locale, (ctx) -> ctx.getString(resId)); } + + public String readCustomCurrencyKey() { + return mPrefs.getString(PREF_CUSTOM_CURRENCY_KEY, ""); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7966baa35..accb00bc6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -501,6 +501,10 @@ disposition rather than other common dispositions for Latin languages. [CHAR LIM Numpad (landscape) Set background image + + Customize currencies + + Set main and secondary currency symbols, separated with space Set image for day or night mode? diff --git a/app/src/main/res/xml/prefs_screen_advanced.xml b/app/src/main/res/xml/prefs_screen_advanced.xml index 80422afbe..d615c755c 100644 --- a/app/src/main/res/xml/prefs_screen_advanced.xml +++ b/app/src/main/res/xml/prefs_screen_advanced.xml @@ -76,6 +76,11 @@ android:defaultValue="true" android:persistent="true" /> + +