feat: custom emote autocomplete
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
2d911f6e86
commit
924568a7b3
|
|
@ -57,6 +57,7 @@ import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.toArgb
|
import androidx.compose.ui.graphics.toArgb
|
||||||
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.platform.testTag
|
import androidx.compose.ui.platform.testTag
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
|
@ -74,8 +75,10 @@ import androidx.core.widget.addTextChangedListener
|
||||||
import chat.revolt.R
|
import chat.revolt.R
|
||||||
import chat.revolt.activities.RevoltTweenFloat
|
import chat.revolt.activities.RevoltTweenFloat
|
||||||
import chat.revolt.activities.RevoltTweenInt
|
import chat.revolt.activities.RevoltTweenInt
|
||||||
|
import chat.revolt.api.REVOLT_FILES
|
||||||
import chat.revolt.api.schemas.ChannelType
|
import chat.revolt.api.schemas.ChannelType
|
||||||
import chat.revolt.api.schemas.Member
|
import chat.revolt.api.schemas.Member
|
||||||
|
import chat.revolt.components.generic.RemoteImage
|
||||||
import chat.revolt.internals.Autocomplete
|
import chat.revolt.internals.Autocomplete
|
||||||
import kotlinx.coroutines.launch
|
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 = {
|
icon = {
|
||||||
if (item.unicode != null) {
|
if (item.unicode != null) {
|
||||||
Text(
|
Text(
|
||||||
|
|
@ -299,10 +308,13 @@ fun NativeMessageField(
|
||||||
style = MaterialTheme.typography.bodyMedium
|
style = MaterialTheme.typography.bodyMedium
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Icon(
|
RemoteImage(
|
||||||
painter = painterResource(R.drawable.ic_emoticon_24dp),
|
url = "$REVOLT_FILES/emojis/${item.custom?.id}/emoji.gif",
|
||||||
contentDescription = null,
|
description = null,
|
||||||
modifier = Modifier.size(SuggestionChipDefaults.IconSize)
|
contentScale = ContentScale.Fit,
|
||||||
|
modifier = Modifier
|
||||||
|
.size(SuggestionChipDefaults.IconSize)
|
||||||
|
.align(Alignment.CenterHorizontally)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package chat.revolt.internals
|
package chat.revolt.internals
|
||||||
|
|
||||||
|
import chat.revolt.api.RevoltAPI
|
||||||
import chat.revolt.components.chat.AutocompleteSuggestion
|
import chat.revolt.components.chat.AutocompleteSuggestion
|
||||||
|
|
||||||
object Autocomplete {
|
object Autocomplete {
|
||||||
|
|
@ -16,6 +17,20 @@ object Autocomplete {
|
||||||
)
|
)
|
||||||
}.distinctBy { it.shortcode }
|
}.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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue