feat: custom emote autocomplete

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2023-12-06 16:44:40 +01:00
parent 2d911f6e86
commit 924568a7b3
2 changed files with 33 additions and 6 deletions

View File

@ -57,6 +57,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
@ -74,8 +75,10 @@ import androidx.core.widget.addTextChangedListener
import chat.revolt.R
import chat.revolt.activities.RevoltTweenFloat
import chat.revolt.activities.RevoltTweenInt
import chat.revolt.api.REVOLT_FILES
import chat.revolt.api.schemas.ChannelType
import chat.revolt.api.schemas.Member
import chat.revolt.components.generic.RemoteImage
import chat.revolt.internals.Autocomplete
import kotlinx.coroutines.launch
@ -288,7 +291,13 @@ fun NativeMessageField(
)
)
},
label = { Text(item.shortcode) },
label = {
if (item.custom != null) {
Text(":${item.custom.name}:")
} else {
Text(item.shortcode)
}
},
icon = {
if (item.unicode != null) {
Text(
@ -299,10 +308,13 @@ fun NativeMessageField(
style = MaterialTheme.typography.bodyMedium
)
} else {
Icon(
painter = painterResource(R.drawable.ic_emoticon_24dp),
contentDescription = null,
modifier = Modifier.size(SuggestionChipDefaults.IconSize)
RemoteImage(
url = "$REVOLT_FILES/emojis/${item.custom?.id}/emoji.gif",
description = null,
contentScale = ContentScale.Fit,
modifier = Modifier
.size(SuggestionChipDefaults.IconSize)
.align(Alignment.CenterHorizontally)
)
}
},

View File

@ -1,5 +1,6 @@
package chat.revolt.internals
import chat.revolt.api.RevoltAPI
import chat.revolt.components.chat.AutocompleteSuggestion
object Autocomplete {
@ -16,6 +17,20 @@ object Autocomplete {
)
}.distinctBy { it.shortcode }
return unicodeResults
val customResults =
RevoltAPI.emojiCache.values.filter { it.name?.contains(query) ?: false }.map {
if (it.name != null) {
AutocompleteSuggestion.Emoji(
":${it.id}:",
null,
it,
query
)
} else {
null
}
}.filterNotNull().distinctBy { it.custom?.id }
return (unicodeResults + customResults)
}
}