fix: issue where emoji picker animation blocks UI thread

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2023-11-12 20:24:09 +01:00
parent aa96944f9d
commit 182566dcc0
1 changed files with 16 additions and 3 deletions

View File

@ -79,7 +79,6 @@ import chat.revolt.internals.FitzpatrickSkinTone
import chat.revolt.internals.UnicodeEmojiSection import chat.revolt.internals.UnicodeEmojiSection
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun EmojiPicker(onEmojiSelected: (String) -> Unit) { fun EmojiPicker(onEmojiSelected: (String) -> Unit) {
val view = LocalView.current val view = LocalView.current
@ -280,18 +279,23 @@ fun EmojiPicker(onEmojiSelected: (String) -> Unit) {
FitzpatrickSkinTone.None -> stringResource( FitzpatrickSkinTone.None -> stringResource(
R.string.emoji_picker_skin_tone_none R.string.emoji_picker_skin_tone_none
) )
FitzpatrickSkinTone.Light -> stringResource( FitzpatrickSkinTone.Light -> stringResource(
R.string.emoji_picker_skin_tone_fitzpatrick_1_2 R.string.emoji_picker_skin_tone_fitzpatrick_1_2
) )
FitzpatrickSkinTone.MediumLight -> stringResource( FitzpatrickSkinTone.MediumLight -> stringResource(
R.string.emoji_picker_skin_tone_fitzpatrick_3 R.string.emoji_picker_skin_tone_fitzpatrick_3
) )
FitzpatrickSkinTone.Medium -> stringResource( FitzpatrickSkinTone.Medium -> stringResource(
R.string.emoji_picker_skin_tone_fitzpatrick_4 R.string.emoji_picker_skin_tone_fitzpatrick_4
) )
FitzpatrickSkinTone.MediumDark -> stringResource( FitzpatrickSkinTone.MediumDark -> stringResource(
R.string.emoji_picker_skin_tone_fitzpatrick_5 R.string.emoji_picker_skin_tone_fitzpatrick_5
) )
FitzpatrickSkinTone.Dark -> stringResource( FitzpatrickSkinTone.Dark -> stringResource(
R.string.emoji_picker_skin_tone_fitzpatrick_6 R.string.emoji_picker_skin_tone_fitzpatrick_6
) )
@ -371,7 +375,7 @@ fun EmojiPicker(onEmojiSelected: (String) -> Unit) {
pickerList.indexOfFirst { pickerList.indexOfFirst {
it is EmojiPickerItem.Section && it.category is Category.ServerEmoteCategory && it.category.server == server it is EmojiPickerItem.Section && it.category is Category.ServerEmoteCategory && it.category.server == server
} }
gridState.animateScrollToItem(index) gridState.scrollToItem(index)
} }
} }
.then( .then(
@ -418,7 +422,7 @@ fun EmojiPicker(onEmojiSelected: (String) -> Unit) {
pickerList.indexOfFirst { pickerList.indexOfFirst {
it is EmojiPickerItem.Section && it.category is Category.UnicodeEmojiCategory && it.category.definition == category it is EmojiPickerItem.Section && it.category is Category.UnicodeEmojiCategory && it.category.definition == category
} }
gridState.animateScrollToItem(index) gridState.scrollToItem(index)
} }
} }
.then( .then(
@ -440,27 +444,35 @@ fun EmojiPicker(onEmojiSelected: (String) -> Unit) {
UnicodeEmojiSection.Smileys -> painterResource( UnicodeEmojiSection.Smileys -> painterResource(
R.drawable.ic_emoticon_24dp R.drawable.ic_emoticon_24dp
) )
UnicodeEmojiSection.People -> painterResource( UnicodeEmojiSection.People -> painterResource(
R.drawable.ic_human_greeting_variant_24dp R.drawable.ic_human_greeting_variant_24dp
) )
UnicodeEmojiSection.Animals -> painterResource( UnicodeEmojiSection.Animals -> painterResource(
R.drawable.ic_snake_24dp R.drawable.ic_snake_24dp
) )
UnicodeEmojiSection.Food -> painterResource( UnicodeEmojiSection.Food -> painterResource(
R.drawable.ic_glass_mug_variant_24dp R.drawable.ic_glass_mug_variant_24dp
) )
UnicodeEmojiSection.Travel -> painterResource( UnicodeEmojiSection.Travel -> painterResource(
R.drawable.ic_train_bus_24dp R.drawable.ic_train_bus_24dp
) )
UnicodeEmojiSection.Activities -> painterResource( UnicodeEmojiSection.Activities -> painterResource(
R.drawable.ic_skate_24dp R.drawable.ic_skate_24dp
) )
UnicodeEmojiSection.Objects -> painterResource( UnicodeEmojiSection.Objects -> painterResource(
R.drawable.ic_table_chair_24dp R.drawable.ic_table_chair_24dp
) )
UnicodeEmojiSection.Symbols -> painterResource( UnicodeEmojiSection.Symbols -> painterResource(
R.drawable.ic_symbol_24dp R.drawable.ic_symbol_24dp
) )
UnicodeEmojiSection.Flags -> painterResource( UnicodeEmojiSection.Flags -> painterResource(
R.drawable.ic_flag_24dp R.drawable.ic_flag_24dp
) )
@ -613,6 +625,7 @@ fun ColumnScope.PickerItem(
is Category.UnicodeEmojiCategory -> stringResource( is Category.UnicodeEmojiCategory -> stringResource(
item.category.definition.nameResource item.category.definition.nameResource
) )
is Category.ServerEmoteCategory -> is Category.ServerEmoteCategory ->
item.category.server.name item.category.server.name
?: stringResource(R.string.unknown) ?: stringResource(R.string.unknown)