Merge branch 'develop' into feature/valere/support_verification_violation_banner

This commit is contained in:
Benoit Marty 2025-02-18 15:42:08 +01:00 committed by GitHub
commit 36d5528904
625 changed files with 6274 additions and 2292 deletions

View file

@ -9,6 +9,7 @@ package io.element.android.features.messages.impl
import android.app.Activity
import android.content.Context
import androidx.activity.compose.LocalActivity
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
@ -17,7 +18,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.Lifecycle
import com.bumble.appyx.core.lifecycle.subscribe
import com.bumble.appyx.core.modality.BuildContext
@ -223,7 +223,7 @@ class MessagesNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
val activity = LocalContext.current as Activity
val activity = requireNotNull(LocalActivity.current)
val isDark = ElementTheme.isLightTheme.not()
CompositionLocalProvider(
LocalTimelineItemPresenterFactories provides timelineItemPresenterFactories,

View file

@ -522,14 +522,14 @@ private fun CantSendMessageBanner() {
Row(
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.secondary)
.background(ElementTheme.colors.bgSubtleSecondary)
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
Text(
text = stringResource(id = R.string.screen_room_timeline_no_permission_to_post),
color = MaterialTheme.colorScheme.onSecondary,
color = ElementTheme.colors.textSecondary,
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center,
fontStyle = FontStyle.Italic,

View file

@ -27,7 +27,6 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
@ -253,7 +252,7 @@ private fun MessageSummary(
) {
val content: @Composable () -> Unit
val icon: @Composable () -> Unit = { Avatar(avatarData = event.senderAvatar.copy(size = AvatarSize.MessageActionSender)) }
val contentStyle = ElementTheme.typography.fontBodyMdRegular.copy(color = MaterialTheme.colorScheme.secondary)
val contentStyle = ElementTheme.typography.fontBodyMdRegular.copy(color = ElementTheme.colors.textSecondary)
@Composable
fun ContentForBody(body: String) {
@ -316,7 +315,7 @@ private fun MessageSummary(
Text(
text = sentTimeFull,
style = ElementTheme.typography.fontBodyXsRegular,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
textAlign = TextAlign.End,
)
}
@ -358,7 +357,7 @@ private fun EmojiReactionsRow(
Icon(
imageVector = CompoundIcons.ReactionAdd(),
contentDescription = stringResource(id = CommonStrings.a11y_react_with_other_emojis),
tint = MaterialTheme.colorScheme.secondary,
tint = ElementTheme.colors.iconSecondary,
modifier = Modifier
.size(24.dp)
.clickable(

View file

@ -149,6 +149,7 @@ internal fun SuggestionsPickerViewPreview() {
normalizedPowerLevel = 0L,
isIgnored = false,
role = RoomMember.Role.USER,
membershipChangeReason = null,
)
val anAlias = remember { RoomAlias("#room:domain.org") }
SuggestionsPickerView(

View file

@ -8,6 +8,7 @@
package io.element.android.features.messages.impl.pinned
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.core.coroutine.mapState
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn
@ -26,6 +27,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.withContext
import javax.inject.Inject
@SingleIn(RoomScope::class)
@ -33,6 +35,7 @@ class PinnedEventsTimelineProvider @Inject constructor(
private val room: MatrixRoom,
private val syncService: SyncService,
private val featureFlagService: FeatureFlagService,
private val dispatchers: CoroutineDispatchers,
) : TimelineProvider {
private val _timelineStateFlow: MutableStateFlow<AsyncData<Timeline>> =
MutableStateFlow(AsyncData.Uninitialized)
@ -100,7 +103,9 @@ class PinnedEventsTimelineProvider @Inject constructor(
when (timelineStateFlow.value) {
is AsyncData.Uninitialized, is AsyncData.Failure -> {
timelineStateFlow.emit(AsyncData.Loading())
room.pinnedEventsTimeline()
withContext(dispatchers.io) {
room.pinnedEventsTimeline()
}
.fold(
{ timelineStateFlow.emit(AsyncData.Success(it)) },
{ timelineStateFlow.emit(AsyncData.Failure(it)) }

View file

@ -108,7 +108,7 @@ private fun PinnedMessagesBannerRow(
Icon(
imageVector = CompoundIcons.PinSolid(),
contentDescription = null,
tint = ElementTheme.materialColors.secondary,
tint = ElementTheme.colors.iconSecondary,
modifier = Modifier
.padding(horizontal = 10.dp)
.size(20.dp)

View file

@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@ -113,7 +112,7 @@ fun ReportMessageView(
Text(
text = stringResource(R.string.screen_report_content_block_user_hint),
style = ElementTheme.typography.fontBodyMdRegular,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
)
}
Switch(

View file

@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Alignment
@ -76,7 +75,7 @@ fun MessagesReactionButton(
.background(Color.Transparent)
// Outer border, same colour as background
.border(
BorderStroke(2.dp, MaterialTheme.colorScheme.background),
BorderStroke(2.dp, ElementTheme.colors.bgCanvasDefault),
shape = RoundedCornerShape(corner = CornerSize(14.dp))
)
.padding(vertical = 2.dp, horizontal = 2.dp)
@ -122,7 +121,7 @@ private fun TextContent(
.height(REACTION_EMOJI_LINE_HEIGHT.toDp()),
text = text,
style = ElementTheme.typography.fontBodyMdRegular,
color = ElementTheme.materialColors.primary
color = ElementTheme.colors.textPrimary
)
@Composable
@ -131,7 +130,7 @@ private fun IconContent(
) = Icon(
resourceId = resourceId,
contentDescription = stringResource(id = R.string.screen_room_timeline_add_reaction),
tint = ElementTheme.materialColors.secondary,
tint = ElementTheme.colors.iconSecondary,
modifier = Modifier
.size(ADD_EMOJI_SIZE)
)
@ -164,7 +163,7 @@ private fun ReactionContent(
Spacer(modifier = Modifier.width(4.dp))
Text(
text = reaction.count.toString(),
color = if (reaction.isHighlighted) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.secondary,
color = if (reaction.isHighlighted) ElementTheme.colors.textPrimary else ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
)
}

View file

@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -45,7 +44,7 @@ fun TimelineEventTimestampView(
val hasError = event.localSendState is LocalEventSendState.Failed
val hasEncryptionCritical = event.messageShield?.isCritical.orFalse()
val isMessageEdited = event.content.isEdited()
val tint = if (hasError || hasEncryptionCritical) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.secondary
val tint = if (hasError || hasEncryptionCritical) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary
Row(
modifier = Modifier
.padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing))

View file

@ -169,7 +169,7 @@ private fun Modifier.focusedEvent(
val highlightedLineColor = ElementTheme.colors.textActionAccent
val gradientColors = listOf(
ElementTheme.colors.highlightedMessageBackgroundColor,
ElementTheme.materialColors.background
ElementTheme.colors.bgCanvasDefault,
)
val verticalOffset = focusedEventOffset.toPx()
val verticalRatio = 0.7f

View file

@ -77,7 +77,7 @@ private fun TimelineItemAttachmentHeaderView(
modifier = Modifier
.size(iconSize)
.clip(CircleShape)
.background(ElementTheme.materialColors.background),
.background(ElementTheme.colors.bgCanvasDefault),
contentAlignment = Alignment.Center,
) {
icon()
@ -86,14 +86,14 @@ private fun TimelineItemAttachmentHeaderView(
Column {
Text(
text = filename,
color = ElementTheme.materialColors.primary,
color = ElementTheme.colors.textPrimary,
maxLines = 2,
style = ElementTheme.typography.fontBodyLgRegular,
overflow = TextOverflow.Ellipsis
)
Text(
text = fileExtensionAndSize,
color = ElementTheme.materialColors.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodySmRegular,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
@ -119,7 +119,7 @@ private fun TimelineItemAttachmentCaptionView(
Text(
modifier = modifier,
text = caption,
color = ElementTheme.materialColors.primary,
color = ElementTheme.colors.textPrimary,
style = ElementTheme.typography.fontBodyLgRegular,
onTextLayout = ContentAvoidingLayout.measureLastTextLine(
onContentLayoutChange = onContentLayoutChange,

View file

@ -38,7 +38,7 @@ fun TimelineItemAudioView(
Icon(
imageVector = Icons.Outlined.GraphicEq,
contentDescription = null,
tint = ElementTheme.materialColors.primary,
tint = ElementTheme.colors.iconPrimary,
modifier = Modifier
.size(16.dp),
)

View file

@ -38,7 +38,7 @@ fun TimelineItemFileView(
Icon(
resourceId = CompoundDrawables.ic_compound_attachment,
contentDescription = null,
tint = ElementTheme.materialColors.primary,
tint = ElementTheme.colors.iconPrimary,
modifier = Modifier
.size(16.dp)
.rotate(-45f),

View file

@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -53,7 +52,7 @@ fun TimelineItemInformativeView(
) {
Icon(
resourceId = iconResourceId,
tint = MaterialTheme.colorScheme.secondary,
tint = ElementTheme.colors.iconSecondary,
contentDescription = iconDescription,
modifier = Modifier.size(16.dp)
)
@ -61,7 +60,7 @@ fun TimelineItemInformativeView(
Spacer(modifier = Modifier.width(4.dp))
Text(
fontStyle = FontStyle.Italic,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
text = text
)

View file

@ -7,7 +7,6 @@
package io.element.android.features.messages.impl.timeline.components.event
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
@ -25,7 +24,7 @@ fun TimelineItemStateView(
) {
Text(
modifier = modifier,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
text = content.body,
textAlign = TextAlign.Center,

View file

@ -91,7 +91,7 @@ fun TimelineItemVoiceView(
Spacer(Modifier.width(8.dp))
Text(
text = state.time,
color = ElementTheme.materialColors.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodySmMedium,
maxLines = 1,
overflow = TextOverflow.Ellipsis,

View file

@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
@ -67,7 +66,7 @@ fun GroupHeaderView(
) {
Text(
text = text,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
)
val rotation: Float by animateFloatAsState(
@ -82,7 +81,7 @@ fun GroupHeaderView(
modifier = Modifier.rotate(rotation),
imageVector = CompoundIcons.ChevronRight(),
contentDescription = null,
tint = MaterialTheme.colorScheme.secondary
tint = ElementTheme.colors.iconSecondary
)
}
}

View file

@ -172,7 +172,7 @@ private fun AggregatedReactionButton(
val textColor = if (isHighlighted) {
MaterialTheme.colorScheme.inversePrimary
} else {
MaterialTheme.colorScheme.primary
ElementTheme.colors.textPrimary
}
val roundedCornerShape = RoundedCornerShape(corner = CornerSize(percent = 50))
@ -250,12 +250,12 @@ private fun SenderRow(
text = name,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = MaterialTheme.colorScheme.primary,
color = ElementTheme.colors.textPrimary,
style = ElementTheme.typography.fontBodyMdRegular,
)
Text(
text = sentTime,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = ElementTheme.typography.fontBodySmRegular,
@ -263,7 +263,7 @@ private fun SenderRow(
}
Text(
text = userId,
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = ElementTheme.typography.fontBodySmRegular,

View file

@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -131,7 +130,7 @@ private fun ReadReceiptsAvatars(
) {
val avatarSize = AvatarSize.TimelineReadReceipt.dp
val avatarStrokeSize = 1.dp
val avatarStrokeColor = MaterialTheme.colorScheme.background
val avatarStrokeColor = ElementTheme.colors.bgCanvasDefault
val receiptDescription = computeReceiptDescription(receipts)
Row(
modifier = modifier

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -39,7 +38,7 @@ internal fun TimelineItemDaySeparatorView(
Text(
text = model.formattedDate,
style = ElementTheme.typography.fontBodyMdMedium,
color = MaterialTheme.colorScheme.primary,
color = ElementTheme.colors.textPrimary,
)
}
}

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -41,7 +40,7 @@ fun TimelineItemRoomBeginningView(
stringResource(id = R.string.screen_room_timeline_beginning_of_room, roomName)
}
Text(
color = MaterialTheme.colorScheme.secondary,
color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
text = text,
textAlign = TextAlign.Center,

View file

@ -12,7 +12,11 @@
<string name="screen_report_content_block_user_hint">"Kryss av for om du vil skjule alle nåværende og fremtidige meldinger fra denne brukeren"</string>
<string name="screen_report_content_explanation">"Denne meldingen vil bli rapportert til hjemmeserverens administratorer. De vil ikke kunne lese noen krypterte meldinger."</string>
<string name="screen_report_content_hint">"Begrunnelse for å rapportere dette innholdet"</string>
<string name="screen_room_attachment_source_camera">"Kamera"</string>
<string name="screen_room_attachment_source_camera_photo">"Ta bilde"</string>
<string name="screen_room_attachment_source_camera_video">"Ta opp video"</string>
<string name="screen_room_attachment_source_files">"Vedlegg"</string>
<string name="screen_room_attachment_source_gallery">"Foto- og videobibliotek"</string>
<string name="screen_room_encrypted_history_banner">"Meldingshistorikken er for øyeblikket ikke tilgjengelig."</string>
<string name="screen_room_encrypted_history_banner_unverified">"Meldingshistorikk er ikke tilgjengelig i dette rommet. Bekreft denne enheten for å se meldingshistorikken din."</string>
<string name="screen_room_invite_again_alert_message">"Vil du invitere dem tilbake?"</string>

View file

@ -31,6 +31,7 @@
<string name="screen_room_timeline_add_reaction">"Lägg till emoji"</string>
<string name="screen_room_timeline_beginning_of_room">"Det här är början på %1$s."</string>
<string name="screen_room_timeline_beginning_of_room_no_name">"Detta är början på det här samtalet."</string>
<string name="screen_room_timeline_legacy_call">"Samtalet stöds inte. Fråga om den som ringer kan använda den nya Element X-appen."</string>
<string name="screen_room_timeline_less_reactions">"Visa mindre"</string>
<string name="screen_room_timeline_message_copied">"Meddelande kopierat"</string>
<string name="screen_room_timeline_no_permission_to_post">"Du är inte behörig att göra inlägg i det här rummet"</string>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="emoji_picker_category_activity">"Aktiviteler"</string>
<string name="emoji_picker_category_flags">"Bayraklar"</string>
<string name="emoji_picker_category_foods">"Yiyecek ve İçecek"</string>
<string name="emoji_picker_category_nature">"Hayvanlar ve Doğa"</string>
<string name="emoji_picker_category_objects">"Nesneler"</string>
<string name="emoji_picker_category_people">"İfadeler ve İnsanlar"</string>
<string name="emoji_picker_category_places">"Seyahat ve Yerler"</string>
<string name="emoji_picker_category_symbols">"Simgeler"</string>
<string name="screen_report_content_block_user">"Kullanıcıyı engelle"</string>
<string name="screen_report_content_block_user_hint">"Bu kullanıcıdan gelen mevcut ve gelecekteki tüm mesajları gizlemek isteyip istemediğinizi işaretleyin"</string>
<string name="screen_report_content_explanation">"Bu mesaj ana sunucunuzun yöneticisine bildirilecektir. Şifrelenmiş mesajları okuyamayacaklardır."</string>
<string name="screen_report_content_hint">"Bu içeriğin bildirilme nedeni"</string>
<string name="screen_room_attachment_source_camera">"Kamera"</string>
<string name="screen_room_attachment_source_camera_photo">"Fotoğraf çek"</string>
<string name="screen_room_attachment_source_camera_video">"Video kaydet"</string>
<string name="screen_room_attachment_source_files">"Ek"</string>
<string name="screen_room_attachment_source_gallery">"Fotoğraf ve Video Kütüphanesi"</string>
<string name="screen_room_attachment_source_location">"Konum"</string>
<string name="screen_room_attachment_source_poll">"Anket"</string>
<string name="screen_room_attachment_text_formatting">"Metin Biçimlendirme"</string>
<string name="screen_room_encrypted_history_banner">"Mesaj geçmişi şu anda kullanılamıyor."</string>
<string name="screen_room_encrypted_history_banner_unverified">"Mesaj geçmişi bu odada kullanılamıyor. Mesaj geçmişinizi görmek için bu cihazı doğrulayın."</string>
<string name="screen_room_invite_again_alert_message">"Onları geri davet etmek ister misin?"</string>
<string name="screen_room_invite_again_alert_title">"Bu sohbette yalnızsın"</string>
<string name="screen_room_mentions_at_room_subtitle">"Tüm odaya bildir"</string>
<string name="screen_room_mentions_at_room_title">"Herkes"</string>
<string name="screen_room_retry_send_menu_send_again_action">"Tekrar gönder"</string>
<string name="screen_room_retry_send_menu_title">"Mesajınız gönderilemedi"</string>
<string name="screen_room_timeline_add_reaction">"Emoji ekle"</string>
<string name="screen_room_timeline_beginning_of_room">"Bu, %1$s odasının başlangıcıdır."</string>
<string name="screen_room_timeline_beginning_of_room_no_name">"Bu konuşmanın başlangıcıdır."</string>
<string name="screen_room_timeline_legacy_call">"Desteklenmeyen çağrı. Arayanın yeni Element X uygulamasını kullanıp kullanamayacağını sorun."</string>
<string name="screen_room_timeline_less_reactions">"Daha az göster"</string>
<string name="screen_room_timeline_message_copied">"Mesaj kopyalandı"</string>
<string name="screen_room_timeline_no_permission_to_post">"Bu odada gönderi yapma izniniz yok"</string>
<string name="screen_room_timeline_reactions_show_less">"Daha az göster"</string>
<string name="screen_room_timeline_reactions_show_more">"Daha fazla göster"</string>
<string name="screen_room_timeline_read_marker_title">"Yeni"</string>
<plurals name="screen_room_timeline_state_changes">
<item quantity="one">"%1$d oda değişikliği"</item>
<item quantity="other">"%1$d oda değişikliği"</item>
</plurals>
<plurals name="screen_room_typing_many_members">
<item quantity="one">"%1$s, %2$s ve %3$d diğer"</item>
<item quantity="other">"%1$s, %2$s ve %3$d diğer"</item>
</plurals>
<plurals name="screen_room_typing_notification">
<item quantity="one">"%1$s yazıyor"</item>
<item quantity="other">"%1$s yazıyor"</item>
</plurals>
<string name="screen_room_typing_two_members">"%1$s ve %2$s"</string>
</resources>

View file

@ -194,7 +194,8 @@ class PinnedMessagesBannerPresenterTest {
syncService = syncService,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(FeatureFlags.PinnedEvents.key to isFeatureEnabled)
)
),
dispatchers = testCoroutineDispatchers(),
)
timelineProvider.launchIn(backgroundScope)

View file

@ -38,6 +38,7 @@ import io.element.android.tests.testutils.lambda.assert
import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value
import io.element.android.tests.testutils.test
import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.TestScope
@ -302,7 +303,8 @@ class PinnedMessagesListPresenterTest {
syncService = syncService,
featureFlagService = FakeFeatureFlagService(
initialState = mapOf(FeatureFlags.PinnedEvents.key to isFeatureEnabled)
)
),
dispatchers = testCoroutineDispatchers(),
)
timelineProvider.launchIn(backgroundScope)
return PinnedMessagesListPresenter(