mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-10-31 16:22:49 +00:00
Migrate EmojiPickerPresenter to assisted-factory pattern with EmptyGetRecentEmojis
This commit is contained in:
@@ -18,5 +18,5 @@ dependencies {
|
||||
implementation(projects.libraries.matrix.api)
|
||||
|
||||
implementation(libs.kotlinx.collections.immutable)
|
||||
implementation(libs.matrix.emojibase.bindings)
|
||||
api(libs.matrix.emojibase.bindings)
|
||||
}
|
||||
|
||||
+6
-1
@@ -8,5 +8,10 @@
|
||||
package io.element.android.libraries.emoji.api.picker
|
||||
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.emoji.api.recentemojis.GetRecentEmojis
|
||||
|
||||
fun interface EmojiPickerPresenter : Presenter<EmojiPickerState>
|
||||
fun interface EmojiPickerPresenter : Presenter<EmojiPickerState> {
|
||||
fun interface Factory {
|
||||
fun create(getRecentEmojis: GetRecentEmojis): EmojiPickerPresenter
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -9,6 +9,7 @@
|
||||
package io.element.android.libraries.emoji.api.recentemojis
|
||||
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
/**
|
||||
* Returns the list of recently used emojis for reactions.
|
||||
@@ -16,3 +17,11 @@ import kotlinx.collections.immutable.ImmutableList
|
||||
fun interface GetRecentEmojis {
|
||||
suspend operator fun invoke(): Result<ImmutableList<String>>
|
||||
}
|
||||
|
||||
/**
|
||||
* A [GetRecentEmojis] that never returns any recent emojis. Handy for pickers that don't want
|
||||
* a "Recent" tab (e.g. the user-status picker).
|
||||
*/
|
||||
object EmptyGetRecentEmojis : GetRecentEmojis {
|
||||
override suspend fun invoke(): Result<ImmutableList<String>> = Result.success(persistentListOf())
|
||||
}
|
||||
|
||||
+14
-5
@@ -17,8 +17,10 @@ import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.platform.LocalInspectionMode
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedFactory
|
||||
import dev.zacsweers.metro.AssistedInject
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.emojibasebindings.Emoji
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||
@@ -37,13 +39,18 @@ import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
@Inject
|
||||
@ContributesBinding(SessionScope::class)
|
||||
@AssistedInject
|
||||
class DefaultEmojiPickerPresenter(
|
||||
private val emojibaseProvider: EmojibaseProvider,
|
||||
private val getRecentEmojis: GetRecentEmojis,
|
||||
@Assisted private val getRecentEmojis: GetRecentEmojis,
|
||||
private val coroutineDispatchers: CoroutineDispatchers,
|
||||
) : EmojiPickerPresenter {
|
||||
@AssistedFactory
|
||||
@ContributesBinding(SessionScope::class)
|
||||
interface Factory : EmojiPickerPresenter.Factory {
|
||||
override fun create(getRecentEmojis: GetRecentEmojis): DefaultEmojiPickerPresenter
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun present(): EmojiPickerState {
|
||||
val queryState = rememberTextFieldState()
|
||||
@@ -86,7 +93,9 @@ class DefaultEmojiPickerPresenter(
|
||||
val searchQuery = queryState.text.toString()
|
||||
LaunchedEffect(searchQuery, data) {
|
||||
if (searchQuery.isEmpty() || data.allEmojis.isEmpty()) {
|
||||
emojiResults = SearchBarResultState.Initial()
|
||||
if (emojiResults !is SearchBarResultState.Initial) {
|
||||
emojiResults = SearchBarResultState.Initial()
|
||||
}
|
||||
return@LaunchedEffect
|
||||
}
|
||||
delay(100.milliseconds)
|
||||
|
||||
Reference in New Issue
Block a user