Skip to content

Commit bd26c6d

Browse files
committed
Restore previous screenshot logic.
For this we had to change the `icon` property in `EmojiCategory` from `ImageVector` to `IconSource`
1 parent 434b80e commit bd26c6d

File tree

5 files changed

+78
-104
lines changed

5 files changed

+78
-104
lines changed

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.features.messages.impl.timeline.components
99

1010
import android.annotation.SuppressLint
1111
import androidx.compose.foundation.background
12+
import androidx.compose.foundation.border
1213
import androidx.compose.foundation.clickable
1314
import androidx.compose.foundation.gestures.Orientation
1415
import androidx.compose.foundation.gestures.draggable
@@ -40,7 +41,6 @@ import androidx.compose.ui.draw.clip
4041
import androidx.compose.ui.graphics.graphicsLayer
4142
import androidx.compose.ui.platform.LocalViewConfiguration
4243
import androidx.compose.ui.platform.ViewConfiguration
43-
import androidx.compose.ui.res.pluralStringResource
4444
import androidx.compose.ui.res.stringResource
4545
import androidx.compose.ui.semantics.clearAndSetSemantics
4646
import androidx.compose.ui.semantics.hideFromAccessibility
@@ -105,7 +105,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MessageConten
105105
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
106106
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
107107
import io.element.android.libraries.matrix.api.timeline.item.event.getAvatarUrl
108-
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
109108
import io.element.android.libraries.matrix.api.timeline.item.event.getDisplayName
110109
import io.element.android.libraries.matrix.api.user.MatrixUser
111110
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
@@ -115,7 +114,6 @@ import io.element.android.libraries.matrix.ui.messages.sender.SenderName
115114
import io.element.android.libraries.matrix.ui.messages.sender.SenderNameMode
116115
import io.element.android.libraries.testtags.TestTags
117116
import io.element.android.libraries.testtags.testTag
118-
import io.element.android.libraries.ui.strings.CommonPlurals
119117
import io.element.android.libraries.ui.strings.CommonStrings
120118
import io.element.android.libraries.ui.utils.time.isTalkbackActive
121119
import io.element.android.wysiwyg.link.Link
@@ -313,24 +311,25 @@ private fun ThreadSummaryView(
313311
shape = RoundedCornerShape(8.dp)
314312
clip = true
315313
}
316-
.background(MessageEventBubbleDefaults.backgroundBubbleColor(isOutgoing))
314+
.border(1.dp, ElementTheme.colors.borderDisabled, RoundedCornerShape(8.dp))
315+
// .background(MessageEventBubbleDefaults.backgroundBubbleColor(isOutgoing))
317316
.niceClickable(onClick)
318317
.padding(horizontal = 12.dp, vertical = 10.dp)
319318
.widthIn(max = (maxWidth - 24.dp) * MessageEventBubbleDefaults.BUBBLE_WIDTH_RATIO),
320319
verticalAlignment = Alignment.CenterVertically,
321320
) {
321+
Text(
322+
text = threadSummary.numberOfReplies.toString(),
323+
style = ElementTheme.typography.fontBodySmMedium,
324+
color = ElementTheme.colors.textSecondary,
325+
)
326+
Spacer(modifier = Modifier.width(4.dp))
322327
Icon(
323328
modifier = Modifier.size(20.dp),
324329
imageVector = CompoundIcons.ThreadsSolid(),
325330
contentDescription = null,
326331
tint = ElementTheme.colors.iconSecondary,
327332
)
328-
Spacer(modifier = Modifier.width(4.dp))
329-
Text(
330-
text = pluralStringResource(CommonPlurals.common_replies, threadSummary.numberOfReplies.toInt(), threadSummary.numberOfReplies),
331-
style = ElementTheme.typography.fontBodySmMedium,
332-
color = ElementTheme.colors.textSecondary,
333-
)
334333

335334
Spacer(modifier = Modifier.width(8.dp))
336335

@@ -347,14 +346,14 @@ private fun ThreadSummaryView(
347346
)
348347

349348
Spacer(modifier = Modifier.width(8.dp))
350-
351-
Text(
352-
text = latestEvent.senderProfile.getDisambiguatedDisplayName(latestEvent.senderId),
353-
style = ElementTheme.typography.fontBodySmMedium,
354-
color = ElementTheme.colors.textSecondary,
355-
)
356-
357-
Spacer(modifier = Modifier.width(4.dp))
349+
//
350+
// Text(
351+
// text = latestEvent.senderProfile.getDisambiguatedDisplayName(latestEvent.senderId),
352+
// style = ElementTheme.typography.fontBodySmMedium,
353+
// color = ElementTheme.colors.textSecondary,
354+
// )
355+
//
356+
// Spacer(modifier = Modifier.width(4.dp))
358357

359358
latestEventText?.let {
360359
Text(
@@ -817,7 +816,7 @@ internal fun TimelineItemEventRowPreview() = ElementPreview {
817816
@PreviewsDayNight
818817
@Composable
819818
internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview {
820-
Column {
819+
Column(modifier = Modifier.padding(vertical = 10.dp)) {
821820
sequenceOf(false, true).forEach { isMine ->
822821
ATimelineItemEventRow(
823822
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: 10 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,19 @@ 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+
category.title,
49+
IconSource.Vector(category.icon),
50+
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(titleId = R.string.emoji_picker_category_recent, icon = IconSource.Vector(recentEmojiIcon), emojis = recentEmojis)
5159
(listOf(recentCategory) + providedCategories).toImmutableList()
5260
} else {
5361
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)