diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardBuilder.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardBuilder.kt index 627cd036d..792180f5c 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardBuilder.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/KeyboardBuilder.kt @@ -48,7 +48,7 @@ open class KeyboardBuilder(protected val mContext: Context, if (id.isEmojiKeyboard) { mParams.mAllowRedundantPopupKeys = true readAttributes(R.xml.kbd_emoji) - keysInRows = EmojiParser(mParams, mContext).parse() + keysInRows = EmojiParser(mParams, mContext, Settings.getInstance().current.mEmojiMaxSdk).parse() } else { try { setupParams() diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt index 8c13640aa..dcf9ca204 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/EmojiParser.kt @@ -2,7 +2,6 @@ package helium314.keyboard.keyboard.internal.keyboard_parser import android.content.Context -import android.os.Build import helium314.keyboard.keyboard.Key import helium314.keyboard.keyboard.Key.KeyParams import helium314.keyboard.keyboard.KeyboardId @@ -14,7 +13,7 @@ import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.utils.ResourceUtils import kotlin.math.sqrt -class EmojiParser(private val params: KeyboardParams, private val context: Context) { +class EmojiParser(private val params: KeyboardParams, private val context: Context, private val maxSdk: Int) { fun parse(): ArrayList> { val emojiArrayId = when (params.mId.mElementId) { @@ -64,7 +63,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte private fun getLabelAndCode(spec: String): Pair? { val specAndSdk = spec.split("||") - if (specAndSdk.getOrNull(1)?.toIntOrNull()?.let { it > Build.VERSION.SDK_INT } == true) return null + if (specAndSdk.getOrNull(1)?.toIntOrNull()?.let { it > maxSdk } == true) return null if ("," !in specAndSdk.first()) { val code = specAndSdk.first().toIntOrNull(16) ?: return specAndSdk.first() to KeyCode.MULTIPLE_CODE_POINTS // text emojis val label = StringUtils.newSingleCodePointString(code) 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 48891de1f..8ad33f7b4 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/AdvancedSettingsFragment.kt @@ -134,6 +134,7 @@ class AdvancedSettingsFragment : SubScreenFragment() { removePreference("load_gesture_library") } setupKeyLongpressTimeoutSettings() + setupEmojiSdkSetting() findPreference("load_gesture_library")?.setOnPreferenceClickListener { onClickLoadLibrary() } findPreference("backup_restore")?.setOnPreferenceClickListener { showBackupRestoreDialog() } @@ -535,10 +536,45 @@ class AdvancedSettingsFragment : SubScreenFragment() { }) } + private fun setupEmojiSdkSetting() { + val prefs = sharedPreferences + findPreference(Settings.PREF_EMOJI_MAX_SDK)?.setInterface(object : ValueProxy { + override fun writeValue(value: Int, key: String) = prefs.edit().putInt(key, value).apply() + + override fun writeDefaultValue(key: String) = prefs.edit().remove(key).apply() + + override fun readValue(key: String) = prefs.getInt(Settings.PREF_EMOJI_MAX_SDK, Build.VERSION.SDK_INT) + + override fun readDefaultValue(key: String) = Build.VERSION.SDK_INT + + override fun getValueText(value: Int) = "Android " + when(value) { + 21 -> "5.0" + 22 -> "5.1" + 23 -> "6" + 24 -> "7.0" + 25 -> "7.1" + 26 -> "8.0" + 27 -> "8.1" + 28 -> "9" + 29 -> "10" + 30 -> "11" + 31 -> "12" + 32 -> "12L" + 33 -> "13" + 34 -> "14" + 35 -> "15" + else -> "version unknown" + } + + override fun feedbackValue(value: Int) {} + }) + } + override fun onSharedPreferenceChanged(prefs: SharedPreferences, key: String?) { when (key) { Settings.PREF_SHOW_SETUP_WIZARD_ICON -> SystemBroadcastReceiver.toggleAppIcon(requireContext()) Settings.PREF_MORE_POPUP_KEYS -> KeyboardLayoutSet.onSystemLocaleChanged() + Settings.PREF_EMOJI_MAX_SDK -> KeyboardSwitcher.getInstance().forceUpdateKeyboardTheme(requireContext()) } } 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 ec377d82d..a612ae79b 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -174,6 +174,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_SPACE_BAR_TEXT = "space_bar_text"; // Emoji + public static final String PREF_EMOJI_MAX_SDK = "emoji_max_sdk"; public static final String PREF_EMOJI_RECENT_KEYS = "emoji_recent_keys"; public static final String PREF_LAST_SHOWN_EMOJI_CATEGORY_ID = "last_shown_emoji_category_id"; public static final String PREF_LAST_SHOWN_EMOJI_CATEGORY_PAGE_ID = "last_shown_emoji_category_page_id"; diff --git a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java index dd7524cd0..89a65114e 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java @@ -11,6 +11,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; +import android.os.Build; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodSubtype; @@ -138,6 +139,7 @@ public class SettingsValues { public final boolean mIncognitoModeEnabled; public final boolean mLongPressSymbolsForNumpad; public final boolean mHasCustomFunctionalLayout; + public final int mEmojiMaxSdk; // User-defined colors public final Colors mColors; @@ -268,6 +270,7 @@ public class SettingsValues { mAlphaAfterSymbolAndSpace = prefs.getBoolean(Settings.PREF_ABC_AFTER_SYMBOL_SPACE, true); mRemoveRedundantPopups = prefs.getBoolean(Settings.PREF_REMOVE_REDUNDANT_POPUPS, false); mSpaceBarText = prefs.getString(Settings.PREF_SPACE_BAR_TEXT, ""); + mEmojiMaxSdk = prefs.getInt(Settings.PREF_EMOJI_MAX_SDK, Build.VERSION.SDK_INT); } public boolean isApplicationSpecifiedCompletionsOn() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dd59cd6eb..8445414d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -568,6 +568,8 @@ disposition rather than other common dispositions for Latin languages. [CHAR LIM Keypress sound volume Key long press delay + + Override Emoji version Emoji for physical keyboard diff --git a/app/src/main/res/xml/prefs_screen_advanced.xml b/app/src/main/res/xml/prefs_screen_advanced.xml index 62e89b1a2..2ecddb6c9 100644 --- a/app/src/main/res/xml/prefs_screen_advanced.xml +++ b/app/src/main/res/xml/prefs_screen_advanced.xml @@ -118,6 +118,13 @@ + +