diff --git a/app/build.gradle b/app/build.gradle index a58f85d..062afd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,6 +66,7 @@ android { dependencies { implementation 'com.github.SimpleMobileTools:Simple-Commons:c05de1687e' + implementation 'androidx.emoji2:emoji2-bundled:1.1.0' kapt 'androidx.room:room-compiler:2.4.2' implementation 'androidx.room:room-runtime:2.4.2' diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/App.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/App.kt index 20101fe..442c5f3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/App.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/App.kt @@ -1,11 +1,19 @@ package com.simplemobiletools.keyboard import android.app.Application +import androidx.emoji2.bundled.BundledEmojiCompatConfig +import androidx.emoji2.text.EmojiCompat import com.simplemobiletools.commons.extensions.checkUseEnglish class App : Application() { override fun onCreate() { super.onCreate() checkUseEnglish() + setupEmojiCompat() + } + + private fun setupEmojiCompat() { + val config = BundledEmojiCompatConfig(this) + EmojiCompat.init(config) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt index de00779..df707b0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/EmojisAdapter.kt @@ -4,6 +4,7 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.emoji2.text.EmojiCompat import androidx.recyclerview.widget.RecyclerView import com.simplemobiletools.keyboard.R import kotlinx.android.synthetic.main.item_emoji.view.* @@ -32,7 +33,8 @@ class EmojisAdapter( } private fun setupEmoji(view: View, emoji: String) { - view.emoji_value.text = emoji + val processed = EmojiCompat.get().process(emoji) + view.emoji_value.text = processed } inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt index 66d3133..d05c617 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt @@ -45,6 +45,7 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL keyboardView = keyboardHolder.keyboard_view as MyKeyboardView keyboardView!!.setKeyboard(keyboard!!) keyboardView!!.setKeyboardHolder(keyboardHolder.keyboard_holder) + keyboardView!!.setEditorInfo(currentInputEditorInfo) keyboardView!!.mOnKeyboardActionListener = this return keyboardHolder!! } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index 3ec536f..1d80715 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -22,10 +22,13 @@ import android.view.* import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityManager import android.view.animation.AccelerateInterpolator +import android.view.inputmethod.EditorInfo import android.widget.PopupWindow import android.widget.TextView import androidx.core.animation.doOnEnd import androidx.core.animation.doOnStart +import androidx.emoji2.text.EmojiCompat +import androidx.emoji2.text.EmojiCompat.EMOJI_SUPPORTED import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.isPiePlus @@ -153,6 +156,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var mToolbarHolder: View? = null private var mClipboardManagerHolder: View? = null private var mEmojiPaletteHolder: View? = null + private var emojiCompatMetadataVersion = 0 // For multi-tap private var mLastTapTime = 0L @@ -423,6 +427,10 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } + fun setEditorInfo(editorInfo: EditorInfo) { + emojiCompatMetadataVersion = editorInfo.extras?.getInt(EmojiCompat.EDITOR_INFO_METAVERSION_KEY, 0) ?: 0 + } + fun vibrateIfNeeded() { if (context.config.vibrateOnKeypress) { performHapticFeedback() @@ -1443,7 +1451,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut typeface = Typeface.DEFAULT } val emojis = fullEmojiList.filter { emoji -> - systemFontPaint.hasGlyph(emoji) + systemFontPaint.hasGlyph(emoji) || EmojiCompat.get().getEmojiMatch(emoji, emojiCompatMetadataVersion) == EMOJI_SUPPORTED } Handler(Looper.getMainLooper()).post { setupEmojiAdapter(emojis) diff --git a/app/src/main/res/layout/item_emoji.xml b/app/src/main/res/layout/item_emoji.xml index bac6347..37348a3 100644 --- a/app/src/main/res/layout/item_emoji.xml +++ b/app/src/main/res/layout/item_emoji.xml @@ -1,6 +1,6 @@ -