mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Extract EmojiPicker into libraries/emoji with Renderer/Presenter pattern
This commit is contained in:
-15
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.emoji.api
|
||||
|
||||
import io.element.android.emojibasebindings.EmojibaseStore
|
||||
|
||||
interface EmojibaseProvider {
|
||||
val emojibaseStore: EmojibaseStore
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.emoji.api.picker
|
||||
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
|
||||
fun interface EmojiPickerPresenter : Presenter<EmojiPickerState>
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.emoji.api.picker
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.ui.Modifier
|
||||
import io.element.android.emojibasebindings.Emoji
|
||||
import kotlinx.collections.immutable.ImmutableSet
|
||||
|
||||
@Immutable
|
||||
interface EmojiPickerRenderer {
|
||||
/**
|
||||
* @param state opaque state produced by [EmojiPickerPresenter.present].
|
||||
* @param onSelectEmoji invoked when the user taps an emoji (including a skin-tone variant).
|
||||
* @param selectedEmojis emojis to visually mark as already selected.
|
||||
* @param modifier layout modifier for the picker container.
|
||||
* @param contentDescription accessibility label for each emoji cell.
|
||||
*/
|
||||
@Composable
|
||||
fun Render(
|
||||
state: EmojiPickerState,
|
||||
onSelectEmoji: (Emoji) -> Unit,
|
||||
selectedEmojis: ImmutableSet<String>,
|
||||
modifier: Modifier = Modifier,
|
||||
contentDescription: @Composable (Emoji, Boolean) -> String = { emoji, _ -> emoji.unicode },
|
||||
)
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.emoji.api.picker
|
||||
|
||||
/**
|
||||
* Opaque state produced by an [EmojiPickerPresenter] and consumed by an [EmojiPickerRenderer].
|
||||
*/
|
||||
interface EmojiPickerState {
|
||||
/**
|
||||
* `true` once the picker has finished loading its data and is safe to display.
|
||||
* Callers should typically defer showing the picker (or its container, e.g. a bottom sheet)
|
||||
* until this flips to `true` to avoid flashing an empty picker.
|
||||
*/
|
||||
val isReady: Boolean
|
||||
}
|
||||
Reference in New Issue
Block a user