mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Removed emoji compat library, only use it for picker
This commit is contained in:
parent
3e6c856ee5
commit
ddcd7d7dc1
6 changed files with 41 additions and 97 deletions
|
|
@ -147,7 +147,6 @@ dependencies {
|
|||
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
|
||||
|
||||
def emoji_version = "1.4.0"
|
||||
implementation "androidx.emoji2:emoji2:$emoji_version"
|
||||
implementation "androidx.emoji2:emoji2-emojipicker:$emoji_version"
|
||||
|
||||
// https://github.com/google/flexbox-layout/blob/main/LICENSE Apache v2.0
|
||||
|
|
|
|||
|
|
@ -32,10 +32,8 @@ import android.os.Looper
|
|||
import androidx.annotation.AnyThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import java.util.*
|
||||
import org.linphone.BuildConfig
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.contacts.ContactsManager
|
||||
|
|
@ -55,8 +53,6 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
|||
|
||||
lateinit var core: Core
|
||||
|
||||
val emojiCompat: EmojiCompat
|
||||
|
||||
val contactsManager = ContactsManager()
|
||||
|
||||
val notificationsManager = NotificationsManager(context)
|
||||
|
|
@ -208,9 +204,6 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C
|
|||
}
|
||||
|
||||
init {
|
||||
EmojiCompat.init(context)
|
||||
emojiCompat = EmojiCompat.get()
|
||||
|
||||
(context as Application).registerActivityLifecycleCallbacks(activityMonitor)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,17 +21,13 @@ package org.linphone.ui.main.contacts.viewmodel
|
|||
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import java.io.File
|
||||
import java.text.Collator
|
||||
import java.util.ArrayList
|
||||
import java.util.Locale
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.contacts.ContactsManager.ContactsListener
|
||||
|
|
@ -105,24 +101,6 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
|
|||
}
|
||||
|
||||
applyFilter(currentFilter)
|
||||
|
||||
val emojiCompat = coreContext.emojiCompat
|
||||
viewModelScope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
// Wait for emoji compat library to have been loaded
|
||||
if (emojiCompat.loadState != EmojiCompat.LOAD_STATE_SUCCEEDED) {
|
||||
Log.i("$TAG Waiting for emoji compat library to have been loaded")
|
||||
while (emojiCompat.loadState == EmojiCompat.LOAD_STATE_DEFAULT || emojiCompat.loadState == EmojiCompat.LOAD_STATE_LOADING) {
|
||||
delay(50)
|
||||
}
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
Log.i("$TAG Emoji compat library loaded, update contacts list")
|
||||
processMagicSearchResults(magicSearch.lastSearch)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
|
|
|
|||
|
|
@ -21,14 +21,8 @@ package org.linphone.ui.main.viewmodel
|
|||
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.core.Account
|
||||
|
|
@ -157,24 +151,6 @@ open class AbstractTopBarViewModel @UiThread constructor() : ViewModel() {
|
|||
}
|
||||
|
||||
searchBarVisible.value = false
|
||||
|
||||
val emojiCompat = coreContext.emojiCompat
|
||||
viewModelScope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
// Wait for emoji compat library to have been loaded
|
||||
if (emojiCompat.loadState != EmojiCompat.LOAD_STATE_SUCCEEDED) {
|
||||
Log.i("$TAG Waiting for emoji compat library to have been loaded")
|
||||
while (emojiCompat.loadState == EmojiCompat.LOAD_STATE_DEFAULT || emojiCompat.loadState == EmojiCompat.LOAD_STATE_LOADING) {
|
||||
delay(50)
|
||||
}
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
Log.i("$TAG Emoji compat library loaded, update account")
|
||||
configure()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
|
|
|
|||
|
|
@ -22,14 +22,8 @@ package org.linphone.ui.main.viewmodel
|
|||
import android.view.View
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.core.Account
|
||||
import org.linphone.core.Core
|
||||
|
|
@ -103,24 +97,6 @@ class DrawerMenuViewModel @UiThread constructor() : ViewModel() {
|
|||
core.addListener(coreListener)
|
||||
|
||||
computeAccountsList()
|
||||
|
||||
val emojiCompat = coreContext.emojiCompat
|
||||
viewModelScope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
// Wait for emoji compat library to have been loaded
|
||||
if (emojiCompat.loadState != EmojiCompat.LOAD_STATE_SUCCEEDED) {
|
||||
Log.i("$TAG Waiting for emoji compat library to have been loaded")
|
||||
while (emojiCompat.loadState == EmojiCompat.LOAD_STATE_DEFAULT || emojiCompat.loadState == EmojiCompat.LOAD_STATE_LOADING) {
|
||||
delay(50)
|
||||
}
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
Log.i("$TAG Emoji compat library loaded, update accounts list")
|
||||
computeAccountsList()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ import androidx.annotation.PluralsRes
|
|||
import androidx.annotation.StringRes
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.view.SoftwareKeyboardControllerCompat
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import java.util.Locale
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.core.tools.Log
|
||||
|
|
@ -128,28 +127,19 @@ class AppUtils {
|
|||
val split = displayName.uppercase(Locale.getDefault()).split(" ")
|
||||
var initials = ""
|
||||
var characters = 0
|
||||
val emoji = coreContext.emojiCompat
|
||||
|
||||
for (i in split.indices) {
|
||||
if (split[i].isNotEmpty()) {
|
||||
val split = split[i]
|
||||
if (split.isNotEmpty()) {
|
||||
try {
|
||||
if (emoji.loadState == EmojiCompat.LOAD_STATE_SUCCEEDED && emoji.hasEmojiGlyph(
|
||||
split[i]
|
||||
)
|
||||
) {
|
||||
val glyph = emoji.process(split[i])
|
||||
if (characters > 0) { // Limit initial to 1 emoji only
|
||||
Log.d("$TAG We limit initials to one emoji only")
|
||||
initials = ""
|
||||
}
|
||||
initials += glyph
|
||||
break // Limit initial to 1 emoji only
|
||||
} else {
|
||||
initials += split[i][0]
|
||||
val symbol = extractFirstSymbol(split)
|
||||
initials += symbol
|
||||
if (symbol.length > 1) {
|
||||
break
|
||||
}
|
||||
} catch (ise: IllegalStateException) {
|
||||
Log.e("$TAG Can't call hasEmojiGlyph: $ise")
|
||||
initials += split[i][0]
|
||||
} catch (e: Exception) {
|
||||
Log.e("$TAG Failed to extract first symbol if any: $e")
|
||||
initials += split[0]
|
||||
}
|
||||
|
||||
characters += 1
|
||||
|
|
@ -176,5 +166,37 @@ class AppUtils {
|
|||
}
|
||||
return name
|
||||
}
|
||||
|
||||
@AnyThread
|
||||
private fun extractFirstSymbol(text: String): String {
|
||||
val sequence = StringBuilder(text.length)
|
||||
var isInJoin = false
|
||||
var codePoint: Int
|
||||
|
||||
var i = 0
|
||||
while (i < text.length) {
|
||||
codePoint = text.codePointAt(i)
|
||||
if (codePoint == 0x200D) {
|
||||
isInJoin = true
|
||||
if (sequence.isEmpty()) {
|
||||
i = text.offsetByCodePoints(i, 1)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
if (sequence.isNotEmpty() && !isInJoin) break
|
||||
isInJoin = false
|
||||
}
|
||||
sequence.appendCodePoint(codePoint)
|
||||
i = text.offsetByCodePoints(i, 1)
|
||||
}
|
||||
|
||||
if (isInJoin) {
|
||||
for (i in sequence.length - 1 downTo 0) {
|
||||
if (sequence[i].code == 0x200D) sequence.deleteCharAt(i) else break
|
||||
}
|
||||
}
|
||||
|
||||
return sequence.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue