Use EmojiCompat library for backward compatibility

This commit is contained in:
Naveen 2022-07-31 01:14:47 +05:30
parent ecce3793ca
commit 11460028ff
6 changed files with 23 additions and 3 deletions

View File

@ -66,6 +66,7 @@ android {
dependencies { dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:c05de1687e' implementation 'com.github.SimpleMobileTools:Simple-Commons:c05de1687e'
implementation 'androidx.emoji2:emoji2-bundled:1.1.0'
kapt 'androidx.room:room-compiler:2.4.2' kapt 'androidx.room:room-compiler:2.4.2'
implementation 'androidx.room:room-runtime:2.4.2' implementation 'androidx.room:room-runtime:2.4.2'

View File

@ -1,11 +1,19 @@
package com.simplemobiletools.keyboard package com.simplemobiletools.keyboard
import android.app.Application import android.app.Application
import androidx.emoji2.bundled.BundledEmojiCompatConfig
import androidx.emoji2.text.EmojiCompat
import com.simplemobiletools.commons.extensions.checkUseEnglish import com.simplemobiletools.commons.extensions.checkUseEnglish
class App : Application() { class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
checkUseEnglish() checkUseEnglish()
setupEmojiCompat()
}
private fun setupEmojiCompat() {
val config = BundledEmojiCompatConfig(this)
EmojiCompat.init(config)
} }
} }

View File

@ -4,6 +4,7 @@ import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.emoji2.text.EmojiCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.R
import kotlinx.android.synthetic.main.item_emoji.view.* import kotlinx.android.synthetic.main.item_emoji.view.*
@ -32,7 +33,8 @@ class EmojisAdapter(
} }
private fun setupEmoji(view: View, emoji: String) { 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) { inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

View File

@ -45,6 +45,7 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL
keyboardView = keyboardHolder.keyboard_view as MyKeyboardView keyboardView = keyboardHolder.keyboard_view as MyKeyboardView
keyboardView!!.setKeyboard(keyboard!!) keyboardView!!.setKeyboard(keyboard!!)
keyboardView!!.setKeyboardHolder(keyboardHolder.keyboard_holder) keyboardView!!.setKeyboardHolder(keyboardHolder.keyboard_holder)
keyboardView!!.setEditorInfo(currentInputEditorInfo)
keyboardView!!.mOnKeyboardActionListener = this keyboardView!!.mOnKeyboardActionListener = this
return keyboardHolder!! return keyboardHolder!!
} }

View File

@ -22,10 +22,13 @@ import android.view.*
import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityManager import android.view.accessibility.AccessibilityManager
import android.view.animation.AccelerateInterpolator import android.view.animation.AccelerateInterpolator
import android.view.inputmethod.EditorInfo
import android.widget.PopupWindow import android.widget.PopupWindow
import android.widget.TextView import android.widget.TextView
import androidx.core.animation.doOnEnd import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart 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.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.isPiePlus 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 mToolbarHolder: View? = null
private var mClipboardManagerHolder: View? = null private var mClipboardManagerHolder: View? = null
private var mEmojiPaletteHolder: View? = null private var mEmojiPaletteHolder: View? = null
private var emojiCompatMetadataVersion = 0
// For multi-tap // For multi-tap
private var mLastTapTime = 0L 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() { fun vibrateIfNeeded() {
if (context.config.vibrateOnKeypress) { if (context.config.vibrateOnKeypress) {
performHapticFeedback() performHapticFeedback()
@ -1443,7 +1451,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
typeface = Typeface.DEFAULT typeface = Typeface.DEFAULT
} }
val emojis = fullEmojiList.filter { emoji -> val emojis = fullEmojiList.filter { emoji ->
systemFontPaint.hasGlyph(emoji) systemFontPaint.hasGlyph(emoji) || EmojiCompat.get().getEmojiMatch(emoji, emojiCompatMetadataVersion) == EMOJI_SUPPORTED
} }
Handler(Looper.getMainLooper()).post { Handler(Looper.getMainLooper()).post {
setupEmojiAdapter(emojis) setupEmojiAdapter(emojis)

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.commons.views.MyTextView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.appcompat.widget.AppCompatTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/emoji_value" android:id="@+id/emoji_value"
android:layout_width="@dimen/emoji_item_size" android:layout_width="@dimen/emoji_item_size"