Skip to content

Commit 8f1a629

Browse files
committed
Restore previous screenshot logic.
For this we had to change the `icon` property in `EmojiCategory` from `ImageVector` to `IconSource` # Conflicts: # features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt
1 parent ef556c6 commit 8f1a629

File tree

5 files changed

+71
-86
lines changed

5 files changed

+71
-86
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ private fun ThreadSummaryView(
319319
.widthIn(max = (maxWidth - 24.dp) * MessageEventBubbleDefaults.BUBBLE_WIDTH_RATIO),
320320
verticalAlignment = Alignment.CenterVertically,
321321
) {
322+
Text(
323+
text = threadSummary.numberOfReplies.toString(),
324+
style = ElementTheme.typography.fontBodySmMedium,
325+
color = ElementTheme.colors.textSecondary,
326+
)
327+
Spacer(modifier = Modifier.width(4.dp))
322328
Icon(
323329
modifier = Modifier.size(20.dp),
324330
imageVector = CompoundIcons.ThreadsSolid(),
@@ -819,7 +825,7 @@ internal fun TimelineItemEventRowPreview() = ElementPreview {
819825
@PreviewsDayNight
820826
@Composable
821827
internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview {
822-
Column {
828+
Column(modifier = Modifier.padding(vertical = 10.dp)) {
823829
sequenceOf(false, true).forEach { isMine ->
824830
ATimelineItemEventRow(
825831
event = aTimelineItemEvent(

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPicker.kt

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,30 +26,23 @@ import androidx.compose.material3.Tab
2626
import androidx.compose.runtime.Composable
2727
import androidx.compose.runtime.rememberCoroutineScope
2828
import androidx.compose.ui.Modifier
29-
import androidx.compose.ui.platform.LocalContext
3029
import androidx.compose.ui.res.stringResource
30+
import androidx.compose.ui.tooling.preview.PreviewParameter
3131
import androidx.compose.ui.unit.dp
32-
import io.element.android.compound.tokens.generated.CompoundIcons
3332
import io.element.android.emojibasebindings.Emoji
34-
import io.element.android.features.messages.impl.R
35-
import io.element.android.features.messages.impl.timeline.components.customreaction.DefaultEmojibaseProvider
3633
import io.element.android.features.messages.impl.timeline.components.customreaction.EmojiItem
3734
import io.element.android.features.messages.impl.timeline.components.customreaction.icon
38-
import io.element.android.features.messages.impl.timeline.components.customreaction.title
3935
import io.element.android.libraries.designsystem.preview.ElementPreview
4036
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
4137
import io.element.android.libraries.designsystem.text.toSp
4238
import io.element.android.libraries.designsystem.theme.components.Icon
39+
import io.element.android.libraries.designsystem.theme.components.IconSource
4340
import io.element.android.libraries.designsystem.theme.components.SearchBar
44-
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
4541
import io.element.android.libraries.ui.strings.CommonStrings
4642
import kotlinx.collections.immutable.ImmutableList
4743
import kotlinx.collections.immutable.ImmutableSet
4844
import kotlinx.collections.immutable.persistentSetOf
49-
import kotlinx.collections.immutable.toImmutableList
50-
import kotlinx.collections.immutable.toPersistentList
5145
import kotlinx.coroutines.launch
52-
import okhttp3.internal.immutableListOf
5346

5447
@OptIn(ExperimentalMaterial3Api::class)
5548
@Composable
@@ -86,10 +79,16 @@ fun EmojiPicker(
8679
state.categories.forEachIndexed { index, category ->
8780
Tab(
8881
icon = {
89-
Icon(
90-
imageVector = category.icon,
91-
contentDescription = stringResource(id = category.titleId)
92-
)
82+
when (category.icon) {
83+
is IconSource.Resource -> Icon(
84+
resourceId = category.icon.id,
85+
contentDescription = stringResource(id = category.titleId)
86+
)
87+
is IconSource.Vector -> Icon(
88+
imageVector = category.icon.vector,
89+
contentDescription = stringResource(id = category.titleId)
90+
)
91+
}
9392
},
9493
selected = pagerState.currentPage == index,
9594
onClick = {
@@ -141,34 +140,10 @@ private fun EmojiResults(
141140

142141
@PreviewsDayNight
143142
@Composable
144-
internal fun EmojiPickerPreview() = ElementPreview {
145-
val emojibase = DefaultEmojibaseProvider(LocalContext.current).emojibaseStore
146-
147-
// Simulate recent emojis with the first 10 emojis we can fetch
148-
val recentsCategory = EmojiCategory(
149-
titleId = R.string.emoji_picker_category_recent,
150-
icon = CompoundIcons.History(),
151-
emojis = emojibase.allEmojis.take(10).toPersistentList(),
152-
)
153-
154-
val providedCategories = emojibase.categories.map { (category, emojis) ->
155-
EmojiCategory(
156-
titleId = category.title,
157-
icon = category.icon,
158-
emojis = emojis.toPersistentList(),
159-
)
160-
}.toPersistentList()
161-
143+
internal fun EmojiPickerPreview(@PreviewParameter(EmojiPickerStateProvider::class) state: EmojiPickerState) = ElementPreview {
162144
EmojiPicker(
163145
onSelectEmoji = {},
164-
state = EmojiPickerState(
165-
categories = (immutableListOf(recentsCategory) + providedCategories).toImmutableList(),
166-
allEmojis = emojibase.allEmojis,
167-
searchQuery = "",
168-
isSearchActive = false,
169-
searchResults = SearchBarResultState.Initial(),
170-
eventSink = {},
171-
),
146+
state = state,
172147
selectedEmojis = persistentSetOf("😀", "😄", "😃"),
173148
modifier = Modifier.fillMaxWidth(),
174149
)

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerPresenter.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import io.element.android.features.messages.impl.timeline.components.customreact
2222
import io.element.android.features.messages.impl.timeline.components.customreaction.title
2323
import io.element.android.libraries.architecture.Presenter
2424
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
25+
import io.element.android.libraries.designsystem.theme.components.IconSource
2526
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
2627
import kotlinx.collections.immutable.ImmutableList
2728
import kotlinx.collections.immutable.toImmutableList
@@ -42,12 +43,23 @@ class EmojiPickerPresenter(
4243

4344
val recentEmojiIcon = CompoundIcons.History()
4445
val categories = remember {
45-
val providedCategories = emojibaseStore.categories.map { (category, emojis) -> EmojiCategory(category.title, category.icon, emojis) }
46+
val providedCategories = emojibaseStore.categories.map { (category, emojis) ->
47+
EmojiCategory(
48+
titleId = category.title,
49+
icon = IconSource.Vector(category.icon),
50+
emojis = emojis
51+
)
52+
}
4653
if (recentEmojis.isNotEmpty()) {
4754
val recentEmojis = recentEmojis.mapNotNull { recentEmoji ->
4855
emojibaseStore.allEmojis.find { it.unicode == recentEmoji }
4956
}.toImmutableList()
50-
val recentCategory = EmojiCategory(titleId = R.string.emoji_picker_category_recent, icon = recentEmojiIcon, emojis = recentEmojis)
57+
val recentCategory =
58+
EmojiCategory(
59+
titleId = R.string.emoji_picker_category_recent,
60+
icon = IconSource.Vector(recentEmojiIcon),
61+
emojis = recentEmojis
62+
)
5163
(listOf(recentCategory) + providedCategories).toImmutableList()
5264
} else {
5365
providedCategories.toImmutableList()

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
package io.element.android.features.messages.impl.timeline.components.customreaction.picker
99

1010
import androidx.annotation.StringRes
11-
import androidx.compose.ui.graphics.vector.ImageVector
1211
import io.element.android.emojibasebindings.Emoji
12+
import io.element.android.libraries.designsystem.theme.components.IconSource
1313
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
1414
import kotlinx.collections.immutable.ImmutableList
1515

@@ -27,6 +27,6 @@ data class EmojiPickerState(
2727
*/
2828
data class EmojiCategory(
2929
@StringRes val titleId: Int,
30-
val icon: ImageVector,
30+
val icon: IconSource,
3131
val emojis: ImmutableList<Emoji>,
3232
)

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/picker/EmojiPickerStateProvider.kt

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ package io.element.android.features.messages.impl.timeline.components.customreac
1010
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
1111
import io.element.android.emojibasebindings.Emoji
1212
import io.element.android.emojibasebindings.EmojibaseCategory
13+
import io.element.android.features.messages.impl.R
1314
import io.element.android.features.messages.impl.timeline.components.customreaction.icon
1415
import io.element.android.features.messages.impl.timeline.components.customreaction.title
16+
import io.element.android.libraries.designsystem.icons.CompoundDrawables
17+
import io.element.android.libraries.designsystem.theme.components.IconSource
1518
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
1619
import kotlinx.collections.immutable.ImmutableList
1720
import kotlinx.collections.immutable.persistentListOf
@@ -26,55 +29,44 @@ class EmojiPickerStateProvider : PreviewParameterProvider<EmojiPickerState> {
2629
anEmojiPickerState(
2730
isSearchActive = true,
2831
searchQuery = "smile",
29-
searchResults = SearchBarResultState.Results(
30-
persistentListOf(
31-
Emoji(
32-
"0x00",
33-
"grinning face",
34-
persistentListOf("grinning"),
35-
persistentListOf("smile, grin"),
36-
"😀",
37-
null
38-
),
39-
Emoji(
40-
"0x01",
41-
"crying face",
42-
persistentListOf("crying"),
43-
persistentListOf("smile, crying"),
44-
"\uD83E\uDD72",
45-
null
46-
),
47-
)
48-
)
32+
searchResults = SearchBarResultState.Results(emojiList())
4933
),
5034
)
5135
}
5236

37+
private fun recentEmojisCategory() = EmojiCategory(
38+
titleId = R.string.emoji_picker_category_recent,
39+
icon = IconSource.Resource(CompoundDrawables.ic_compound_history),
40+
emojis = emojiList(),
41+
)
42+
43+
private fun emojiList(): ImmutableList<Emoji> = persistentListOf(
44+
Emoji(
45+
"0x00",
46+
"grinning face",
47+
persistentListOf("grinning"),
48+
persistentListOf("smile, grin"),
49+
"😀",
50+
null
51+
),
52+
Emoji(
53+
"0x01",
54+
"crying face",
55+
persistentListOf("crying"),
56+
persistentListOf("smile, crying"),
57+
"\uD83E\uDD72",
58+
null
59+
)
60+
)
61+
5362
internal fun anEmojiPickerState(
54-
categories: ImmutableList<EmojiCategory> = EmojibaseCategory.entries.map {
63+
categories: ImmutableList<EmojiCategory> = (listOf(recentEmojisCategory()) + EmojibaseCategory.entries.map {
5564
EmojiCategory(
56-
it.title,
57-
it.icon,
58-
persistentListOf(
59-
Emoji(
60-
"0x00",
61-
"grinning face",
62-
persistentListOf("grinning"),
63-
persistentListOf("smile, grin"),
64-
"😀",
65-
null
66-
),
67-
Emoji(
68-
"0x01",
69-
"crying face",
70-
persistentListOf("crying"),
71-
persistentListOf("smile, crying"),
72-
"\uD83E\uDD72",
73-
null
74-
),
75-
)
65+
titleId = it.title,
66+
icon = IconSource.Vector(it.icon),
67+
emojis = emojiList(),
7668
)
77-
}.toImmutableList(),
69+
}).toImmutableList(),
7870
allEmojis: ImmutableList<Emoji> = categories.flatMap { it.emojis }.toImmutableList(),
7971
searchQuery: String = "",
8072
isSearchActive: Boolean = false,

0 commit comments

Comments
 (0)