From 1ecb238fba9078524ee8a79a3ae9e5d9fc063108 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 23:03:34 +0000 Subject: [PATCH 01/33] fix(deps): update dependency io.sentry:sentry-android to v8.12.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 397b8185f8..b0cd7b5ffa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -191,7 +191,7 @@ zxing_cpp = "io.github.zxing-cpp:android:2.3.0" # Analytics posthog = "com.posthog:posthog-android:3.14.1" -sentry = "io.sentry:sentry-android:8.11.1" +sentry = "io.sentry:sentry-android:8.12.0" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.28.0" From 405cd8e82d2a4fa81615aba87934236ddb09f5d4 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 13 May 2025 16:20:37 +0200 Subject: [PATCH 02/33] change (report room) : use client.isReportRoomApiSupported instead of hardcoded value --- .../io/element/android/appconfig/MatrixConfiguration.kt | 3 --- .../android/features/joinroom/impl/JoinRoomPresenter.kt | 5 +++-- .../features/roomdetails/impl/RoomDetailsPresenter.kt | 5 +++-- .../android/features/roomlist/impl/RoomListPresenter.kt | 5 +++-- .../io/element/android/libraries/matrix/api/MatrixClient.kt | 5 +++++ .../android/libraries/matrix/impl/RustMatrixClient.kt | 6 ++++++ .../android/libraries/matrix/test/FakeMatrixClient.kt | 5 +++++ 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt b/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt index d5bc728bd9..a8f424bd08 100644 --- a/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt +++ b/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt @@ -10,7 +10,4 @@ package io.element.android.appconfig object MatrixConfiguration { const val MATRIX_TO_PERMALINK_BASE_URL: String = "https://matrix.to/#/" val clientPermalinkBaseUrl: String? = null - - // TODO remove this when report is fixed - const val CAN_REPORT_ROOM = false } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index a234bb019b..cbe710b2dd 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.JoinedRoom -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState @@ -100,6 +99,8 @@ class JoinRoomPresenter @AssistedInject constructor( val hideInviteAvatars by remember { appPreferencesStore.getHideInviteAvatarsFlow() }.collectAsState(initial = false) + val canReportRoom by produceState(false) { value = matrixClient.canReportRoom() } + val contentState by produceState( initialValue = ContentState.Loading, key1 = roomInfo, @@ -212,7 +213,7 @@ class JoinRoomPresenter @AssistedInject constructor( applicationName = buildMeta.applicationName, knockMessage = knockMessage, hideInviteAvatars = hideInviteAvatars, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index e70430c8bf..51fda0f7bc 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import im.vector.app.features.analytics.plan.Interaction -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.messages.api.pinned.IsPinnedMessagesFeatureEnabled @@ -180,6 +179,8 @@ class RoomDetailsPresenter @Inject constructor( .launchIn(this) } + val canReportRoom by produceState(false) { value = client.canReportRoom() } + return RoomDetailsState( roomId = room.roomId, roomName = roomName, @@ -208,7 +209,7 @@ class RoomDetailsPresenter @Inject constructor( knockRequestsCount = knockRequestsCount, canShowSecurityAndPrivacy = canShowSecurityAndPrivacy, hasMemberVerificationViolations = hasMemberVerificationViolations, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents, ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 07029b7026..98b5e742a2 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import im.vector.app.features.analytics.plan.Interaction -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.AcceptInvite import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.DeclineInvite @@ -165,6 +164,8 @@ class RoomListPresenter @Inject constructor( val contentState = roomListContentState(securityBannerDismissed) + val canReportRoom by produceState(false) { value = client.canReportRoom() } + return RoomListState( matrixUser = matrixUser.value, showAvatarIndicator = showAvatarIndicator, @@ -180,7 +181,7 @@ class RoomListPresenter @Inject constructor( acceptDeclineInviteState = acceptDeclineInviteState, directLogoutState = directLogoutState, hideInvitesAvatars = hideInvitesAvatar, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents, ) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index a1b2079809..56d3bfa1e2 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -162,6 +162,11 @@ interface MatrixClient { fun canDeactivateAccount(): Boolean suspend fun deactivateAccount(password: String, eraseData: Boolean): Result + + /** + * Check if the user can report a room. + */ + suspend fun canReportRoom(): Boolean } /** diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 9dba6fc589..5f1176b081 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -666,6 +666,12 @@ class RustMatrixClient( } } + override suspend fun canReportRoom(): Boolean = withContext(sessionDispatcher) { + runCatching { + innerClient.isReportRoomApiSupported() + }.getOrDefault(false) + } + private suspend fun File.getCacheSize( includeCryptoDb: Boolean = false, ): Long = withContext(sessionDispatcher) { diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 6ef4eec136..bc4fc085df 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -88,6 +88,7 @@ class FakeMatrixClient( private val availableSlidingSyncVersionsLambda: () -> Result> = { lambdaError() }, private val ignoreUserResult: (UserId) -> Result = { lambdaError() }, private var unIgnoreUserResult: (UserId) -> Result = { Result.success(Unit) }, + private val canReportRoomLambda: () -> Boolean = { false }, override val ignoredUsersFlow: StateFlow> = MutableStateFlow(persistentListOf()), ) : MatrixClient { var setDisplayNameCalled: Boolean = false @@ -329,4 +330,8 @@ class FakeMatrixClient( override suspend fun availableSlidingSyncVersions(): Result> { return availableSlidingSyncVersionsLambda() } + + override suspend fun canReportRoom(): Boolean { + return canReportRoomLambda() + } } From 44d77a60481676933b6418c97d8edb5e58e1c779 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 15 May 2025 09:42:18 +0200 Subject: [PATCH 03/33] Remove event cache feature flag (#4719) --- .../android/features/roomlist/impl/RoomListContextMenu.kt | 2 +- .../android/features/roomlist/impl/RoomListPresenter.kt | 3 +-- .../android/features/roomlist/impl/RoomListState.kt | 2 +- .../impl/RoomListStateContextMenuShownProvider.kt | 2 +- .../features/roomlist/impl/RoomListPresenterTest.kt | 8 ++++---- .../android/libraries/featureflag/api/FeatureFlags.kt | 7 ------- 6 files changed, 8 insertions(+), 16 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt index d95064708b..10a591bcbd 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContextMenu.kt @@ -193,7 +193,7 @@ private fun RoomListModalBottomSheetContent( ), style = ListItemStyle.Destructive, ) - if (contextMenu.eventCacheFeatureFlagEnabled) { + if (contextMenu.displayClearRoomCacheAction) { ListItem( headlineContent = { Text(text = "Clear cache for this room") diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 98b5e742a2..7746f98204 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -264,8 +264,7 @@ class RoomListPresenter @Inject constructor( isFavorite = event.roomSummary.isFavorite, markAsUnreadFeatureFlagEnabled = featureFlagService.isFeatureEnabled(FeatureFlags.MarkAsUnread), hasNewContent = event.roomSummary.hasNewContent, - eventCacheFeatureFlagEnabled = appPreferencesStore.isDeveloperModeEnabledFlow().first() && - featureFlagService.isFeatureEnabled(FeatureFlags.EventCache), + displayClearRoomCacheAction = appPreferencesStore.isDeveloperModeEnabledFlow().first(), ) contextMenuState.value = initialState diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt index 8d203498cb..f685d5f379 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt @@ -51,8 +51,8 @@ data class RoomListState( val isDm: Boolean, val isFavorite: Boolean, val markAsUnreadFeatureFlagEnabled: Boolean, - val eventCacheFeatureFlagEnabled: Boolean, val hasNewContent: Boolean, + val displayClearRoomCacheAction: Boolean, ) : ContextMenu } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt index 4792795677..2f347a1659 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateContextMenuShownProvider.kt @@ -31,5 +31,5 @@ internal fun aContextMenuShown( markAsUnreadFeatureFlagEnabled = true, hasNewContent = hasNewContent, isFavorite = isFavorite, - eventCacheFeatureFlagEnabled = false, + displayClearRoomCacheAction = false, ) diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt index 073e163c16..c5d09f7656 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt @@ -297,8 +297,8 @@ class RoomListPresenterTest { isDm = false, isFavorite = false, markAsUnreadFeatureFlagEnabled = true, - eventCacheFeatureFlagEnabled = false, hasNewContent = false, + displayClearRoomCacheAction = false, ) ) } @@ -315,8 +315,8 @@ class RoomListPresenterTest { isDm = false, isFavorite = true, markAsUnreadFeatureFlagEnabled = true, - eventCacheFeatureFlagEnabled = false, hasNewContent = false, + displayClearRoomCacheAction = false, ) ) } @@ -344,8 +344,8 @@ class RoomListPresenterTest { isFavorite = false, markAsUnreadFeatureFlagEnabled = true, // true here. - eventCacheFeatureFlagEnabled = true, hasNewContent = false, + displayClearRoomCacheAction = true, ) ) } @@ -375,8 +375,8 @@ class RoomListPresenterTest { isDm = false, isFavorite = false, markAsUnreadFeatureFlagEnabled = true, - eventCacheFeatureFlagEnabled = false, hasNewContent = false, + displayClearRoomCacheAction = false, ) ) diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 2a167ad774..bcffe4daf0 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -147,13 +147,6 @@ enum class FeatureFlags( defaultValue = { true }, isFinished = false, ), - EventCache( - key = "feature.event_cache", - title = "Use SDK Event cache", - description = "Warning: you must kill and restart the app for the change to take effect.", - defaultValue = { true }, - isFinished = false, - ), PrintLogsToLogcat( key = "feature.print_logs_to_logcat", title = "Print logs to logcat", From cf02ac7eebe51ba02a2a6ef8a9e5287351fd2223 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 11:29:45 +0200 Subject: [PATCH 04/33] chore(deps): update plugin sonarqube to v6.2.0.5505 (#4725) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b0cd7b5ffa..e9cee77b6c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -240,6 +240,6 @@ paparazzi = "app.cash.paparazzi:1.3.5" sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } firebaseAppDistribution = { id = "com.google.firebase.appdistribution", version.ref = "firebaseAppDistribution" } knit = { id = "org.jetbrains.kotlinx.knit", version = "0.5.0" } -sonarqube = "org.sonarqube:6.1.0.5360" +sonarqube = "org.sonarqube:6.2.0.5505" licensee = "app.cash.licensee:1.13.0" compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } From 98cfddce3f47a68b46458c2a44255db1aeb2f8a3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 15 May 2025 14:08:05 +0200 Subject: [PATCH 05/33] Check homeserver when login using qr code (#4708) * Login with Qr code: check homeserver validity * QrCode login, unauthorized homeserver: update copy. * Update screenshots * Add unit test on SdkQrCodeLoginData * Remove default param value. * Remember imageAnalysis --------- Co-authored-by: ElementBot --- .../AccountProviderProvider.kt | 6 +- .../changeserver/ChangeServerPresenter.kt | 5 +- .../changeserver/ChangeServerStateProvider.kt | 10 +++- .../impl/changeserver/ChangeServerView.kt | 2 +- .../UnauthorizedAccountProviderException.kt | 5 +- .../login/impl/error/ChangeServerError.kt | 9 ++- .../qrcode/scan/QrCodeScanPresenter.kt | 13 +++- .../qrcode/scan/QrCodeScanStateProvider.kt | 10 ++++ .../screens/qrcode/scan/QrCodeScanView.kt | 13 ++++ .../impl/src/main/res/values/localazy.xml | 2 + .../changeserver/ChangeServerPresenterTest.kt | 8 ++- .../qrcode/scan/QrCodeScanPresenterTest.kt | 59 +++++++++++++++++-- .../api/auth/qrlogin/MatrixQrCodeLoginData.kt | 4 +- .../impl/auth/qrlogin/SdkQrCodeLoginData.kt | 6 +- .../auth/qrlogin/SdkQrCodeLoginDataTest.kt | 35 +++++++++++ .../impl/fixtures/fakes/FakeQrCodeData.kt | 20 +++++++ .../FakeMatrixQrCodeLoginDataFactory.kt | 7 ++- .../libraries/qrcode/QrCodeCameraView.kt | 10 ++-- ...changeserver_ChangeServerView_Day_3_en.png | 4 +- ...angeserver_ChangeServerView_Night_3_en.png | 4 +- ...ns.qrcode.scan_QrCodeScanView_Day_4_en.png | 3 + ....qrcode.scan_QrCodeScanView_Night_4_en.png | 3 + 22 files changed, 208 insertions(+), 30 deletions(-) create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginDataTest.kt create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeQrCodeData.kt create mode 100644 tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_en.png create mode 100644 tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_4_en.png diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderProvider.kt index ddc635b5df..75a6127d9f 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderProvider.kt @@ -21,8 +21,10 @@ open class AccountProviderProvider : PreviewParameterProvider { ) } -fun anAccountProvider() = AccountProvider( - url = AuthenticationConfig.MATRIX_ORG_URL, +fun anAccountProvider( + url: String = AuthenticationConfig.MATRIX_ORG_URL, +) = AccountProvider( + url = url, subtitle = "Matrix.org is an open network for secure, decentralized communication.", isPublic = true, isMatrixOrg = true, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt index 497bf96271..94510455bc 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt @@ -56,7 +56,10 @@ class ChangeServerPresenter @Inject constructor( ) = launch { suspend { if (enterpriseService.isAllowedToConnectToHomeserver(data.url).not()) { - throw UnauthorizedAccountProviderException(data) + throw UnauthorizedAccountProviderException( + unauthorisedAccountProviderTitle = data.title, + authorisedAccountProviderTitles = listOfNotNull(enterpriseService.defaultHomeserver()) + ) } authenticationService.setHomeserver(data.url).map { authenticationService.getHomeserverDetails().value!! diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerStateProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerStateProvider.kt index ae9ef58252..2549109488 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerStateProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerStateProvider.kt @@ -8,7 +8,6 @@ package io.element.android.features.login.impl.changeserver import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import io.element.android.features.login.impl.accountprovider.anAccountProvider import io.element.android.features.login.impl.error.ChangeServerError import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.ui.strings.CommonStrings @@ -19,7 +18,14 @@ open class ChangeServerStateProvider : PreviewParameterProvider, ) : Exception() diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/error/ChangeServerError.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/error/ChangeServerError.kt index 69c0121c15..e3fdfc2d04 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/error/ChangeServerError.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/error/ChangeServerError.kt @@ -11,7 +11,6 @@ import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import io.element.android.features.login.impl.R -import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.libraries.matrix.api.auth.AuthenticationException import io.element.android.libraries.ui.strings.CommonStrings @@ -26,7 +25,8 @@ sealed class ChangeServerError : Throwable() { } data class UnauthorizedAccountProvider( - val accountProvider: AccountProvider, + val unauthorisedAccountProviderTitle: String, + val authorisedAccountProviderTitles: List, ) : ChangeServerError() data object SlidingSyncAlert : ChangeServerError() @@ -35,7 +35,10 @@ sealed class ChangeServerError : Throwable() { fun from(error: Throwable): ChangeServerError = when (error) { is AuthenticationException.SlidingSyncVersion -> SlidingSyncAlert is AuthenticationException.Oidc -> Error(messageStr = error.message) - is UnauthorizedAccountProviderException -> UnauthorizedAccountProvider(error.accountProvider) + is UnauthorizedAccountProviderException -> UnauthorizedAccountProvider( + unauthorisedAccountProviderTitle = error.unauthorisedAccountProviderTitle, + authorisedAccountProviderTitles = error.authorisedAccountProviderTitles, + ) else -> Error(messageId = R.string.screen_change_server_error_invalid_homeserver) } } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 692d920958..5d0f7c41b8 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -15,6 +15,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.features.login.impl.qrcode.QrCodeLoginManager import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -36,6 +38,7 @@ class QrCodeScanPresenter @Inject constructor( private val qrCodeLoginDataFactory: MatrixQrCodeLoginDataFactory, private val qrCodeLoginManager: QrCodeLoginManager, private val coroutineDispatchers: CoroutineDispatchers, + private val enterpriseService: EnterpriseService, ) : Presenter { private var isScanning by mutableStateOf(true) @@ -90,9 +93,17 @@ class QrCodeScanPresenter @Inject constructor( launch(coroutineDispatchers.computation) { suspend { - qrCodeLoginDataFactory.parseQrCodeData(code).onFailure { + val data = qrCodeLoginDataFactory.parseQrCodeData(code).onFailure { Timber.e(it, "Error parsing QR code data") }.getOrThrow() + val serverName = data.serverName() + if (serverName != null && enterpriseService.isAllowedToConnectToHomeserver(serverName).not()) { + throw UnauthorizedAccountProviderException( + unauthorisedAccountProviderTitle = serverName, + authorisedAccountProviderTitles = listOfNotNull(enterpriseService.defaultHomeserver()) + ) + } + data }.runCatchingUpdatingState(codeScannedAction) }.invokeOnCompletion { isProcessingCode.set(false) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanStateProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanStateProvider.kt index e9d32c0699..cdea9f8b41 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanStateProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanStateProvider.kt @@ -8,6 +8,7 @@ package io.element.android.features.login.impl.screens.qrcode.scan import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException @@ -19,6 +20,15 @@ open class QrCodeScanStateProvider : PreviewParameterProvider { aQrCodeScanState(isScanning = false, authenticationAction = AsyncAction.Loading), aQrCodeScanState(isScanning = false, authenticationAction = AsyncAction.Failure(Exception("Error"))), aQrCodeScanState(isScanning = false, authenticationAction = AsyncAction.Failure(QrLoginException.OtherDeviceNotSignedIn)), + aQrCodeScanState( + isScanning = false, + authenticationAction = AsyncAction.Failure( + UnauthorizedAccountProviderException( + unauthorisedAccountProviderTitle = "example.com", + authorisedAccountProviderTitles = listOf("element.io", "element.org"), + ) + ) + ), // Add other state here ) } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanView.kt index 2727653ca5..0c5598c528 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanView.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.login.impl.R +import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.atomic.pages.FlowStepPage import io.element.android.libraries.designsystem.components.BigIcon @@ -144,6 +145,12 @@ private fun ColumnScope.Buttons( Spacer(modifier = Modifier.width(4.dp)) Text( text = when (error) { + is UnauthorizedAccountProviderException -> { + stringResource( + id = R.string.screen_change_server_error_unauthorized_homeserver_title, + error.unauthorisedAccountProviderTitle, + ) + } is QrLoginException.OtherDeviceNotSignedIn -> { stringResource(R.string.screen_qr_code_login_device_not_signed_in_scan_state_subtitle) } @@ -156,6 +163,12 @@ private fun ColumnScope.Buttons( } Text( text = when (error) { + is UnauthorizedAccountProviderException -> { + stringResource( + id = R.string.screen_change_server_error_unauthorized_homeserver_content, + error.authorisedAccountProviderTitles.joinToString(), + ) + } is QrLoginException.OtherDeviceNotSignedIn -> { stringResource(R.string.screen_qr_code_login_device_not_signed_in_scan_state_description) } diff --git a/features/login/impl/src/main/res/values/localazy.xml b/features/login/impl/src/main/res/values/localazy.xml index d257ac1b11..bebbc8e6c3 100644 --- a/features/login/impl/src/main/res/values/localazy.xml +++ b/features/login/impl/src/main/res/values/localazy.xml @@ -18,6 +18,8 @@ %1$s" "The selected account provider does not support sliding sync. An upgrade to the server is needed to use %1$s." "%1$s is not allowed to connect to %2$s." + "This app has been configured to allow: %1$s." + "Account provider %1$s not allowed." "Homeserver URL" "Enter a domain address." "What is the address of your server?" diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt index 20b70028d9..5d4e3bae5f 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt @@ -84,6 +84,7 @@ class ChangeServerPresenterTest { createPresenter( enterpriseService = FakeEnterpriseService( isAllowedToConnectToHomeserverResult = isAllowedToConnectToHomeserverResult, + defaultHomeserverResult = { "element.io" }, ), ).test { val initialState = awaitItem() @@ -94,8 +95,11 @@ class ChangeServerPresenterTest { assertThat(loadingState.changeServerAction).isInstanceOf(AsyncData.Loading::class.java) val failureState = awaitItem() assertThat( - (failureState.changeServerAction.errorOrNull() as ChangeServerError.UnauthorizedAccountProvider).accountProvider - ).isEqualTo(anAccountProvider) + (failureState.changeServerAction.errorOrNull() as ChangeServerError.UnauthorizedAccountProvider).unauthorisedAccountProviderTitle + ).isEqualTo(anAccountProvider.title) + assertThat( + (failureState.changeServerAction.errorOrNull() as ChangeServerError.UnauthorizedAccountProvider).authorisedAccountProviderTitles + ).containsExactly("element.io") isAllowedToConnectToHomeserverResult.assertions() .isCalledOnce() .with(value(A_HOMESERVER_URL)) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt index 294f9c48c2..18a6678388 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt @@ -11,12 +11,17 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.features.enterprise.test.FakeEnterpriseService +import io.element.android.features.login.impl.changeserver.UnauthorizedAccountProviderException import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException +import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginData import io.element.android.libraries.matrix.test.auth.qrlogin.FakeMatrixQrCodeLoginDataFactory import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.test import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest @@ -38,10 +43,22 @@ class QrCodeScanPresenterTest { @Test fun `present - scanned QR code successfully`() = runTest { - val presenter = createQrCodeScanPresenter() - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { + val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory( + parseQrCodeLoginDataResult = { + Result.success( + FakeMatrixQrCodeLoginData( + serverNameResult = { "example.com" } + ) + ) + } + ) + val presenter = createQrCodeScanPresenter( + qrCodeLoginDataFactory = qrCodeLoginDataFactory, + enterpriseService = FakeEnterpriseService( + isAllowedToConnectToHomeserverResult = { true }, + ) + ) + presenter.test { val initialState = awaitItem() initialState.eventSink(QrCodeScanEvents.QrCodeScanned(byteArrayOf())) assertThat(awaitItem().isScanning).isFalse() @@ -50,6 +67,38 @@ class QrCodeScanPresenterTest { } } + @Test + fun `present - scanned QR code successfully, but homeserver not allowed`() = runTest { + val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory( + parseQrCodeLoginDataResult = { + Result.success( + FakeMatrixQrCodeLoginData( + serverNameResult = { "example.com" } + ) + ) + } + ) + val presenter = createQrCodeScanPresenter( + qrCodeLoginDataFactory = qrCodeLoginDataFactory, + enterpriseService = FakeEnterpriseService( + isAllowedToConnectToHomeserverResult = { false }, + defaultHomeserverResult = { "element.io" } + ) + ) + presenter.test { + val initialState = awaitItem() + initialState.eventSink(QrCodeScanEvents.QrCodeScanned(byteArrayOf())) + assertThat(awaitItem().isScanning).isFalse() + assertThat(awaitItem().authenticationAction.isLoading()).isTrue() + awaitItem().also { state -> + assertThat((state.authenticationAction.errorOrNull() as UnauthorizedAccountProviderException).unauthorisedAccountProviderTitle) + .isEqualTo("example.com") + assertThat((state.authenticationAction.errorOrNull() as UnauthorizedAccountProviderException).authorisedAccountProviderTitles) + .containsExactly("element.io") + } + } + } + @Test fun `present - scanned QR code failed and can be retried`() = runTest { val qrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory( @@ -103,9 +152,11 @@ class QrCodeScanPresenterTest { qrCodeLoginDataFactory: FakeMatrixQrCodeLoginDataFactory = FakeMatrixQrCodeLoginDataFactory(), coroutineDispatchers: CoroutineDispatchers = testCoroutineDispatchers(), qrCodeLoginManager: FakeQrCodeLoginManager = FakeQrCodeLoginManager(), + enterpriseService: EnterpriseService = FakeEnterpriseService(), ) = QrCodeScanPresenter( qrCodeLoginDataFactory = qrCodeLoginDataFactory, qrCodeLoginManager = qrCodeLoginManager, coroutineDispatchers = coroutineDispatchers, + enterpriseService = enterpriseService, ) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/MatrixQrCodeLoginData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/MatrixQrCodeLoginData.kt index 7a01b8f586..48532e44b9 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/MatrixQrCodeLoginData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/auth/qrlogin/MatrixQrCodeLoginData.kt @@ -7,4 +7,6 @@ package io.element.android.libraries.matrix.api.auth.qrlogin -interface MatrixQrCodeLoginData +interface MatrixQrCodeLoginData { + fun serverName(): String? +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginData.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginData.kt index 04a338f17e..485e9bfaec 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginData.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginData.kt @@ -12,4 +12,8 @@ import org.matrix.rustcomponents.sdk.QrCodeData as RustQrCodeData class SdkQrCodeLoginData( internal val rustQrCodeData: RustQrCodeData, -) : MatrixQrCodeLoginData +) : MatrixQrCodeLoginData { + override fun serverName(): String? { + return rustQrCodeData.serverName() + } +} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginDataTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginDataTest.kt new file mode 100644 index 0000000000..c63a1bc2b1 --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/SdkQrCodeLoginDataTest.kt @@ -0,0 +1,35 @@ +/* + * 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.matrix.impl.auth.qrlogin + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeQrCodeData +import io.element.android.libraries.matrix.test.A_HOMESERVER_URL +import org.junit.Test + +class SdkQrCodeLoginDataTest { + @Test + fun `getServer reads the value from the Rust side, null case`() { + val sut = SdkQrCodeLoginData( + rustQrCodeData = FakeQrCodeData( + serverNameResult = { null }, + ), + ) + assertThat(sut.serverName()).isNull() + } + + @Test + fun `getServer reads the value from the Rust side`() { + val sut = SdkQrCodeLoginData( + rustQrCodeData = FakeQrCodeData( + serverNameResult = { A_HOMESERVER_URL }, + ), + ) + assertThat(sut.serverName()).isEqualTo(A_HOMESERVER_URL) + } +} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeQrCodeData.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeQrCodeData.kt new file mode 100644 index 0000000000..7033d1de9a --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeQrCodeData.kt @@ -0,0 +1,20 @@ +/* + * 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.matrix.impl.fixtures.fakes + +import io.element.android.tests.testutils.lambda.lambdaError +import org.matrix.rustcomponents.sdk.NoPointer +import org.matrix.rustcomponents.sdk.QrCodeData + +class FakeQrCodeData( + private val serverNameResult: () -> String? = { lambdaError() }, +) : QrCodeData(NoPointer) { + override fun serverName(): String? { + return serverNameResult() + } +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/qrlogin/FakeMatrixQrCodeLoginDataFactory.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/qrlogin/FakeMatrixQrCodeLoginDataFactory.kt index bb12c0120d..344b567589 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/qrlogin/FakeMatrixQrCodeLoginDataFactory.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/qrlogin/FakeMatrixQrCodeLoginDataFactory.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.test.auth.qrlogin import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginDataFactory +import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaRecorder class FakeMatrixQrCodeLoginDataFactory( @@ -20,4 +21,8 @@ class FakeMatrixQrCodeLoginDataFactory( } } -class FakeMatrixQrCodeLoginData : MatrixQrCodeLoginData +class FakeMatrixQrCodeLoginData( + private val serverNameResult: () -> String? = { lambdaError() }, +) : MatrixQrCodeLoginData { + override fun serverName() = serverNameResult() +} diff --git a/libraries/qrcode/src/main/kotlin/io/element/android/libraries/qrcode/QrCodeCameraView.kt b/libraries/qrcode/src/main/kotlin/io/element/android/libraries/qrcode/QrCodeCameraView.kt index d59de4da9b..0087a8a9bb 100644 --- a/libraries/qrcode/src/main/kotlin/io/element/android/libraries/qrcode/QrCodeCameraView.kt +++ b/libraries/qrcode/src/main/kotlin/io/element/android/libraries/qrcode/QrCodeCameraView.kt @@ -44,8 +44,8 @@ import kotlin.coroutines.suspendCoroutine @Composable fun QrCodeCameraView( onScanQrCode: (ByteArray) -> Unit, + renderPreview: Boolean, modifier: Modifier = Modifier, - renderPreview: Boolean = true, ) { if (LocalInspectionMode.current) { Box( @@ -62,9 +62,11 @@ fun QrCodeCameraView( var cameraProvider by remember { mutableStateOf(null) } val previewUseCase = remember { Preview.Builder().build() } var lastFrame by remember { mutableStateOf(null) } - val imageAnalysis = ImageAnalysis.Builder() - .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) - .build() + val imageAnalysis = remember { + ImageAnalysis.Builder() + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) + .build() + } LaunchedEffect(Unit) { cameraProvider = localContext.getCameraProvider() diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_3_en.png index 2e5917d7de..d65b4da938 100644 --- a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c1257fbdf388933be8fb2ae211c8abacc4cdb01c2a924a7ba3729337c9b6707 -size 15434 +oid sha256:a1e37b08acfdf40279b0990dd65c58d38d2248026f0d2fe2a1c396245ea931fd +size 15892 diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_3_en.png index 8a1571970c..aac7b5148e 100644 --- a/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.changeserver_ChangeServerView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb9a2d2145791122cc2ab7d903485de361fb6098216bf578dca7cc350e9f94a0 -size 13650 +oid sha256:8db77f38d81113a5411c40c1ebf811090ce809fd0f0df3d29eab05d3ed0bb64a +size 14114 diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_en.png new file mode 100644 index 0000000000..60ec9cc17b --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f90a8ecae26714e76d5536682716a15aefc3d4c8836617add9a0ea946e7d242 +size 31486 diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_4_en.png new file mode 100644 index 0000000000..0581885f19 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_4_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34cd9f4558efc143b4ab3bec96342a42cfad6906da0d46e75d78db36b7e59bd6 +size 30242 From 318f72a78dd4cf5be49bffb5249af40765202c91 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 15 May 2025 17:14:41 +0200 Subject: [PATCH 06/33] Ensure the CI is marked as failed when Maestro test is failing (#4700) * Ensure the CI is marked as failed when Maestro test is failing * Fix typo in String to disable bookmark in ChromeCustomTab * Fix Maestro test now that matrix.org is using MAS to authenticate. * Fix Maestro test - other issues due to recent changes. * Maestro: add test on Element Call * Run through Chrome on boarding step. * Try suggestion from https://github.com/mobile-dev-inc/Maestro/issues/1126#issuecomment-2842220361 * Revert "Try suggestion from https://github.com/mobile-dev-inc/Maestro/issues/1126#issuecomment-2842220361" This reverts commit d400644622c1a240deb61040f9095e3221e07f21. * Add comment on Maestro flow. --- .github/workflows/maestro-local.yml | 8 +++++++- .maestro/tests/account/login.yaml | 20 ++++++++++--------- .maestro/tests/account/verifySession.yaml | 2 +- .../tests/roomList/createAndDeleteDM.yaml | 3 ++- .../tests/roomList/timeline/call/call.yaml | 13 ++++++++++++ .../tests/roomList/timeline/timeline.yaml | 1 + .../androidutils/browser/ChromeCustomTab.kt | 2 +- 7 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 .maestro/tests/roomList/timeline/call/call.yaml diff --git a/.github/workflows/maestro-local.yml b/.github/workflows/maestro-local.yml index b07eb196fd..3cb3d46111 100644 --- a/.github/workflows/maestro-local.yml +++ b/.github/workflows/maestro-local.yml @@ -56,7 +56,7 @@ jobs: maestro-cloud: name: Maestro test suite runs-on: ubuntu-latest - needs: [build-apk] + needs: [ build-apk ] # Allow one per PR. concurrency: group: ${{ format('maestro-{0}', github.ref) }} @@ -80,6 +80,7 @@ jobs: - name: Install maestro run: curl -fsSL "https://get.maestro.mobile.dev" | bash - name: Run Maestro tests in emulator + id: maestro_test uses: reactivecircus/android-emulator-runner@v2 continue-on-error: true env: @@ -109,3 +110,8 @@ jobs: retention-days: 5 overwrite: true if-no-files-found: error + - name: Fail the workflow in case of error in test + if: steps.maestro_test.outcome != 'success' + run: | + echo "Maestro tests failed. Please check the logs." + exit 1 diff --git a/.maestro/tests/account/login.yaml b/.maestro/tests/account/login.yaml index 18054297d6..617df92e50 100644 --- a/.maestro/tests/account/login.yaml +++ b/.maestro/tests/account/login.yaml @@ -7,22 +7,24 @@ appId: ${MAESTRO_APP_ID} - runFlow: ../assertions/assertLoginDisplayed.yaml - tapOn: id: "login-continue" +## MAS page +## Conditional workflow to pass the Chrome first launch welcome page. +- runFlow: + when: + visible: 'Use without an account' + commands: + - tapOn: "Use without an account" +## Working when running Maestro locally, but not on the CI yet. - tapOn: - id: "login-email_username" + id: "form-1" - inputText: ${MAESTRO_USERNAME} - pressKey: Enter - tapOn: - id: "login-password" -- inputText: "wrong-password" -- pressKey: Enter -- tapOn: "Continue" -- tapOn: "OK" -- tapOn: - id: "login-password" -- eraseText: 20 + id: "form-3" - inputText: ${MAESTRO_PASSWORD} - pressKey: Enter - tapOn: "Continue" +## Back to native world - runFlow: ../assertions/assertSessionVerificationDisplayed.yaml - runFlow: ./verifySession.yaml - runFlow: ../assertions/assertAnalyticsDisplayed.yaml diff --git a/.maestro/tests/account/verifySession.yaml b/.maestro/tests/account/verifySession.yaml index a16322543f..f1f4552709 100644 --- a/.maestro/tests/account/verifySession.yaml +++ b/.maestro/tests/account/verifySession.yaml @@ -8,6 +8,6 @@ appId: ${MAESTRO_APP_ID} - hideKeyboard - tapOn: "Continue" - extendedWaitUntil: - visible: "Device verified" + visible: "Verification complete" timeout: 30000 - tapOn: "Continue" diff --git a/.maestro/tests/roomList/createAndDeleteDM.yaml b/.maestro/tests/roomList/createAndDeleteDM.yaml index 6e0d55ab26..7e33fd1d15 100644 --- a/.maestro/tests/roomList/createAndDeleteDM.yaml +++ b/.maestro/tests/roomList/createAndDeleteDM.yaml @@ -7,8 +7,9 @@ appId: ${MAESTRO_APP_ID} - tapOn: text: ${MAESTRO_INVITEE1_MXID} index: 1 +- tapOn: "Send invite" - takeScreenshot: build/maestro/330-createAndDeleteDM - tapOn: "maestroelement2" - scroll -- tapOn: "Leave conversation" +- tapOn: "Leave room" - tapOn: "Leave" diff --git a/.maestro/tests/roomList/timeline/call/call.yaml b/.maestro/tests/roomList/timeline/call/call.yaml new file mode 100644 index 0000000000..e390d0a3a1 --- /dev/null +++ b/.maestro/tests/roomList/timeline/call/call.yaml @@ -0,0 +1,13 @@ +appId: ${MAESTRO_APP_ID} +--- +- tapOn: "Start a call" +- takeScreenshot: build/maestro/700-Call +- extendedWaitUntil: + visible: "maestroelement" + timeout: 10000 +- takeScreenshot: build/maestro/710-Call +# Hangup +- tapOn: "End call" +- extendedWaitUntil: + visible: "MyRoom" + timeout: 10000 diff --git a/.maestro/tests/roomList/timeline/timeline.yaml b/.maestro/tests/roomList/timeline/timeline.yaml index 5f85366e9e..d82c5ea1ff 100644 --- a/.maestro/tests/roomList/timeline/timeline.yaml +++ b/.maestro/tests/roomList/timeline/timeline.yaml @@ -6,5 +6,6 @@ appId: ${MAESTRO_APP_ID} - runFlow: messages/text.yaml - runFlow: messages/location.yaml - runFlow: messages/poll.yaml +- runFlow: call/call.yaml - back - runFlow: ../../assertions/assertHomeDisplayed.yaml diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/browser/ChromeCustomTab.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/browser/ChromeCustomTab.kt index 8e6bf24f91..5617d459f0 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/browser/ChromeCustomTab.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/browser/ChromeCustomTab.kt @@ -53,7 +53,7 @@ fun Activity.openUrlInChromeCustomTab( // Disable download button intent.putExtra("org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON", true) // Disable bookmark button - intent.putExtra("org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_START_BUTTON", true) + intent.putExtra("org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_STAR_BUTTON", true) intent.putExtra(Browser.EXTRA_HEADERS, Bundle().apply { putString("Accept-Language", Locale.getDefault().toLanguageTag()) }) From 0705ae0b3acb4fdef0dab05b8150977b15daf039 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 17:42:48 +0200 Subject: [PATCH 07/33] fix(deps): update dependency com.posthog:posthog-android to v3.15.0 (#4723) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e9cee77b6c..4b3f6b09b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -190,7 +190,7 @@ opusencoder = "io.element.android:opusencoder:1.1.0" zxing_cpp = "io.github.zxing-cpp:android:2.3.0" # Analytics -posthog = "com.posthog:posthog-android:3.14.1" +posthog = "com.posthog:posthog-android:3.15.0" sentry = "io.sentry:sentry-android:8.12.0" # main branch can be tested replacing the version with main-SNAPSHOT matrix_analytics_events = "com.github.matrix-org:matrix-analytics-events:0.28.0" From 3b5d3658342296a05258de2896d4dba6df9bf282 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 15 May 2025 18:08:58 +0200 Subject: [PATCH 08/33] Fix issues on JoinedRoom / BaseRoom (#4724) * Import type * Add test to cover an existing issue. roomCoroutineScope is not cancelled when the class is destroyed * Cancel roomCoroutineScope when the class is destroyed * Move `isOneToOne` to BaseRoom, we do not need a JoinedRoom for it. * Let `roomInfoFlow` be implemented by RustBaseRoom. It should fix a few issues where we rely on the room info to be live, and it was not the case on RustBaseRoom. * Add more assertions. The test would fail anyway if roomCoroutineScope was still active, but it's more explicit with these assertions. --- .../libraries/matrix/api/room/BaseRoom.kt | 6 ++ .../libraries/matrix/api/room/JoinedRoom.kt | 6 -- .../matrix/impl/room/JoinedRustRoom.kt | 16 ------ .../matrix/impl/room/RustBaseRoom.kt | 18 +++++- .../matrix/impl/room/RustRoomFactory.kt | 2 +- .../matrix/impl/room/RustBaseRoomTest.kt | 55 +++++++++++++++++++ 6 files changed, 77 insertions(+), 26 deletions(-) create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/BaseRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/BaseRoom.kt index 8df4cb5671..120321bddf 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/BaseRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/BaseRoom.kt @@ -55,6 +55,12 @@ interface BaseRoom : Closeable { */ fun info(): RoomInfo = roomInfoFlow.value + /** + * A one-to-one is a room with exactly 2 members. + * See [the Matrix spec](https://spec.matrix.org/latest/client-server-api/#default-underride-rules). + */ + val isOneToOne: Boolean get() = info().activeMembersCount == 2L + /** * Try to load the room members and update the membersFlow. */ diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt index cbc5220678..ca62c4b134 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt @@ -50,12 +50,6 @@ interface JoinedRoom : BaseRoom { */ val knockRequestsFlow: Flow> - /** - * A one-to-one is a room with exactly 2 members. - * See [the Matrix spec](https://spec.matrix.org/latest/client-server-api/#default-underride-rules). - */ - val isOneToOne: Boolean get() = info().activeMembersCount == 2L - /** * The live timeline of the room. Must be used to send Event to a room. */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt index 5ef34d9bed..e006dcdba6 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt @@ -59,11 +59,8 @@ import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import io.element.android.libraries.matrix.impl.widget.RustWidgetDriver import io.element.android.libraries.matrix.impl.widget.generateWidgetWebViewUrl import io.element.android.services.toolbox.api.systemclock.SystemClock -import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop @@ -71,12 +68,10 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onStart -import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.DateDividerMode import org.matrix.rustcomponents.sdk.IdentityStatusChangeListener import org.matrix.rustcomponents.sdk.KnockRequestsListener -import org.matrix.rustcomponents.sdk.RoomInfoListener import org.matrix.rustcomponents.sdk.RoomMessageEventMessageType import org.matrix.rustcomponents.sdk.TimelineConfiguration import org.matrix.rustcomponents.sdk.TimelineFilter @@ -93,7 +88,6 @@ import java.io.File import kotlin.coroutines.cancellation.CancellationException import org.matrix.rustcomponents.sdk.IdentityStatusChange as RustIdentityStateChange import org.matrix.rustcomponents.sdk.KnockRequest as InnerKnockRequest -import org.matrix.rustcomponents.sdk.RoomInfo as InnerRoomInfo import org.matrix.rustcomponents.sdk.Timeline as InnerTimeline class JoinedRustRoom( @@ -101,7 +95,6 @@ class JoinedRustRoom( private val liveInnerTimeline: InnerTimeline, private val notificationSettingsService: NotificationSettingsService, private val coroutineDispatchers: CoroutineDispatchers, - private val roomInfoMapper: RoomInfoMapper, private val systemClock: SystemClock, private val roomContentForwarder: RoomContentForwarder, private val featureFlagService: FeatureFlagService, @@ -112,14 +105,6 @@ class JoinedRustRoom( override val syncUpdateFlow = MutableStateFlow(0L) - override val roomInfoFlow: StateFlow = mxCallbackFlow { - innerRoom.subscribeToRoomInfoUpdates(object : RoomInfoListener { - override fun call(roomInfo: InnerRoomInfo) { - channel.trySend(roomInfoMapper.map(roomInfo)) - } - }) - }.stateIn(roomCoroutineScope, started = SharingStarted.Lazily, initialValue = baseRoom.info()) - override val roomTypingMembersFlow: Flow> = mxCallbackFlow { val initial = emptyList() channel.trySend(initial) @@ -645,7 +630,6 @@ class JoinedRustRoom( override fun destroy() { baseRoom.destroy() liveInnerTimeline.destroy() - roomCoroutineScope.cancel() } private fun InnerTimeline.map( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoom.kt index c9a1629e7b..10c07a1ac9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoom.kt @@ -31,10 +31,14 @@ import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper import io.element.android.libraries.matrix.impl.room.powerlevels.RoomPowerLevelsMapper import io.element.android.libraries.matrix.impl.roomdirectory.map import io.element.android.libraries.matrix.impl.timeline.toRustReceiptType +import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.withContext +import org.matrix.rustcomponents.sdk.RoomInfoListener import org.matrix.rustcomponents.sdk.use import timber.log.Timber import uniffi.matrix_sdk_base.EncryptionState @@ -48,6 +52,7 @@ class RustBaseRoom( private val roomSyncSubscriber: RoomSyncSubscriber, private val roomMembershipObserver: RoomMembershipObserver, sessionCoroutineScope: CoroutineScope, + roomInfoMapper: RoomInfoMapper, initialRoomInfo: RoomInfo, ) : BaseRoom { override val roomId = RoomId(innerRoom.id()) @@ -62,10 +67,16 @@ class RustBaseRoom( override val membersStateFlow: StateFlow = roomMemberListFetcher.membersFlow - override val roomInfoFlow: StateFlow = MutableStateFlow(initialRoomInfo) - override val roomCoroutineScope = sessionCoroutineScope.childScope(coroutineDispatchers.main, "RoomScope-$roomId") + override val roomInfoFlow: StateFlow = mxCallbackFlow { + innerRoom.subscribeToRoomInfoUpdates(object : RoomInfoListener { + override fun call(roomInfo: org.matrix.rustcomponents.sdk.RoomInfo) { + channel.trySend(roomInfoMapper.map(roomInfo)) + } + }) + }.stateIn(roomCoroutineScope, started = SharingStarted.Lazily, initialValue = initialRoomInfo) + override suspend fun subscribeToSync() = roomSyncSubscriber.subscribe(roomId) override suspend fun updateMembers() { @@ -98,6 +109,7 @@ class RustBaseRoom( override fun destroy() { innerRoom.destroy() + roomCoroutineScope.cancel() } override suspend fun userDisplayName(userId: UserId): Result = withContext(roomDispatcher) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt index ee9592f155..511e94be2f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt @@ -98,6 +98,7 @@ class RustRoomFactory( coroutineDispatchers = dispatchers, roomSyncSubscriber = roomSyncSubscriber, roomMembershipObserver = roomMembershipObserver, + roomInfoMapper = roomInfoMapper, initialRoomInfo = roomInfoMapper.map(initialRoomInfo), sessionCoroutineScope = sessionCoroutineScope, ) @@ -127,7 +128,6 @@ class RustRoomFactory( liveInnerTimeline = roomReferences.room.timeline(), coroutineDispatchers = dispatchers, systemClock = systemClock, - roomInfoMapper = roomInfoMapper, featureFlagService = featureFlagService, ) ) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt new file mode 100644 index 0000000000..8a9050a884 --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RustBaseRoomTest.kt @@ -0,0 +1,55 @@ +/* + * 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.matrix.impl.room + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoom +import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService +import io.element.android.libraries.matrix.test.A_DEVICE_ID +import io.element.android.libraries.matrix.test.A_SESSION_ID +import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.tests.testutils.testCoroutineDispatchers +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.isActive +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class RustBaseRoomTest { + @Test + fun `RustBaseRoom should cancel the room coroutine scope when it is destroyed`() = runTest { + val rustBaseRoom = createRustBaseRoom( + // Not using backgroundScope here, but the test scope + sessionCoroutineScope = this + ) + assertThat(rustBaseRoom.roomCoroutineScope.isActive).isTrue() + rustBaseRoom.destroy() + assertThat(rustBaseRoom.roomCoroutineScope.isActive).isFalse() + } + + private fun TestScope.createRustBaseRoom( + sessionCoroutineScope: CoroutineScope, + ): RustBaseRoom { + val dispatchers = testCoroutineDispatchers() + return RustBaseRoom( + sessionId = A_SESSION_ID, + deviceId = A_DEVICE_ID, + innerRoom = FakeRustRoom(), + coroutineDispatchers = dispatchers, + roomSyncSubscriber = RoomSyncSubscriber( + roomListService = FakeRustRoomListService(), + dispatchers = dispatchers, + ), + roomMembershipObserver = RoomMembershipObserver(), + sessionCoroutineScope = sessionCoroutineScope, + roomInfoMapper = RoomInfoMapper(), + initialRoomInfo = aRoomInfo(), + ) + } +} From 5f0bb0ac8960bef985f7bbb8999e36e65435c56a Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Thu, 15 May 2025 20:38:59 +0100 Subject: [PATCH 09/33] README.md: fix broken linnk (#4728) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37cfc58e9b..14acef0de2 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ Just clone the project and open it in Android Studio. Make sure to select the `app` configuration when building (as we also have sample apps in the project). To build against a local copy of the Rust SDK, see the [Developer -onboarding](docs/_developer_onboarding.md#build-the-sdk-locally) instructions. +onboarding](docs/_developer_onboarding.md#building-the-sdk-locally) instructions. ## Support From 2bea3127d36e51c5148fe1e291ae32fef417f0d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 21:39:39 +0200 Subject: [PATCH 10/33] fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v2.12.0 (#4727) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4b3f6b09b9..127b8dddd6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -134,7 +134,7 @@ network_okhttp_logging = { module = "com.squareup.okhttp3:logging-interceptor" } network_okhttp_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_mockwebserver = { module = "com.squareup.okhttp3:mockwebserver" } -network_retrofit_bom = "com.squareup.retrofit2:retrofit-bom:2.11.0" +network_retrofit_bom = "com.squareup.retrofit2:retrofit-bom:2.12.0" network_retrofit = { module = "com.squareup.retrofit2:retrofit" } network_retrofit_converter_serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization" } From d4a62708f8c06a563a2a43a588aabddc9bec8cba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 16:15:37 +0200 Subject: [PATCH 11/33] chore(deps): update codecov/codecov-action action to v5.4.3 (#4730) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 580f3799dd..a0ffe74f6f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -82,7 +82,7 @@ jobs: # https://github.com/codecov/codecov-action - name: ☂️ Upload coverage reports to codecov - uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2 + uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} From e335d64c1be769da152725a3d025f2efa9362f62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 17:49:21 +0200 Subject: [PATCH 12/33] fix(deps): update kotlin (#4713) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 127b8dddd6..0da9df9aa9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,9 +4,9 @@ [versions] # Project android_gradle_plugin = "8.10.0" -kotlin = "2.1.20" +kotlin = "2.1.21" kotlinpoet = "2.1.0" -ksp = "2.1.20-2.0.1" +ksp = "2.1.21-2.0.1" firebaseAppDistribution = "5.1.1" # AndroidX @@ -162,7 +162,7 @@ coil_test = { module = "io.coil-kt.coil3:coil-test", version.ref = "coil" } compound = { module = "io.element.android:compound-android", version = "25.4.4" } datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "datetime" } serialization_json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_json" } -kotlinx_collections_immutable = "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8" +kotlinx_collections_immutable = "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0" showkase = { module = "com.airbnb.android:showkase", version.ref = "showkase" } showkase_processor = { module = "com.airbnb.android:showkase-processor", version.ref = "showkase" } jsoup = "org.jsoup:jsoup:1.20.1" From 6a2fef0eb241a2537711459f75faf4751a3f58c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 15:51:22 +0000 Subject: [PATCH 13/33] fix(deps): update media3 to v1.7.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0da9df9aa9..1eb476fed4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ constraintlayout = "2.2.1" constraintlayout_compose = "1.1.1" lifecycle = "2.9.0" activity = "1.10.1" -media3 = "1.6.1" +media3 = "1.7.1" camera = "1.4.2" # Compose From 109336b2176552dd343ce500793c7a5e60f19a63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 17:56:33 +0200 Subject: [PATCH 14/33] fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v3 (#4729) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0da9df9aa9..c8cd51fba0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -134,7 +134,7 @@ network_okhttp_logging = { module = "com.squareup.okhttp3:logging-interceptor" } network_okhttp_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_mockwebserver = { module = "com.squareup.okhttp3:mockwebserver" } -network_retrofit_bom = "com.squareup.retrofit2:retrofit-bom:2.12.0" +network_retrofit_bom = "com.squareup.retrofit2:retrofit-bom:3.0.0" network_retrofit = { module = "com.squareup.retrofit2:retrofit" } network_retrofit_converter_serialization = { module = "com.squareup.retrofit2:converter-kotlinx-serialization" } From 9067c2c7c24c4427ea1d4e453fa5093352fe91bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 16:22:32 +0000 Subject: [PATCH 15/33] fix(deps): update kotlinpoet to v2.2.0 (#4732) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c8cd51fba0..0aa2f926c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ # Project android_gradle_plugin = "8.10.0" kotlin = "2.1.21" -kotlinpoet = "2.1.0" +kotlinpoet = "2.2.0" ksp = "2.1.21-2.0.1" firebaseAppDistribution = "5.1.1" From 90f89b9088ae27a9c55a2e28378bb31ee0415156 Mon Sep 17 00:00:00 2001 From: ElementBot <110224175+ElementBot@users.noreply.github.com> Date: Mon, 19 May 2025 10:17:02 +0200 Subject: [PATCH 16/33] Sync Strings (#4739) * Sync Strings from Localazy * Sync strings again --------- Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com> Co-authored-by: Benoit Marty --- .../src/main/res/values-de/translations.xml | 2 +- .../src/main/res/values-cy/translations.xml | 8 - .../src/main/res/values-cy/translations.xml | 16 - .../src/main/res/values-cs/translations.xml | 3 + .../src/main/res/values-cy/translations.xml | 5 +- .../src/main/res/values-de/translations.xml | 4 +- .../src/main/res/values-et/translations.xml | 2 + .../src/main/res/values-fr/translations.xml | 3 + .../src/main/res/values-hu/translations.xml | 3 + .../src/main/res/values-nb/translations.xml | 3 + .../src/main/res/values-sk/translations.xml | 2 + .../src/main/res/values-uk/translations.xml | 3 +- .../src/main/res/values-cy/translations.xml | 24 - .../src/main/res/values-cs/translations.xml | 1 + .../src/main/res/values-cy/translations.xml | 1 + .../src/main/res/values-et/translations.xml | 1 + .../src/main/res/values-fr/translations.xml | 1 + .../src/main/res/values-hu/translations.xml | 1 + .../src/main/res/values-nb/translations.xml | 1 + .../src/main/res/values-sk/translations.xml | 1 + .../src/main/res/values-cy/translations.xml | 8 - .../src/main/res/values-de/translations.xml | 6 +- .../src/main/res/values-cy/translations.xml | 48 - .../src/main/res/values-cy/translations.xml | 8 - .../src/main/res/values-be/translations.xml | 5 + .../src/main/res/values-bg/translations.xml | 4 + .../src/main/res/values-cs/translations.xml | 10 + .../src/main/res/values-cy/translations.xml | 45 +- .../src/main/res/values-de/translations.xml | 4 + .../src/main/res/values-el/translations.xml | 4 + .../src/main/res/values-es/translations.xml | 4 + .../src/main/res/values-et/translations.xml | 9 + .../src/main/res/values-eu/translations.xml | 4 + .../src/main/res/values-fi/translations.xml | 4 + .../src/main/res/values-fr/translations.xml | 9 + .../src/main/res/values-hu/translations.xml | 9 + .../src/main/res/values-in/translations.xml | 3 + .../src/main/res/values-it/translations.xml | 4 + .../src/main/res/values-ka/translations.xml | 4 + .../src/main/res/values-nb/translations.xml | 9 + .../src/main/res/values-nl/translations.xml | 4 + .../src/main/res/values-pl/translations.xml | 5 + .../main/res/values-pt-rBR/translations.xml | 4 + .../src/main/res/values-pt/translations.xml | 4 + .../src/main/res/values-ro/translations.xml | 5 + .../src/main/res/values-ru/translations.xml | 5 + .../src/main/res/values-sk/translations.xml | 10 + .../src/main/res/values-sv/translations.xml | 4 + .../src/main/res/values-tr/translations.xml | 4 + .../src/main/res/values-uk/translations.xml | 5 + .../main/res/values-zh-rTW/translations.xml | 3 + .../src/main/res/values-zh/translations.xml | 3 + .../src/main/res/values/localazy.xml | 6 +- .../appnav.loggedin_LoggedInView_Day_3_de.png | 4 +- ...changeserver_ChangeServerView_Day_3_de.png | 4 +- ....qrcode.error_QrCodeErrorView_Day_5_de.png | 4 +- ...ns.qrcode.scan_QrCodeScanView_Day_4_de.png | 3 + screenshots/html/data.js | 1639 +++++++++-------- 58 files changed, 1016 insertions(+), 986 deletions(-) create mode 100644 screenshots/de/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_de.png diff --git a/appnav/src/main/res/values-de/translations.xml b/appnav/src/main/res/values-de/translations.xml index 92792a2d09..339d346a6b 100644 --- a/appnav/src/main/res/values-de/translations.xml +++ b/appnav/src/main/res/values-de/translations.xml @@ -1,6 +1,6 @@ "Abmelden und aktualisieren" - "%1$sunterstützt das alte Protokoll nicht mehr. Bitte melden Sie sich ab und wieder an, um die App weiter nutzen zu können." + "%1$s unterstützt das alte Protokoll nicht mehr. Bitte melden Sie sich ab und wieder an, um die App weiter nutzen zu können." "Dein Homeserver unterstützt das alte Protokoll nicht mehr. Bitte logge dich aus und melde dich wieder an, um die App weiter zu nutzen." diff --git a/features/knockrequests/impl/src/main/res/values-cy/translations.xml b/features/knockrequests/impl/src/main/res/values-cy/translations.xml index 8257ae857b..2ea2ec041e 100644 --- a/features/knockrequests/impl/src/main/res/values-cy/translations.xml +++ b/features/knockrequests/impl/src/main/res/values-cy/translations.xml @@ -25,14 +25,6 @@ "Dim cais i ymuno yn disgwyl" "Yn llwytho ceisiadau i ymuno…" "Ceisiadau i ymuno" - - "Dyw %1$s na +%2$d arall eisiau ymuno â\'r ystafell hon" - "Mae %1$s +%2$d arall eisiau ymuno â\'r ystafell hon" - "Mae %1$s +%2$d arall eisiau ymuno â\'r ystafell hon" - "Mae %1$s +%2$d arall eisiau ymuno â\'r ystafell hon" - "Mae %1$s +%2$d arall eisiau ymuno â\'r ystafell hon" - "Mae %1$s +%2$d arall eisiau ymuno â\'r ystafell hon" - "Gweld y cyfan" "Derbyn" "Mae %1$s eisiau ymuno â\'r ystafell hon" diff --git a/features/lockscreen/impl/src/main/res/values-cy/translations.xml b/features/lockscreen/impl/src/main/res/values-cy/translations.xml index d82bc28cc7..de8f2d7596 100644 --- a/features/lockscreen/impl/src/main/res/values-cy/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-cy/translations.xml @@ -24,22 +24,6 @@ Dewiswch rywbeth cofiadwy. Os byddwch chi\'n anghofio\'r PIN hwn, byddwch chi\'n "Nid yw\'r PINau\'n cyfateb" "Bydd angen i chi ail-fewngofnodi a chreu PIN newydd i barhau" "Rydych chi\'n cael eich allgofnodi" - - "Does gennych %1$d ceisiadau i ddatgloi" - "Mae gennych %1$d cais i ddatgloi" - "Mae gennych %1$d gais i ddatgloi" - "Mae gennych %1$d chais i ddatgloi" - "Mae gennych %1$d chais i ddatgloi" - "Mae gennych %1$d cais i ddatgloi" - - - "PIN anghywir. Does gennych %1$d cais arall" - "PIN anghywir. Mae gennych %1$d cais arall" - "PIN anghywir. Mae gennych %1$d gais arall" - "PIN anghywir. Mae gennych %1$d chais arall" - "PIN anghywir. Mae gennych %1$d chais arall" - "PIN anghywir. Mae gennych %1$d cais arall" - "Defnyddio biometreg" "Defnyddio PIN" "Yn allgofnodi…" diff --git a/features/login/impl/src/main/res/values-cs/translations.xml b/features/login/impl/src/main/res/values-cs/translations.xml index c828973c84..c0b2e69c79 100644 --- a/features/login/impl/src/main/res/values-cs/translations.xml +++ b/features/login/impl/src/main/res/values-cs/translations.xml @@ -17,6 +17,9 @@ "Server není k dispozici kvůli problému se souborem well-known: %1$s" "Vybraný poskytovatel účtu nepodporuje klouzavou synchronizaci. Pro použití %1$s je nutná aktualizace serveru." + "Uživateli %1$s není dovoleno se připojit do %2$s." + "Tato aplikace byla nakonfigurována tak, aby umožňovala: %1$s." + "Poskytovatel účtu %1$s není povolen." "Adresa URL domovského serveru" "Zadejte adresu domény." "Jaká je adresa vašeho serveru?" diff --git a/features/login/impl/src/main/res/values-cy/translations.xml b/features/login/impl/src/main/res/values-cy/translations.xml index e44da81b50..7751ea1270 100644 --- a/features/login/impl/src/main/res/values-cy/translations.xml +++ b/features/login/impl/src/main/res/values-cy/translations.xml @@ -14,9 +14,12 @@ "Defnyddiwch ddarparwr cyfrif gwahanol, fel eich gweinydd preifat eich hun neu gyfrif gwaith." "Newid darparwr cyfrif" "Doedd dim modd i ni gyrraedd y gweinydd cartref hwn. Gwiriwch eich bod wedi rhoi URL y gweinydd cartref yn gywir. Os yw\'r URL yn gywir, cysylltwch â gweinyddwr eich gweinydd cartref am ragor o help." - "Nid yw cydweddu llithrig ar gael oherwydd problem yn y ffeil adnabyddus: + "Dyw cydweddu llithrig ddim ar gael oherwydd problem yn y ffeil .well-known: %1$s" "Dyw\'r darparwr cyfrif hwn ddim yn cefnogi cydweddu llithro. Mae angen uwchraddio\'r gweinydd i ddefnyddio %1$s." + "Does dim caniatâd i %1$s gysylltu â %2$s." + "Mae\'r ap hwn wedi\'i ffurfweddu i ganiatáu: %1$s." + "Dyw darparwr cyfrif %1$s dddim yn cael ei ganiatáu." "URL y Gweinydd Cartref" "Rhowch gyfeiriad parth." "Beth yw cyfeiriad eich gweinydd?" diff --git a/features/login/impl/src/main/res/values-de/translations.xml b/features/login/impl/src/main/res/values-de/translations.xml index f4086261e3..fdaa1812f7 100644 --- a/features/login/impl/src/main/res/values-de/translations.xml +++ b/features/login/impl/src/main/res/values-de/translations.xml @@ -17,7 +17,7 @@ "Der Server ist aufgrund eines Problems im \"well-known file\" nicht verfügbar: %1$s" "Der gewählte Kontoanbieter unterstützt Sliding Sync nicht. Für die Verwendung von %1$s ist ein Upgrade des Servers erforderlich." - "%1$sdarf keine Verbindung herstellen zu%2$s." + "%1$s darf keine Verbindung herstellen zu %2$s." "Homeserver-URL" "Geben Sie eine Domainadresse ein." "Wie lautet die Adresse deines Servers?" @@ -54,7 +54,7 @@ Versuche, dich manuell anzumelden, oder scanne den QR-Code mit einem anderen Gerät." "QR-Code wird nicht unterstützt" "Ihr Kontoanbieter unterstützt %1$s nicht." - "%1$swird nicht unterstützt" + "%1$s wird nicht unterstützt" "Bereit zum Scannen" "%1$s auf einem Desktop-Gerät öffnen" "Klick auf deinen Avatar" diff --git a/features/login/impl/src/main/res/values-et/translations.xml b/features/login/impl/src/main/res/values-et/translations.xml index 448cdeec81..62d0e64c91 100644 --- a/features/login/impl/src/main/res/values-et/translations.xml +++ b/features/login/impl/src/main/res/values-et/translations.xml @@ -18,6 +18,8 @@ %1$s" "Valitud teenusepakkuja ei toeta „sliding sync“ režiimi. Rakenduse %1$s kasutamiseks on vaja serverit uuendada." "%1$s ei saa kasutada %2$s koduserverit." + "See rakendus on seadistatud järgneva koduserveri kasutamiseks: %1$s." + "%1$s teenusepakkuja pole lubatud." "Koduserveri url" "Sisesta domeeni aadress." "Mis on sinu koduserveri aadress?" diff --git a/features/login/impl/src/main/res/values-fr/translations.xml b/features/login/impl/src/main/res/values-fr/translations.xml index 44aa161f8b..aa2ca75160 100644 --- a/features/login/impl/src/main/res/values-fr/translations.xml +++ b/features/login/impl/src/main/res/values-fr/translations.xml @@ -17,6 +17,9 @@ "Ce fournisseur de compte n’est pas disponible en raison d’un problème dans le fichier .well-known: %1$s" "Le fournisseur de compte sélectionné ne prend pas en charge le sliding sync. Une mise à jour du serveur est nécessaire pour pouvoir utiliser %1$s." + "%1$s n’est pas autorisé à se connecter à %2$s." + "Cette application a été configurée pour autoriser: %1$s." + "Le fournisseur de compte %1$s n’est pas autorisé." "URL du serveur d’accueil" "Saisissez une adresse de domaine." "Quelle est l’adresse de votre serveur ?" diff --git a/features/login/impl/src/main/res/values-hu/translations.xml b/features/login/impl/src/main/res/values-hu/translations.xml index ce5ead811d..c5704c4ddf 100644 --- a/features/login/impl/src/main/res/values-hu/translations.xml +++ b/features/login/impl/src/main/res/values-hu/translations.xml @@ -17,6 +17,9 @@ "A kiszolgáló a well-known fájl problémája miatt nem érhető el: %1$s" "A kiválasztott fiókszolgáltató nem támogatja a csúszóablakos szinkronizálást. Az %1$s használatához kiszolgálófrissítés szükséges." + "%1$s nem csatlakozhat ide: %2$s." + "Ezt az alkalmazást úgy konfigurálták, hogy engedélyezi ezt: %1$s." + "A(z) %1$s fiókszolgáltató nem engedélyezett." "Matrix-kiszolgáló webcíme" "Adjon meg egy domaincímet." "Mi a kiszolgálója címe?" diff --git a/features/login/impl/src/main/res/values-nb/translations.xml b/features/login/impl/src/main/res/values-nb/translations.xml index 552352c648..6622eb750d 100644 --- a/features/login/impl/src/main/res/values-nb/translations.xml +++ b/features/login/impl/src/main/res/values-nb/translations.xml @@ -17,6 +17,9 @@ "Serveren er ikke tilgjengelig på grunn av et problem i den velkjente filen: %1$s" "Den valgte kontoleverandøren støtter ikke sliding sync. En oppgradering av serveren er nødvendig for å bruke %1$s." + "%1$s har ikke lov til å koble seg til %2$s." + "Denne appen er konfigurert til å tillate: %1$s." + "Kontoleverandør %1$s er ikke tillatt." "URL til hjemmeserver" "Skriv inn en domeneadresse." "Hva er adressen til serveren din?" diff --git a/features/login/impl/src/main/res/values-sk/translations.xml b/features/login/impl/src/main/res/values-sk/translations.xml index 0f79880007..92cb48b947 100644 --- a/features/login/impl/src/main/res/values-sk/translations.xml +++ b/features/login/impl/src/main/res/values-sk/translations.xml @@ -18,6 +18,8 @@ %1$s" "Vybraný poskytovateľ účtu nepodporuje kĺzavú synchronizáciu. Na používanie aplikácie %1$s je potrebná aktualizácia servera," "%1$s nemá dovolené pripojiť sa k %2$s." + "Táto aplikácia bola nastavená tak, aby povoľovala: %1$s." + "Poskytovateľ účtu %1$s nie je povolený." "Adresa URL domovského servera" "Zadajte adresu domény." "Aká je adresa vášho servera?" diff --git a/features/login/impl/src/main/res/values-uk/translations.xml b/features/login/impl/src/main/res/values-uk/translations.xml index 57cc379323..43e3846e2e 100644 --- a/features/login/impl/src/main/res/values-uk/translations.xml +++ b/features/login/impl/src/main/res/values-uk/translations.xml @@ -14,9 +14,10 @@ "Використати іншого провайдера облікових записів, наприклад, власний приватний сервер або робочий обліковий запис." "Змінити провайдера облікового запису" "Не вдалося під\'єднатися до цього домашнього сервера. Перевірте правильність введеної URL-адреси домашнього сервера. Якщо URL-адреса правильна, зверніться по додаткову допомогу до адміністратора домашнього сервера." - "Sliding sync недоступний через проблему у файлі well-known: + "Сервер недоступний через помилку у файлі well-known: %1$s" "URL-адреса домашнього сервера" + "Введіть адресу домену." "Яка адреса вашого сервера?" "Виберіть свій сервер" "Створити обліковий запис" diff --git a/features/messages/impl/src/main/res/values-cy/translations.xml b/features/messages/impl/src/main/res/values-cy/translations.xml index 9cf82d6522..9f44d8a019 100644 --- a/features/messages/impl/src/main/res/values-cy/translations.xml +++ b/features/messages/impl/src/main/res/values-cy/translations.xml @@ -38,29 +38,5 @@ "Dangos llai" "Dangos rhagor" "Newydd" - - "%1$d newid ystafelloedd" - "%1$d newid ystafell" - "%1$d newid ystafell" - "%1$d newid ystafell" - "%1$d newid ystafell" - "%1$d newid ystafell" - - - "%1$s, %2$s a %3$d arall" - "%1$s, %2$s a %3$d arall" - "%1$s, %2$s a %3$d arall" - "%1$s, %2$s a %3$d arall" - "%1$s, %2$s a %3$d arall" - "%1$s, %2$s a %3$d arall" - - - "Mae %1$s yn teipio" - "Mae %1$s yn teipio" - "Mae %1$s yn teipio" - "Mae %1$s yn teipio" - "Mae %1$s yn teipio" - "Mae %1$s yn teipio" - "%1$s a %2$s" diff --git a/features/onboarding/impl/src/main/res/values-cs/translations.xml b/features/onboarding/impl/src/main/res/values-cs/translations.xml index 264478f26e..ee565c39b6 100644 --- a/features/onboarding/impl/src/main/res/values-cs/translations.xml +++ b/features/onboarding/impl/src/main/res/values-cs/translations.xml @@ -1,6 +1,7 @@ "Ruční přihlášení" + "Přihlásit se do %1$s" "Přihlásit se pomocí QR kódu" "Vytvořit účet" "Vítejte v dosud nejrychlejším %1$su. Vylepšený pro rychlost a jednoduchost." diff --git a/features/onboarding/impl/src/main/res/values-cy/translations.xml b/features/onboarding/impl/src/main/res/values-cy/translations.xml index 070736e5dc..3ecac1ad97 100644 --- a/features/onboarding/impl/src/main/res/values-cy/translations.xml +++ b/features/onboarding/impl/src/main/res/values-cy/translations.xml @@ -1,6 +1,7 @@ "Mewngofnodwch â llaw" + "Mewngofnodi i %1$s" "Mewngofnodwch gyda chod QR" "Creu cyfrif" "Croeso i\'r %1$s cyflymaf erioed. Yn nodedig am gyflymder a symlrwydd." diff --git a/features/onboarding/impl/src/main/res/values-et/translations.xml b/features/onboarding/impl/src/main/res/values-et/translations.xml index 5242c6f69c..1df2de067c 100644 --- a/features/onboarding/impl/src/main/res/values-et/translations.xml +++ b/features/onboarding/impl/src/main/res/values-et/translations.xml @@ -1,6 +1,7 @@ "Logi sisse käsitsi" + "Logi sisse teenusesse %1$s" "Logi sisse QR-koodi alusel" "Loo kasutajakonto" "Läbi aegade kiireim ja mugavaim %1$s." diff --git a/features/onboarding/impl/src/main/res/values-fr/translations.xml b/features/onboarding/impl/src/main/res/values-fr/translations.xml index 0d8a7fa347..f6dbaadf61 100644 --- a/features/onboarding/impl/src/main/res/values-fr/translations.xml +++ b/features/onboarding/impl/src/main/res/values-fr/translations.xml @@ -1,6 +1,7 @@ "Se connecter manuellement" + "Se connecter à %1$s" "Se connecter avec un QR code" "Créer un compte" "Bienvenue dans l’application %1$s la plus rapide de tous les temps. Boosté pour plus de rapidité et de simplicité." diff --git a/features/onboarding/impl/src/main/res/values-hu/translations.xml b/features/onboarding/impl/src/main/res/values-hu/translations.xml index 308478f88b..a992424d68 100644 --- a/features/onboarding/impl/src/main/res/values-hu/translations.xml +++ b/features/onboarding/impl/src/main/res/values-hu/translations.xml @@ -1,6 +1,7 @@ "Kézi bejelentkezés" + "Bejelentkezés ide: %1$s" "Bejelentkezés QR-kóddal" "Fiók létrehozása" "Üdvözöljük a valaha volt leggyorsabb %1$sben. Felturbózva, a sebesség és az egyszerűség érdekében." diff --git a/features/onboarding/impl/src/main/res/values-nb/translations.xml b/features/onboarding/impl/src/main/res/values-nb/translations.xml index 9f2eb50769..b10c0c7a78 100644 --- a/features/onboarding/impl/src/main/res/values-nb/translations.xml +++ b/features/onboarding/impl/src/main/res/values-nb/translations.xml @@ -1,6 +1,7 @@ "Logg på manuelt" + "Logg inn på %1$s" "Logg inn med QR-kode" "Opprett konto" "Velkommen til den raskeste %1$s noensinne. Superladet for hastighet og enkelhet." diff --git a/features/onboarding/impl/src/main/res/values-sk/translations.xml b/features/onboarding/impl/src/main/res/values-sk/translations.xml index 7ed548d025..1cba6d81fb 100644 --- a/features/onboarding/impl/src/main/res/values-sk/translations.xml +++ b/features/onboarding/impl/src/main/res/values-sk/translations.xml @@ -1,6 +1,7 @@ "Prihlásiť sa manuálne" + "Prihlásiť sa do %1$s" "Prihlásiť sa pomocou QR kódu" "Vytvoriť účet" "Vitajte v najrýchlejšom %1$s vôbec. Nadupaný pre rýchlosť a jednoduchosť." diff --git a/features/roomdetails/impl/src/main/res/values-cy/translations.xml b/features/roomdetails/impl/src/main/res/values-cy/translations.xml index ab0a8fa95d..9ffd9a793b 100644 --- a/features/roomdetails/impl/src/main/res/values-cy/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-cy/translations.xml @@ -67,14 +67,6 @@ "Pwnc" "Wrthi\'n diweddaru ystafell…" "Nid oes unrhyw ddefnyddwyr gwaharddedig yn yr ystafell hon." - - "%1$d personau" - "%1$d person" - "%1$d berson" - "%1$d person" - "%1$d pherson" - "%1$d person" - "Gwahardd o ystafell" "Dileu aelod yn unig" "Adfer" diff --git a/libraries/eventformatter/impl/src/main/res/values-de/translations.xml b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml index 2c8bb82c89..35ed88c4b2 100644 --- a/libraries/eventformatter/impl/src/main/res/values-de/translations.xml +++ b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml @@ -20,7 +20,7 @@ "%1$s hat %2$s gesperrt" "Du hast %1$s gesperrt" "Sie haben gesperrt %1$s: %2$s" - "%1$sverboten%2$s: %3$s" + "%1$s verboten %2$s: %3$s" "%1$s hat den Raum erstellt" "Du hast den Raum erstellt" "%1$s hat %2$s eingeladen" @@ -45,7 +45,7 @@ "Du hast den Raum-Namen geändert in: %1$s" "%1$s hat den Raum-Namen entfernt" "Du hast den Raum-Namen entfernt" - "%1$shat keine Änderungen vorgenommen" + "%1$s hat keine Änderungen vorgenommen" "Du hast keine Änderungen vorgenommen" "%1$s hat die fixierten Nachrichten geändert" "Du hast die fixierten Nachrichten geändert" @@ -58,7 +58,7 @@ "%1$s hat %2$s entfernt" "Du hast %1$s entfernt" "Sie haben %1$s entfernt: %2$s" - "%1$sentfernt%2$s: %3$s" + "%1$s entfernt %2$s: %3$s" "%1$s hat eine Einladung an %2$s gesendet, dem Raum beizutreten" "Du hast eine Einladung an %1$s gesendet, dem Raum beizutreten" "%1$s hat die Einladung an %2$s zum Betreten des Raums zurückgezogen" diff --git a/libraries/push/impl/src/main/res/values-cy/translations.xml b/libraries/push/impl/src/main/res/values-cy/translations.xml index c6500f40b4..9db7ddf499 100644 --- a/libraries/push/impl/src/main/res/values-cy/translations.xml +++ b/libraries/push/impl/src/main/res/values-cy/translations.xml @@ -5,35 +5,11 @@ "Hysbysiadau swnllyd" "Galwadau\'n canu" "Hysbysiadau tawel" - - "%1$s: %2$d negeseuon" - "%1$s: %2$d neges" - "%1$s: %2$d neges" - "%1$s: %2$d neges" - "%1$s: %2$d neges" - "%1$s: %2$d neges" - - - "%d hysbysiadau" - "%d hysbysiad" - "%d hysbysiad" - "%d hysbysiad" - "%d hysbysiad" - "%d hysbysiad" - "Hysbysiad" "📹 Galwad i mewn" "** Wedi methu anfon - agorwch yr ystafell" "Ymuno" "Gwrthod" - - "%d gwahoddiadau" - "%d gwahoddiadau" - "%d gwahoddiadau" - "%d gwahoddiadau" - "%d gwahoddiadau" - "%d gwahoddiadau" - "Wedi eich gwahodd i sgwrsio" "Mae %1$s wedi eich gwahodd i sgwrsio" "Wedi eich crybwyll: %1$s" @@ -56,25 +32,9 @@ "Rydych chi\'n edrych ar yr hysbysiad! Cliciwch fi!" "%1$s: %2$s" "%1$s : %2$s %3$s" - - "%d negeseuon hysbyswyd heb eu darllen" - "%d neges hysbyswyd heb ei ddarllen" - "%d neges hysbyswyd heb eu darllen" - "%d neges hysbyswyd heb eu darllen" - "%d neges hysbyswyd heb eu darllen" - "%d neges hysbyswyd heb eu darllen" - "%1$s a %2$s" "%1$s yn %2$s" "%1$s yn %2$s a %3$s" - - "%d ystafelloedd" - "%d ystafell" - "%d ystafell" - "%d ystafell" - "%d ystafell" - "%d ystafell" - "Cydweddu\'n y cefndir" "Gwasanaethau Google" "Heb ganfod Google Play Services dilys. Efallai fydd hysbysiadau ddim yn gweithio\'n iawn." @@ -84,14 +44,6 @@ "Darparwr gwthio presennol" "Gwnewch yn siŵr fod y cais yn cefnogi o leiaf un darparwr gwthio." "Heb ganfod cefnogaeth darparwr gwthio." - - "Wedi canfod %1$d darparwyr gwthio: %2$s" - "Wedi canfod %1$d darparwr gwthio: %2$s" - "Wedi canfod %1$d darparwr gwthio: %2$s" - "Wedi canfod %1$d darparwr gwthio: %2$s" - "Wedi canfod %1$d darparwr gwthio: %2$s" - "Wedi canfod %1$d darparwr gwthio: %2$s" - "Adeiladwyd y rhaglen gyda chefnogaeth ar gyfer: %1$s" "Cefnogaeth darparwr gwthio" "Gwiriwch y gall y cais ddangos hysbysiad." diff --git a/libraries/pushproviders/unifiedpush/src/main/res/values-cy/translations.xml b/libraries/pushproviders/unifiedpush/src/main/res/values-cy/translations.xml index 1a46d85451..38ccabb307 100644 --- a/libraries/pushproviders/unifiedpush/src/main/res/values-cy/translations.xml +++ b/libraries/pushproviders/unifiedpush/src/main/res/values-cy/translations.xml @@ -2,13 +2,5 @@ "Sicrhewch fod dosbarthwyr UnifiedPush ar gael." "Heb ganfod dosbarthwyr gwthio." - - "Wedi canfod %1$d dosbarthwyr: %2$s" - "Wedi canfod %1$d dosbarthwr: %2$s" - "Wedi canfod %1$d dosbarthwr: %2$s" - "Wedi canfod %1$d dosbarthwr: %2$s" - "Wedi canfod %1$d dosbarthwr: %2$s" - "Wedi canfod %1$d dosbarthwr: %2$s" - "Gwiriwch UnifiedPush" diff --git a/libraries/ui-strings/src/main/res/values-be/translations.xml b/libraries/ui-strings/src/main/res/values-be/translations.xml index 6448bfb974..cfbd0daa7d 100644 --- a/libraries/ui-strings/src/main/res/values-be/translations.xml +++ b/libraries/ui-strings/src/main/res/values-be/translations.xml @@ -172,6 +172,11 @@ "Светлая" "Спасылка скапіравана ў буфер абмену" "Загрузка…" + + "%d іншы" + "%d іншыя" + "%d іншых" + "%1$d удзельнік" "%1$d удзельнікі" diff --git a/libraries/ui-strings/src/main/res/values-bg/translations.xml b/libraries/ui-strings/src/main/res/values-bg/translations.xml index dbe0fa17dc..d23c6d5dbf 100644 --- a/libraries/ui-strings/src/main/res/values-bg/translations.xml +++ b/libraries/ui-strings/src/main/res/values-bg/translations.xml @@ -125,6 +125,10 @@ "Светъл" "Връзката е копирана в клипборда" "Зарежда се…" + + "%d друг" + "%d други" + "%1$d член" "%1$d членове" diff --git a/libraries/ui-strings/src/main/res/values-cs/translations.xml b/libraries/ui-strings/src/main/res/values-cs/translations.xml index 4d7409e7c1..c6c48baf17 100644 --- a/libraries/ui-strings/src/main/res/values-cs/translations.xml +++ b/libraries/ui-strings/src/main/res/values-cs/translations.xml @@ -200,6 +200,11 @@ Důvod: %1$s." "Odkaz zkopírován do schránky" "Načítání…" "Načítání dalších…" + + "%d další" + "%d další" + "%d dalších" + "%1$d člen" "%1$d členové" @@ -355,6 +360,11 @@ Opravdu chcete pokračovat?" "Odebrat z místnosti" "Odebrat člena a zakázat mu připojení v budoucnu?" "Odstraňování %1$s…" + "Zrušit vykázání z místnosti" + "Zrušit vykázání" + "Pokud by byli pozváni, mohli by se znovu připojit do místnosti" + "Opravdu chcete zrušit vykázání tohoto člena?" + "Rušení vykázání %1$s" "Výběr média se nezdařil, zkuste to prosím znovu." "Titulky nemusí být viditelné pro lidi, kteří používají starší aplikace." "Nahrání média se nezdařilo, zkuste to prosím znovu." diff --git a/libraries/ui-strings/src/main/res/values-cy/translations.xml b/libraries/ui-strings/src/main/res/values-cy/translations.xml index 262e145296..893bb71a1f 100644 --- a/libraries/ui-strings/src/main/res/values-cy/translations.xml +++ b/libraries/ui-strings/src/main/res/values-cy/translations.xml @@ -2,14 +2,6 @@ "Afatar" "Dileu" - - "%1$d nodau wedi eu cynnig" - "%1$d nod wedi ei gynnig" - "%1$d nod wedi eu cynnig" - "%1$d nod wedi eu cynnig" - "%1$d nod wedi eu cynnig" - "%1$d nod wedi eu cynnig" - "Cuddio cyfrinair" "Ymuno â galwad" "Symud i\'r gwaelod" @@ -25,14 +17,6 @@ "Ymateb gyda %1$s" "Ymateb gydag emojis eraill" "Wedi\'i ddarllen gan %1$s a %2$s" - - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s a %2$d arall" - "Wedi\'i ddarllen gan %1$s" "Tapio i ddangos y cyfan" "Wedi dileu adwaith gyda %1$s" @@ -206,14 +190,6 @@ Rheswm: %1$s." "Dolen wedi\'i chopïo i\'r clipfwrdd" "Yn Llwytho…" "Wrthi\'n llwytho mwy…" - - "%1$d aelodau" - "%1$d aelod" - "%1$d aelod" - "%1$d aelod" - "%1$d aelod" - "%1$d aelod" - "Neges" "Gweithredoedd neges" "Cynllun y neges" @@ -238,14 +214,6 @@ Rheswm: %1$s." "Pleidlais: %1$s" "Cyfanswm y pleidleisiau: %1$s" "Bydd y canlyniadau\'n dangos ar ôl i\'r bleidlais ddod i ben" - - "%d pleidleisiau" - "%d pleidlais" - "%d pleidlais" - "%d pleidlais" - "%d pleidlais" - "%d pleidlais" - "Polisi preifatrwydd" "Adwaith" "Adweithiau" @@ -367,20 +335,17 @@ Ydych chi\'n siŵr eich bod am barhau?" "Tynnu o\'r ystafell" "Dileu aelod a\'u gwahardd rhag ymuno yn y dyfodol?" "Wrthi\'n dileu %1$s…" + "Dad-wahardd o\'r ystafell" + "Dad-wahardd" + "Bydden nhw\'n gallu ymuno â\'r ystafell eto os fydd rhywun yn eu gwahodd" + "Ydych chi\'n siŵr eich bod chi eisiau dadwahardd yr aelod hwn?" + "Dad-wahardd %1$s" "Wedi methu dewis cyfrwng, ceisiwch eto." "Efallai na fydd capsiynau yn weladwy i bobl sy\'n defnyddio apiau hŷn." "Wedi methu â phrosesu cyfryngau i\'w llwytho, ceisiwch eto." "Wedi methu llwytho cyfryngau, ceisiwch eto." "Pwyswch ar neges a dewis “%1$s” i\'w cynnwys yma." "Pinio negeseuon pwysig fel y mae modd eu darganfod yn hawdd" - - "%1$d Negeseuon wedi\'u pinio" - "%1$d Neges wedi\'i phinio" - "%1$d Neges wedi\'i phinio" - "%1$d Neges wedi\'i phinio" - "%1$d Neges wedi\'i phinio" - "%1$d Neges wedi\'i phinio" - "Negeseuon wedi\'u pinio" "Rydych chi ar fin mynd i\'ch cyfrif %1$s i ailosod eich hunaniaeth. Wedi hynny byddwch yn cael eich tywys yn ôl i\'r ap." "Methu cadarnhau? Ewch i\'ch cyfrif i ailosod eich hunaniaeth." diff --git a/libraries/ui-strings/src/main/res/values-de/translations.xml b/libraries/ui-strings/src/main/res/values-de/translations.xml index 8945b8cd6b..84fb72c9f3 100644 --- a/libraries/ui-strings/src/main/res/values-de/translations.xml +++ b/libraries/ui-strings/src/main/res/values-de/translations.xml @@ -198,6 +198,10 @@ Grund: %1$s." "Link in die Zwischenablage kopiert" "Laden…" "Mehr wird geladen…" + + "%d weitere" + "%d weitere" + "%1$d Mitglied" "%1$d Mitglieder" diff --git a/libraries/ui-strings/src/main/res/values-el/translations.xml b/libraries/ui-strings/src/main/res/values-el/translations.xml index 24a92cad85..5a318772b0 100644 --- a/libraries/ui-strings/src/main/res/values-el/translations.xml +++ b/libraries/ui-strings/src/main/res/values-el/translations.xml @@ -198,6 +198,10 @@ "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο" "Φόρτωση…" "Φόρτωση περισσότερων…" + + "%d ακόμη" + "%d ακόμη" + "%1$d μέλος" "%1$d μέλη" diff --git a/libraries/ui-strings/src/main/res/values-es/translations.xml b/libraries/ui-strings/src/main/res/values-es/translations.xml index 1cf59dacbf..a09dbb1858 100644 --- a/libraries/ui-strings/src/main/res/values-es/translations.xml +++ b/libraries/ui-strings/src/main/res/values-es/translations.xml @@ -185,6 +185,10 @@ Motivo: %1$s." "Enlace copiado al portapapeles" "Cargando…" "Cargando más…" + + "%d otro" + "%d otros" + "%1$d miembro" "%1$d miembros" diff --git a/libraries/ui-strings/src/main/res/values-et/translations.xml b/libraries/ui-strings/src/main/res/values-et/translations.xml index 4d0bc5c422..93a75c7966 100644 --- a/libraries/ui-strings/src/main/res/values-et/translations.xml +++ b/libraries/ui-strings/src/main/res/values-et/translations.xml @@ -198,6 +198,10 @@ Põhjus: %1$s." "Link on kopeeritud lõikelauale" "Laadime…" "Laadime veel…" + + "%d muu" + "%d muud" + "%1$d liige" "%1$d liiget" @@ -351,6 +355,11 @@ Kas sa oled kindel, et soovid jätkata?" "Eemalda kasutaja jututoast" "Kas eemaldama kasutaja ja seame talle tulevikuks suhtluskeelu?" "Eemaldame kasutajat %1$s…" + "Eemalda suhtluskeeld jututoas" + "Eemalda suhtluskeeld" + "Ta võib kutse saamisel liituda jututoaga uuesti" + "Kas oled kindel, et soovid selle liikme suhtluskeelu eemaldada?" + "Eemaldame suhtluskeelu kasutajalt %1$s" "Meediafaili valimine ei õnnestunud. Palun proovi uuesti." "Selgitused ja alapealkirjad ei pruugi olla nähtavad vanemate rakenduste kasutajatele." "Meediafaili töötlemine enne üleslaadimist ei õnnestunud. Palun proovi uuesti." diff --git a/libraries/ui-strings/src/main/res/values-eu/translations.xml b/libraries/ui-strings/src/main/res/values-eu/translations.xml index e43f2d24f7..a6c62b83dd 100644 --- a/libraries/ui-strings/src/main/res/values-eu/translations.xml +++ b/libraries/ui-strings/src/main/res/values-eu/translations.xml @@ -188,6 +188,10 @@ Arrazoia: %1$s." "Esteka arbelean kopiatu da" "Kargatzen…" "Gehiago kargatzen…" + + "beste %d" + "beste %d" + "Kide %1$d" "%1$d kide" diff --git a/libraries/ui-strings/src/main/res/values-fi/translations.xml b/libraries/ui-strings/src/main/res/values-fi/translations.xml index 293b3a49e2..df9098e801 100644 --- a/libraries/ui-strings/src/main/res/values-fi/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fi/translations.xml @@ -198,6 +198,10 @@ Syy: %1$s." "Linkki kopioitu leikepöydälle" "Ladataan…" "Ladataan lisää…" + + "%d muu" + "%d muuta" + "%1$d jäsen" "%1$d jäsentä" diff --git a/libraries/ui-strings/src/main/res/values-fr/translations.xml b/libraries/ui-strings/src/main/res/values-fr/translations.xml index 27cac31aa0..376a757ee5 100644 --- a/libraries/ui-strings/src/main/res/values-fr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml @@ -198,6 +198,10 @@ Raison : %1$s." "Lien copié dans le presse-papiers" "Chargement…" "Chargement…" + + "%d autre" + "%d autres" + "%1$d membre" "%1$d membres" @@ -351,6 +355,11 @@ Raison : %1$s." "Retirer le membre du salon" "Retirer le membre et interdire l’adhésion à l’avenir ?" "Enlever %1$s…" + "Débannir du salon" + "Débannir" + "L’utilisateur pourra à nouveau rejoindre le salon s’il est invité." + "Êtes-vous sûr de vouloir débannir cet utilisateur?" + "Débannissement de %1$s" "Échec de la sélection du média, veuillez réessayer." "Les légendes peuvent ne pas être visibles pour les utilisateurs d’anciennes applications." "Échec du traitement des médias à télécharger, veuillez réessayer." diff --git a/libraries/ui-strings/src/main/res/values-hu/translations.xml b/libraries/ui-strings/src/main/res/values-hu/translations.xml index d304030e00..a528b0b066 100644 --- a/libraries/ui-strings/src/main/res/values-hu/translations.xml +++ b/libraries/ui-strings/src/main/res/values-hu/translations.xml @@ -198,6 +198,10 @@ Ok: %1$s." "Hivatkozás a vágólapra másolva" "Betöltés…" "Továbbiak betöltése…" + + "%d további felhasználó" + "%d további felhasználó" + "%1$d tag" "%1$d tag" @@ -351,6 +355,11 @@ Biztos, hogy folytatja?" "Eltávolítás a szobából" "Eltávolítja a tagot, és megtiltja a jövőbeni csatlakozást?" "%1$s eltávolítása…" + "Visszaengedés a szobába" + "Kitiltás visszavonása" + "Újra beléphetnek a szobába, ha meghívják őket." + "Biztos, hogy feloldja a felhasználó kitiltását?" + "%1$s kitiltásának feloldása" "Nem sikerült kiválasztani a médiát, próbálja újra." "Előfordulhat, hogy a feliratok nem láthatók a régebbi alkalmazásokat használók számára." "Nem sikerült feldolgozni a feltöltendő médiát, próbálja újra." diff --git a/libraries/ui-strings/src/main/res/values-in/translations.xml b/libraries/ui-strings/src/main/res/values-in/translations.xml index c32ce5f730..c70f67ce04 100644 --- a/libraries/ui-strings/src/main/res/values-in/translations.xml +++ b/libraries/ui-strings/src/main/res/values-in/translations.xml @@ -181,6 +181,9 @@ Alasan: %1$s." "Terang" "Tautan disalin ke papan klip" "Memuat…" + + "%d lainnya" + "%1$d anggota" diff --git a/libraries/ui-strings/src/main/res/values-it/translations.xml b/libraries/ui-strings/src/main/res/values-it/translations.xml index e9864e090d..c185a0745e 100644 --- a/libraries/ui-strings/src/main/res/values-it/translations.xml +++ b/libraries/ui-strings/src/main/res/values-it/translations.xml @@ -190,6 +190,10 @@ Motivo:. %1$s" "Collegamento copiato negli appunti" "Caricamento…" "Caricamento in corso…" + + "%d altro" + "altri %d" + "%1$d membro" "%1$d membri" diff --git a/libraries/ui-strings/src/main/res/values-ka/translations.xml b/libraries/ui-strings/src/main/res/values-ka/translations.xml index 0405aa6235..4f6febc29e 100644 --- a/libraries/ui-strings/src/main/res/values-ka/translations.xml +++ b/libraries/ui-strings/src/main/res/values-ka/translations.xml @@ -147,6 +147,10 @@ "ღია" "ბმული კოპირებულია გაცვლის ბუფერში" "იტვირთება…" + + "%d სხვა" + "%d სხვა" + "%1$d წევრი" "%1$d წევრები" diff --git a/libraries/ui-strings/src/main/res/values-nb/translations.xml b/libraries/ui-strings/src/main/res/values-nb/translations.xml index ce8d655b6a..ccd0201788 100644 --- a/libraries/ui-strings/src/main/res/values-nb/translations.xml +++ b/libraries/ui-strings/src/main/res/values-nb/translations.xml @@ -198,6 +198,10 @@ "Lenke kopiert til utklippstavlen" "Laster inn…" "Laster inn mer…" + + "%d andre" + "%d andre" + "%1$d medlem" "%1$d medlemmer" @@ -351,6 +355,11 @@ Er du sikker på at du vil fortsette?" "Fjern fra rommet" "Fjerne medlem og utestenge fra å bli med i fremtiden?" "Fjerner %1$s…" + "Fjern utestengelsen fra rommet" + "Opphev utestengelsen" + "De vil kunne bli med i rommet igjen hvis de blir invitert" + "Er du sikker på at du vil oppheve utestengelsen av dette medlemmet?" + "Oppheve utestengelsen av %1$s" "Kunne ikke velge medium, prøv igjen." "Teksting er kanskje ikke synlig for personer som bruker eldre apper." "Kunne ikke behandle medier for opplasting, vennligst prøv igjen." diff --git a/libraries/ui-strings/src/main/res/values-nl/translations.xml b/libraries/ui-strings/src/main/res/values-nl/translations.xml index 0ad734232f..e2e0bed50b 100644 --- a/libraries/ui-strings/src/main/res/values-nl/translations.xml +++ b/libraries/ui-strings/src/main/res/values-nl/translations.xml @@ -174,6 +174,10 @@ Reden: %1$s." "Licht" "Link gekopieerd naar klembord" "Laden…" + + "%d andere" + "%d anderen" + "%1$d lid" "%1$d leden" diff --git a/libraries/ui-strings/src/main/res/values-pl/translations.xml b/libraries/ui-strings/src/main/res/values-pl/translations.xml index e3e742072a..bdadf95799 100644 --- a/libraries/ui-strings/src/main/res/values-pl/translations.xml +++ b/libraries/ui-strings/src/main/res/values-pl/translations.xml @@ -200,6 +200,11 @@ Powód: %1$s." "Link został skopiowany do schowka" "Ładowanie…" "Ładuję więcej…" + + "%d inny" + "%d innych" + "%d innych" + "%1$d członek" "%1$d członki" diff --git a/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml b/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml index b654dd355b..9e118de08d 100644 --- a/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml +++ b/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml @@ -178,6 +178,10 @@ "Claro" "Link copiado para área de transferência" "Carregando…" + + "%d outro" + "%d outros" + "%1$d membro" "%1$d membros" diff --git a/libraries/ui-strings/src/main/res/values-pt/translations.xml b/libraries/ui-strings/src/main/res/values-pt/translations.xml index 24fa3d7e35..0f0a498551 100644 --- a/libraries/ui-strings/src/main/res/values-pt/translations.xml +++ b/libraries/ui-strings/src/main/res/values-pt/translations.xml @@ -189,6 +189,10 @@ Razão: %1$s." "Ligação copiada para a área de transferência" "A carregar…" "A carregar mais…" + + "%d outro" + "%d outros" + "%1$d membro" "%1$d membros" diff --git a/libraries/ui-strings/src/main/res/values-ro/translations.xml b/libraries/ui-strings/src/main/res/values-ro/translations.xml index 13a63c3ba9..eb363c2598 100644 --- a/libraries/ui-strings/src/main/res/values-ro/translations.xml +++ b/libraries/ui-strings/src/main/res/values-ro/translations.xml @@ -171,6 +171,11 @@ Motiv:%1$s." "Deschis" "Linkul a fost copiat în clipboard" "Se încarcă…" + + "%d altul" + "%d alții" + "%d alții" + "%1$d membru" "%1$d membri" diff --git a/libraries/ui-strings/src/main/res/values-ru/translations.xml b/libraries/ui-strings/src/main/res/values-ru/translations.xml index 1b67806b09..d2af544e53 100644 --- a/libraries/ui-strings/src/main/res/values-ru/translations.xml +++ b/libraries/ui-strings/src/main/res/values-ru/translations.xml @@ -200,6 +200,11 @@ "Ссылка скопирована в буфер обмена" "Загрузка…" "Загрузить больше…" + + "%d" + "%d другие" + "%d другие" + "%1$d участник" "%1$d участников" diff --git a/libraries/ui-strings/src/main/res/values-sk/translations.xml b/libraries/ui-strings/src/main/res/values-sk/translations.xml index 7c4302db9a..3f00756e10 100644 --- a/libraries/ui-strings/src/main/res/values-sk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sk/translations.xml @@ -200,6 +200,11 @@ Dôvod: %1$s." "Odkaz bol skopírovaný do schránky" "Načítava sa…" "Načítava sa viac…" + + "%d ďalší" + "%d ďalší" + "%d ďalších" + "%1$d člen" "%1$d členovia" @@ -355,6 +360,11 @@ Naozaj chcete pokračovať?" "Odstrániť z miestnosti" "Odstrániť člena a zakázať vstup v budúcnosti?" "Odstraňuje sa %1$s…" + "Zrušiť zákaz prístupu do miestnosti" + "Zrušiť zákaz" + "V prípade pozvania by sa mohli opäť pripojiť k miestnosti" + "Naozaj chcete zrušiť zablokovanie tohto člena?" + "Zrušenie zákazu pre %1$s" "Nepodarilo sa vybrať médium, skúste to prosím znova." "Titulky nemusia byť viditeľné pre ľudí používajúcich staršie aplikácie." "Nepodarilo sa spracovať médiá na odoslanie, skúste to prosím znova." diff --git a/libraries/ui-strings/src/main/res/values-sv/translations.xml b/libraries/ui-strings/src/main/res/values-sv/translations.xml index 0fda3671c3..c1293e73d2 100644 --- a/libraries/ui-strings/src/main/res/values-sv/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml @@ -198,6 +198,10 @@ Anledning:%1$s." "Länk kopierad till klippbordet" "Laddar …" "Laddar mer …" + + "%d annan" + "%d andra" + "%1$d medlem" "%1$d medlemmar" diff --git a/libraries/ui-strings/src/main/res/values-tr/translations.xml b/libraries/ui-strings/src/main/res/values-tr/translations.xml index 16766f12af..d73e1d1dec 100644 --- a/libraries/ui-strings/src/main/res/values-tr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-tr/translations.xml @@ -185,6 +185,10 @@ Neden: %1$s." "Bağlantı panoya kopyalandı" "Yükleniyor…" "Daha fazla yükleniyor…" + + "%d diğer" + "%d diğer" + "%1$d üye" "%1$d üye" diff --git a/libraries/ui-strings/src/main/res/values-uk/translations.xml b/libraries/ui-strings/src/main/res/values-uk/translations.xml index f8a233d183..c563417e93 100644 --- a/libraries/ui-strings/src/main/res/values-uk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-uk/translations.xml @@ -200,6 +200,11 @@ "Посилання скопійовано в буфер обміну" "Завантаження" "Завантаження наступних…" + + "%d інший" + "%d інші" + "%d інші" + "%1$d учасник" "%1$d учасники" diff --git a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml index ec0c7be7b6..7d1e291fa4 100644 --- a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml +++ b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml @@ -195,6 +195,9 @@ "連結已複製到剪貼簿" "載入中…" "載入更多……" + + "其他 %d 個人" + "%1$d 位成員" diff --git a/libraries/ui-strings/src/main/res/values-zh/translations.xml b/libraries/ui-strings/src/main/res/values-zh/translations.xml index cd7cd61f9b..7884888483 100644 --- a/libraries/ui-strings/src/main/res/values-zh/translations.xml +++ b/libraries/ui-strings/src/main/res/values-zh/translations.xml @@ -192,6 +192,9 @@ "链接已复制到剪贴板" "正在加载…" "正在加载更多……" + + "其他 %d 人" + "%1$d个成员" diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 2cd87e5f2b..90100bbcd7 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -198,6 +198,10 @@ Reason: %1$s." "Link copied to clipboard" "Loading…" "Loading more…" + + "%d other" + "%d others" + "%1$d member" "%1$d members" @@ -355,7 +359,7 @@ Are you sure you want to continue?" "Unban" "They would be able to join the room again if invited" "Are you sure you want to unban this member?" - "Unbanning $1%s" + "Unbanning %1$s" "Failed selecting media, please try again." "Captions might not be visible to people using older apps." "Failed processing media to upload, please try again." diff --git a/screenshots/de/appnav.loggedin_LoggedInView_Day_3_de.png b/screenshots/de/appnav.loggedin_LoggedInView_Day_3_de.png index ef041321f5..d8c4713dda 100644 --- a/screenshots/de/appnav.loggedin_LoggedInView_Day_3_de.png +++ b/screenshots/de/appnav.loggedin_LoggedInView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5dde09b6fd33ed97ef3fec22736afdcbadd5c0060ef8bdbfaf09824f3d45c247 -size 27502 +oid sha256:357e03b3d791ba37acc706b1857c774194d3f5a56f94921135bbb5744229cedb +size 27594 diff --git a/screenshots/de/features.login.impl.changeserver_ChangeServerView_Day_3_de.png b/screenshots/de/features.login.impl.changeserver_ChangeServerView_Day_3_de.png index a05f7c956e..c32c889c0e 100644 --- a/screenshots/de/features.login.impl.changeserver_ChangeServerView_Day_3_de.png +++ b/screenshots/de/features.login.impl.changeserver_ChangeServerView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac3a523da98d3cf64cd908b83824d75e060b14cb581b4015a75e943524547048 -size 16399 +oid sha256:fa0dacbff9fa4f066c429840bd3752228fc4ee2de2c34c3b2048b1822390a534 +size 16908 diff --git a/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_de.png b/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_de.png index bae462da8a..a4c239ac54 100644 --- a/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_de.png +++ b/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6615c4d37c335e76d8243d4d08018bc557a84792a0996fc4bbd8399896582344 -size 21348 +oid sha256:0c0bbda9f47701130a97bae5afb38049d27334500bb1aae888d65fdc8e7607d5 +size 21347 diff --git a/screenshots/de/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_de.png b/screenshots/de/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_de.png new file mode 100644 index 0000000000..b7e7c46205 --- /dev/null +++ b/screenshots/de/features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04613db591c22de64d6b1078f5a7df7dcb8758bc212272b4f886e1f345eda0ed +size 32416 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index be0777dd0b..f185b33b3d 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1,69 +1,69 @@ // Generated file, do not edit export const screenshots = [ ["en","en-dark","de",], -["features.preferences.impl.about_AboutView_Day_0_en","features.preferences.impl.about_AboutView_Night_0_en",20217,], +["features.preferences.impl.about_AboutView_Day_0_en","features.preferences.impl.about_AboutView_Night_0_en",20224,], ["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_0_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_0_en",0,], -["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_1_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_1_en",20217,], -["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_2_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_2_en",20217,], -["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en",20217,], -["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en",20217,], -["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20217,], -["features.logout.impl_AccountDeactivationView_Day_1_en","features.logout.impl_AccountDeactivationView_Night_1_en",20217,], -["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20217,], -["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20217,], -["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20217,], +["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_1_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_1_en",20224,], +["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_2_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_2_en",20224,], +["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en",20224,], +["features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en","features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en",20224,], +["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20224,], +["features.logout.impl_AccountDeactivationView_Day_1_en","features.logout.impl_AccountDeactivationView_Night_1_en",20224,], +["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20224,], +["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20224,], +["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20224,], ["features.login.impl.accountprovider_AccountProviderView_Day_0_en","features.login.impl.accountprovider_AccountProviderView_Night_0_en",0,], ["features.login.impl.accountprovider_AccountProviderView_Day_1_en","features.login.impl.accountprovider_AccountProviderView_Night_1_en",0,], ["features.login.impl.accountprovider_AccountProviderView_Day_2_en","features.login.impl.accountprovider_AccountProviderView_Night_2_en",0,], ["features.login.impl.accountprovider_AccountProviderView_Day_3_en","features.login.impl.accountprovider_AccountProviderView_Night_3_en",0,], ["features.messages.impl.actionlist_ActionListViewContent_Day_0_en","features.messages.impl.actionlist_ActionListViewContent_Night_0_en",0,], -["features.messages.impl.actionlist_ActionListViewContent_Day_10_en","features.messages.impl.actionlist_ActionListViewContent_Night_10_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20217,], +["features.messages.impl.actionlist_ActionListViewContent_Day_10_en","features.messages.impl.actionlist_ActionListViewContent_Night_10_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20224,], ["features.messages.impl.actionlist_ActionListViewContent_Day_1_en","features.messages.impl.actionlist_ActionListViewContent_Night_1_en",0,], -["features.messages.impl.actionlist_ActionListViewContent_Day_2_en","features.messages.impl.actionlist_ActionListViewContent_Night_2_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20217,], -["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20217,], -["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20217,], -["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20217,], -["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20217,], -["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_0_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_1_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_2_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_3_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_4_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewDark_5_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_0_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_1_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_2_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_3_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_4_en","",20217,], -["features.preferences.impl.advanced_AdvancedSettingsViewLight_5_en","",20217,], -["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20217,], -["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20217,], -["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20217,], -["features.analytics.impl_AnalyticsOptInView_Day_1_en","features.analytics.impl_AnalyticsOptInView_Night_1_en",20217,], -["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20217,], -["features.analytics.api.preferences_AnalyticsPreferencesView_Day_1_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_1_en",20217,], -["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20217,], +["features.messages.impl.actionlist_ActionListViewContent_Day_2_en","features.messages.impl.actionlist_ActionListViewContent_Night_2_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20224,], +["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20224,], +["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20224,], +["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20224,], +["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20224,], +["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_0_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_1_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_2_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_3_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_4_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewDark_5_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_0_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_1_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_2_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_3_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_4_en","",20224,], +["features.preferences.impl.advanced_AdvancedSettingsViewLight_5_en","",20224,], +["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20224,], +["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20224,], +["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20224,], +["features.analytics.impl_AnalyticsOptInView_Day_1_en","features.analytics.impl_AnalyticsOptInView_Night_1_en",20224,], +["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20224,], +["features.analytics.api.preferences_AnalyticsPreferencesView_Day_1_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_1_en",20224,], +["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20224,], ["libraries.designsystem.components_Announcement_Day_0_en","libraries.designsystem.components_Announcement_Night_0_en",0,], -["services.apperror.impl_AppErrorView_Day_0_en","services.apperror.impl_AppErrorView_Night_0_en",20217,], +["services.apperror.impl_AppErrorView_Day_0_en","services.apperror.impl_AppErrorView_Night_0_en",20224,], ["libraries.designsystem.components.async_AsyncActionView_Day_0_en","libraries.designsystem.components.async_AsyncActionView_Night_0_en",0,], -["libraries.designsystem.components.async_AsyncActionView_Day_1_en","libraries.designsystem.components.async_AsyncActionView_Night_1_en",20217,], +["libraries.designsystem.components.async_AsyncActionView_Day_1_en","libraries.designsystem.components.async_AsyncActionView_Night_1_en",20224,], ["libraries.designsystem.components.async_AsyncActionView_Day_2_en","libraries.designsystem.components.async_AsyncActionView_Night_2_en",0,], -["libraries.designsystem.components.async_AsyncActionView_Day_3_en","libraries.designsystem.components.async_AsyncActionView_Night_3_en",20217,], +["libraries.designsystem.components.async_AsyncActionView_Day_3_en","libraries.designsystem.components.async_AsyncActionView_Night_3_en",20224,], ["libraries.designsystem.components.async_AsyncActionView_Day_4_en","libraries.designsystem.components.async_AsyncActionView_Night_4_en",0,], -["libraries.designsystem.components.async_AsyncFailure_Day_0_en","libraries.designsystem.components.async_AsyncFailure_Night_0_en",20217,], +["libraries.designsystem.components.async_AsyncFailure_Day_0_en","libraries.designsystem.components.async_AsyncFailure_Night_0_en",20224,], ["libraries.designsystem.components.async_AsyncIndicatorFailure_Day_0_en","libraries.designsystem.components.async_AsyncIndicatorFailure_Night_0_en",0,], ["libraries.designsystem.components.async_AsyncIndicatorLoading_Day_0_en","libraries.designsystem.components.async_AsyncIndicatorLoading_Night_0_en",0,], ["libraries.designsystem.components.async_AsyncLoading_Day_0_en","libraries.designsystem.components.async_AsyncLoading_Night_0_en",0,], -["features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Day_0_en","features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Night_0_en",20217,], +["features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Day_0_en","features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Night_0_en",20224,], ["libraries.matrix.ui.components_AttachmentThumbnail_Day_0_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_0_en",0,], ["libraries.matrix.ui.components_AttachmentThumbnail_Day_1_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_1_en",0,], ["libraries.matrix.ui.components_AttachmentThumbnail_Day_2_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_2_en",0,], @@ -73,18 +73,18 @@ export const screenshots = [ ["libraries.matrix.ui.components_AttachmentThumbnail_Day_6_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_6_en",0,], ["libraries.matrix.ui.components_AttachmentThumbnail_Day_7_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_7_en",0,], ["libraries.matrix.ui.components_AttachmentThumbnail_Day_8_en","libraries.matrix.ui.components_AttachmentThumbnail_Night_8_en",0,], -["features.messages.impl.attachments.preview_AttachmentsView_0_en","",20217,], -["features.messages.impl.attachments.preview_AttachmentsView_1_en","",20217,], -["features.messages.impl.attachments.preview_AttachmentsView_2_en","",20217,], -["features.messages.impl.attachments.preview_AttachmentsView_3_en","",20217,], -["features.messages.impl.attachments.preview_AttachmentsView_4_en","",20217,], -["features.messages.impl.attachments.preview_AttachmentsView_5_en","",20217,], +["features.messages.impl.attachments.preview_AttachmentsView_0_en","",20224,], +["features.messages.impl.attachments.preview_AttachmentsView_1_en","",20224,], +["features.messages.impl.attachments.preview_AttachmentsView_2_en","",20224,], +["features.messages.impl.attachments.preview_AttachmentsView_3_en","",20224,], +["features.messages.impl.attachments.preview_AttachmentsView_4_en","",20224,], +["features.messages.impl.attachments.preview_AttachmentsView_5_en","",20224,], ["features.messages.impl.attachments.preview_AttachmentsView_6_en","",0,], -["features.messages.impl.attachments.preview_AttachmentsView_7_en","",20217,], +["features.messages.impl.attachments.preview_AttachmentsView_7_en","",20224,], ["libraries.mediaviewer.impl.gallery.ui_AudioItemView_Day_0_en","libraries.mediaviewer.impl.gallery.ui_AudioItemView_Night_0_en",0,], ["libraries.mediaviewer.impl.gallery.ui_AudioItemView_Day_1_en","libraries.mediaviewer.impl.gallery.ui_AudioItemView_Night_1_en",0,], ["libraries.mediaviewer.impl.gallery.ui_AudioItemView_Day_2_en","libraries.mediaviewer.impl.gallery.ui_AudioItemView_Night_2_en",0,], -["libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_en","libraries.matrix.ui.components_AvatarActionBottomSheet_Night_0_en",20217,], +["libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_en","libraries.matrix.ui.components_AvatarActionBottomSheet_Night_0_en",20224,], ["features.knockrequests.impl.banner_AvatarRowRtl_Day_0_en","features.knockrequests.impl.banner_AvatarRowRtl_Night_0_en",0,], ["features.knockrequests.impl.banner_AvatarRowRtl_Day_1_en","features.knockrequests.impl.banner_AvatarRowRtl_Night_1_en",0,], ["features.knockrequests.impl.banner_AvatarRowRtl_Day_2_en","features.knockrequests.impl.banner_AvatarRowRtl_Night_2_en",0,], @@ -192,13 +192,13 @@ export const screenshots = [ ["libraries.designsystem.components_Badge_Day_0_en","libraries.designsystem.components_Badge_Night_0_en",0,], ["libraries.designsystem.components_BigCheckmark_Day_0_en","libraries.designsystem.components_BigCheckmark_Night_0_en",0,], ["libraries.designsystem.components_BigIcon_Day_0_en","libraries.designsystem.components_BigIcon_Night_0_en",0,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_0_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_0_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20217,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20217,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_0_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_0_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20224,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20224,], ["libraries.designsystem.components_BloomInitials_Day_0_en","libraries.designsystem.components_BloomInitials_Night_0_en",0,], ["libraries.designsystem.components_BloomInitials_Day_1_en","libraries.designsystem.components_BloomInitials_Night_1_en",0,], ["libraries.designsystem.components_BloomInitials_Day_2_en","libraries.designsystem.components_BloomInitials_Night_2_en",0,], @@ -209,136 +209,136 @@ export const screenshots = [ ["libraries.designsystem.components_BloomInitials_Day_7_en","libraries.designsystem.components_BloomInitials_Night_7_en",0,], ["libraries.designsystem.components_Bloom_Day_0_en","libraries.designsystem.components_Bloom_Night_0_en",0,], ["libraries.designsystem.theme.components_BottomSheetDragHandle_Day_0_en","libraries.designsystem.theme.components_BottomSheetDragHandle_Night_0_en",0,], -["features.rageshake.impl.bugreport_BugReportView_Day_0_en","features.rageshake.impl.bugreport_BugReportView_Night_0_en",20217,], -["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20217,], -["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20217,], -["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20217,], -["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20217,], +["features.rageshake.impl.bugreport_BugReportView_Day_0_en","features.rageshake.impl.bugreport_BugReportView_Night_0_en",20224,], +["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20224,], +["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20224,], +["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20224,], +["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20224,], ["libraries.designsystem.atomic.molecules_ButtonColumnMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ButtonColumnMolecule_Night_0_en",0,], ["libraries.designsystem.atomic.molecules_ButtonRowMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ButtonRowMolecule_Night_0_en",0,], ["features.messages.impl.timeline.components_CallMenuItem_Day_0_en","features.messages.impl.timeline.components_CallMenuItem_Night_0_en",0,], ["features.messages.impl.timeline.components_CallMenuItem_Day_1_en","features.messages.impl.timeline.components_CallMenuItem_Night_1_en",0,], -["features.messages.impl.timeline.components_CallMenuItem_Day_2_en","features.messages.impl.timeline.components_CallMenuItem_Night_2_en",20217,], -["features.messages.impl.timeline.components_CallMenuItem_Day_3_en","features.messages.impl.timeline.components_CallMenuItem_Night_3_en",20217,], +["features.messages.impl.timeline.components_CallMenuItem_Day_2_en","features.messages.impl.timeline.components_CallMenuItem_Night_2_en",20224,], +["features.messages.impl.timeline.components_CallMenuItem_Day_3_en","features.messages.impl.timeline.components_CallMenuItem_Night_3_en",20224,], ["features.messages.impl.timeline.components_CallMenuItem_Day_4_en","features.messages.impl.timeline.components_CallMenuItem_Night_4_en",0,], ["features.call.impl.ui_CallScreenPipView_Day_0_en","features.call.impl.ui_CallScreenPipView_Night_0_en",0,], ["features.call.impl.ui_CallScreenPipView_Day_1_en","features.call.impl.ui_CallScreenPipView_Night_1_en",0,], ["features.call.impl.ui_CallScreenView_Day_0_en","features.call.impl.ui_CallScreenView_Night_0_en",0,], -["features.call.impl.ui_CallScreenView_Day_1_en","features.call.impl.ui_CallScreenView_Night_1_en",20217,], -["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20217,], -["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20217,], -["libraries.textcomposer_CaptionWarningBottomSheet_Day_0_en","libraries.textcomposer_CaptionWarningBottomSheet_Night_0_en",20217,], -["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20217,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20217,], +["features.call.impl.ui_CallScreenView_Day_1_en","features.call.impl.ui_CallScreenView_Night_1_en",20224,], +["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20224,], +["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20224,], +["libraries.textcomposer_CaptionWarningBottomSheet_Day_0_en","libraries.textcomposer_CaptionWarningBottomSheet_Night_0_en",20224,], +["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20224,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20224,], ["features.login.impl.changeserver_ChangeServerView_Day_0_en","features.login.impl.changeserver_ChangeServerView_Night_0_en",0,], -["features.login.impl.changeserver_ChangeServerView_Day_1_en","features.login.impl.changeserver_ChangeServerView_Night_1_en",20217,], -["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20217,], -["features.login.impl.changeserver_ChangeServerView_Day_3_en","features.login.impl.changeserver_ChangeServerView_Night_3_en",20220,], +["features.login.impl.changeserver_ChangeServerView_Day_1_en","features.login.impl.changeserver_ChangeServerView_Night_1_en",20224,], +["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20224,], +["features.login.impl.changeserver_ChangeServerView_Day_3_en","features.login.impl.changeserver_ChangeServerView_Night_3_en",20224,], ["libraries.matrix.ui.components_CheckableResolvedUserRow_en","",0,], -["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20217,], +["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20224,], ["libraries.designsystem.theme.components_Checkboxes_Toggles_en","",0,], -["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_0_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_0_en",20217,], -["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_1_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_1_en",20217,], -["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_2_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_2_en",20217,], -["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_3_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_3_en",20217,], +["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_0_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_0_en",20224,], +["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_1_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_1_en",20224,], +["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_2_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_2_en",20224,], +["features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Day_3_en","features.ftue.impl.sessionverification.choosemode_ChooseSelfVerificationModeView_Night_3_en",20224,], ["libraries.designsystem.theme.components_CircularProgressIndicator_Progress_Indicators_en","",0,], ["libraries.designsystem.components_ClickableLinkText_Text_en","",0,], ["libraries.designsystem.theme_ColorAliases_Day_0_en","libraries.designsystem.theme_ColorAliases_Night_0_en",0,], -["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_0_en",20217,], -["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20217,], -["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20217,], +["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_0_en",20224,], +["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20224,], +["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20224,], ["libraries.textcomposer_ComposerModeView_Day_1_en","libraries.textcomposer_ComposerModeView_Night_1_en",0,], ["libraries.textcomposer_ComposerModeView_Day_2_en","libraries.textcomposer_ComposerModeView_Night_2_en",0,], ["libraries.textcomposer_ComposerModeView_Day_3_en","libraries.textcomposer_ComposerModeView_Night_3_en",0,], ["libraries.designsystem.components.avatar_CompositeAvatar_Avatars_en","",0,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en","",20217,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en","",20217,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20217,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20217,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20217,], -["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20217,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en","",20224,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en","",20224,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20224,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20224,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20224,], +["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20224,], ["libraries.designsystem.components.dialogs_ConfirmationDialogContent_Dialogs_en","",0,], ["libraries.designsystem.components.dialogs_ConfirmationDialog_Day_0_en","libraries.designsystem.components.dialogs_ConfirmationDialog_Night_0_en",0,], ["features.networkmonitor.api.ui_ConnectivityIndicatorView_Day_0_en","features.networkmonitor.api.ui_ConnectivityIndicatorView_Night_0_en",0,], ["libraries.designsystem.atomic.atoms_CounterAtom_Day_0_en","libraries.designsystem.atomic.atoms_CounterAtom_Night_0_en",0,], -["features.rageshake.api.crash_CrashDetectionView_Day_0_en","features.rageshake.api.crash_CrashDetectionView_Night_0_en",20217,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20217,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20217,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20217,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20217,], -["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_0_en",20217,], -["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_1_en",20217,], -["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20217,], -["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20217,], -["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20217,], -["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20217,], -["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20217,], -["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20217,], -["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20217,], -["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_4_en","features.createroom.impl.root_CreateRoomRootView_Night_4_en",20217,], -["features.createroom.impl.root_CreateRoomRootView_Day_5_en","features.createroom.impl.root_CreateRoomRootView_Night_5_en",20217,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_0_en","",20217,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_1_en","",20217,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_2_en","",20217,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_3_en","",20217,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_4_en","",20217,], +["features.rageshake.api.crash_CrashDetectionView_Day_0_en","features.rageshake.api.crash_CrashDetectionView_Night_0_en",20224,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20224,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20224,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20224,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20224,], +["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_0_en",20224,], +["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_1_en",20224,], +["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20224,], +["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20224,], +["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20224,], +["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20224,], +["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20224,], +["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20224,], +["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20224,], +["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_4_en","features.createroom.impl.root_CreateRoomRootView_Night_4_en",20224,], +["features.createroom.impl.root_CreateRoomRootView_Day_5_en","features.createroom.impl.root_CreateRoomRootView_Night_5_en",20224,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_0_en","",20224,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_1_en","",20224,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_2_en","",20224,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_3_en","",20224,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_4_en","",20224,], ["libraries.mediaviewer.impl.gallery.ui_DateItemView_Day_0_en","libraries.mediaviewer.impl.gallery.ui_DateItemView_Night_0_en",0,], ["libraries.mediaviewer.impl.gallery.ui_DateItemView_Day_1_en","libraries.mediaviewer.impl.gallery.ui_DateItemView_Night_1_en",0,], -["libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_en","",20217,], -["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_en","",20217,], -["features.invite.impl.declineandblock_DeclineAndBlockView_Day_0_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_0_en",20217,], -["features.invite.impl.declineandblock_DeclineAndBlockView_Day_1_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_1_en",20217,], -["features.invite.impl.declineandblock_DeclineAndBlockView_Day_2_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_2_en",20217,], -["features.invite.impl.declineandblock_DeclineAndBlockView_Day_3_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_3_en",20217,], -["features.invite.impl.declineandblock_DeclineAndBlockView_Day_4_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_4_en",20217,], +["libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_en","",20224,], +["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_en","",20224,], +["features.invite.impl.declineandblock_DeclineAndBlockView_Day_0_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_0_en",20224,], +["features.invite.impl.declineandblock_DeclineAndBlockView_Day_1_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_1_en",20224,], +["features.invite.impl.declineandblock_DeclineAndBlockView_Day_2_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_2_en",20224,], +["features.invite.impl.declineandblock_DeclineAndBlockView_Day_3_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_3_en",20224,], +["features.invite.impl.declineandblock_DeclineAndBlockView_Day_4_en","features.invite.impl.declineandblock_DeclineAndBlockView_Night_4_en",20224,], ["features.logout.impl.direct_DefaultDirectLogoutView_Day_0_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_0_en",0,], -["features.logout.impl.direct_DefaultDirectLogoutView_Day_1_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_1_en",20217,], -["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20217,], -["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20217,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_1_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_1_en",20224,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20224,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20224,], ["features.logout.impl.direct_DefaultDirectLogoutView_Day_4_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_4_en",0,], -["features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Day_0_en","features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Night_0_en",20217,], -["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20217,], -["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20217,], +["features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Day_0_en","features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Night_0_en",20224,], +["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20224,], +["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20224,], ["features.licenses.impl.details_DependenciesDetailsView_Day_0_en","features.licenses.impl.details_DependenciesDetailsView_Night_0_en",0,], -["features.licenses.impl.list_DependencyLicensesListView_Day_0_en","features.licenses.impl.list_DependencyLicensesListView_Night_0_en",20217,], -["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20217,], -["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20217,], -["features.licenses.impl.list_DependencyLicensesListView_Day_3_en","features.licenses.impl.list_DependencyLicensesListView_Night_3_en",20217,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20217,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20217,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20217,], +["features.licenses.impl.list_DependencyLicensesListView_Day_0_en","features.licenses.impl.list_DependencyLicensesListView_Night_0_en",20224,], +["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20224,], +["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20224,], +["features.licenses.impl.list_DependencyLicensesListView_Day_3_en","features.licenses.impl.list_DependencyLicensesListView_Night_3_en",20224,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20224,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20224,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20224,], ["libraries.designsystem.theme.components_DialogWithDestructiveButton_Dialog_with_destructive_button_Dialogs_en","",0,], ["libraries.designsystem.theme.components_DialogWithOnlyMessageAndOkButton_Dialog_with_only_message_and_ok_button_Dialogs_en","",0,], ["libraries.designsystem.theme.components_DialogWithThirdButton_Dialog_with_third_button_Dialogs_en","",0,], @@ -351,17 +351,17 @@ export const screenshots = [ ["libraries.designsystem.text_DpScale_1_0f__en","",0,], ["libraries.designsystem.text_DpScale_1_5f__en","",0,], ["libraries.designsystem.theme.components_DropdownMenuItem_Menus_en","",0,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_0_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_0_en",20217,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20217,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20217,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20217,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20217,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_0_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_0_en",20217,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_1_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_1_en",20217,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_2_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_2_en",20217,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_3_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_3_en",20217,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_4_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_4_en",20217,], -["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20217,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_0_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_0_en",20224,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20224,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20224,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20224,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20224,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_0_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_0_en",20224,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_1_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_1_en",20224,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_2_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_2_en",20224,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_3_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_3_en",20224,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_4_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_4_en",20224,], +["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20224,], ["libraries.matrix.ui.components_EditableAvatarView_Day_0_en","libraries.matrix.ui.components_EditableAvatarView_Night_0_en",0,], ["libraries.matrix.ui.components_EditableAvatarView_Day_1_en","libraries.matrix.ui.components_EditableAvatarView_Night_1_en",0,], ["libraries.matrix.ui.components_EditableAvatarView_Day_2_en","libraries.matrix.ui.components_EditableAvatarView_Night_2_en",0,], @@ -371,9 +371,9 @@ export const screenshots = [ ["libraries.designsystem.atomic.atoms_ElementLogoAtomMedium_Day_0_en","libraries.designsystem.atomic.atoms_ElementLogoAtomMedium_Night_0_en",0,], ["features.messages.impl.timeline.components.customreaction_EmojiItem_Day_0_en","features.messages.impl.timeline.components.customreaction_EmojiItem_Night_0_en",0,], ["features.messages.impl.timeline.components.customreaction_EmojiPicker_Day_0_en","features.messages.impl.timeline.components.customreaction_EmojiPicker_Night_0_en",0,], -["libraries.designsystem.components.dialogs_ErrorDialogContent_Dialogs_en","",20217,], -["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20217,], -["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20217,], +["libraries.designsystem.components.dialogs_ErrorDialogContent_Dialogs_en","",20224,], +["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20224,], +["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20224,], ["features.messages.impl.timeline.debug_EventDebugInfoView_Day_0_en","features.messages.impl.timeline.debug_EventDebugInfoView_Night_0_en",0,], ["libraries.featureflag.ui_FeatureListView_Day_0_en","libraries.featureflag.ui_FeatureListView_Night_0_en",0,], ["libraries.mediaviewer.impl.gallery.ui_FileItemView_Day_0_en","libraries.mediaviewer.impl.gallery.ui_FileItemView_Night_0_en",0,], @@ -391,16 +391,16 @@ export const screenshots = [ ["libraries.designsystem.theme.components_FloatingActionButton_Floating_Action_Buttons_en","",0,], ["libraries.designsystem.atomic.pages_FlowStepPage_Day_0_en","libraries.designsystem.atomic.pages_FlowStepPage_Night_0_en",0,], ["features.messages.impl.timeline.focus_FocusRequestStateView_Day_0_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_0_en",0,], -["features.messages.impl.timeline.focus_FocusRequestStateView_Day_1_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_1_en",20217,], -["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20217,], -["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20217,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_1_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_1_en",20224,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20224,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20224,], ["features.messages.impl.timeline.components_FocusedEvent_Day_0_en","features.messages.impl.timeline.components_FocusedEvent_Night_0_en",0,], ["libraries.textcomposer.components_FormattingOption_Day_0_en","libraries.textcomposer.components_FormattingOption_Night_0_en",0,], ["features.messages.impl.forward_ForwardMessagesView_Day_0_en","features.messages.impl.forward_ForwardMessagesView_Night_0_en",0,], ["features.messages.impl.forward_ForwardMessagesView_Day_1_en","features.messages.impl.forward_ForwardMessagesView_Night_1_en",0,], ["features.messages.impl.forward_ForwardMessagesView_Day_2_en","features.messages.impl.forward_ForwardMessagesView_Night_2_en",0,], -["features.messages.impl.forward_ForwardMessagesView_Day_3_en","features.messages.impl.forward_ForwardMessagesView_Night_3_en",20217,], -["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20217,], +["features.messages.impl.forward_ForwardMessagesView_Day_3_en","features.messages.impl.forward_ForwardMessagesView_Night_3_en",20224,], +["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20224,], ["libraries.designsystem.components.button_GradientFloatingActionButtonCircleShape_Day_0_en","libraries.designsystem.components.button_GradientFloatingActionButtonCircleShape_Night_0_en",0,], ["libraries.designsystem.components.button_GradientFloatingActionButton_Day_0_en","libraries.designsystem.components.button_GradientFloatingActionButton_Night_0_en",0,], ["features.messages.impl.timeline.components.group_GroupHeaderView_Day_0_en","features.messages.impl.timeline.components.group_GroupHeaderView_Night_0_en",0,], @@ -414,8 +414,8 @@ export const screenshots = [ ["libraries.designsystem.atomic.molecules_IconTitlePlaceholdersRowMolecule_Day_0_en","libraries.designsystem.atomic.molecules_IconTitlePlaceholdersRowMolecule_Night_0_en",0,], ["libraries.designsystem.atomic.molecules_IconTitleSubtitleMolecule_Day_0_en","libraries.designsystem.atomic.molecules_IconTitleSubtitleMolecule_Night_0_en",0,], ["libraries.designsystem.theme.components_IconToggleButton_Toggles_en","",0,], -["appicon.element_Icon_en","",0,], ["appicon.enterprise_Icon_en","",0,], +["appicon.element_Icon_en","",0,], ["libraries.designsystem.icons_IconsCompound_Day_0_en","libraries.designsystem.icons_IconsCompound_Night_0_en",0,], ["libraries.designsystem.icons_IconsCompound_Day_1_en","libraries.designsystem.icons_IconsCompound_Night_1_en",0,], ["libraries.designsystem.icons_IconsCompound_Day_2_en","libraries.designsystem.icons_IconsCompound_Night_2_en",0,], @@ -424,8 +424,8 @@ export const screenshots = [ ["libraries.designsystem.icons_IconsCompound_Day_5_en","libraries.designsystem.icons_IconsCompound_Night_5_en",0,], ["libraries.designsystem.icons_IconsOther_Day_0_en","libraries.designsystem.icons_IconsOther_Night_0_en",0,], ["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_0_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_0_en",0,], -["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en",20217,], -["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20217,], +["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en",20224,], +["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20224,], ["libraries.mediaviewer.impl.gallery.ui_ImageItemView_Day_0_en","libraries.mediaviewer.impl.gallery.ui_ImageItemView_Night_0_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_0_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_0_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_10_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_10_en",0,], @@ -433,84 +433,84 @@ export const screenshots = [ ["libraries.matrix.ui.messages.reply_InReplyToView_Day_1_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_1_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_2_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_2_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_3_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_3_en",0,], -["libraries.matrix.ui.messages.reply_InReplyToView_Day_4_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_4_en",20217,], +["libraries.matrix.ui.messages.reply_InReplyToView_Day_4_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_4_en",20224,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_5_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_5_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_6_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_6_en",0,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_7_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_7_en",0,], -["libraries.matrix.ui.messages.reply_InReplyToView_Day_8_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_8_en",20217,], +["libraries.matrix.ui.messages.reply_InReplyToView_Day_8_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_8_en",20224,], ["libraries.matrix.ui.messages.reply_InReplyToView_Day_9_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_9_en",0,], -["features.call.impl.ui_IncomingCallScreen_Day_0_en","features.call.impl.ui_IncomingCallScreen_Night_0_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_0_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_0_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_10_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_10_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_11_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_11_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_12_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_12_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_13_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_13_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_8_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_8_en",20217,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_9_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_9_en",20217,], +["features.call.impl.ui_IncomingCallScreen_Day_0_en","features.call.impl.ui_IncomingCallScreen_Night_0_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_0_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_0_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_10_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_10_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_11_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_11_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_12_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_12_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_13_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_13_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_8_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_8_en",20224,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_9_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_9_en",20224,], ["features.networkmonitor.api.ui_Indicator_Day_0_en","features.networkmonitor.api.ui_Indicator_Night_0_en",0,], ["libraries.designsystem.atomic.molecules_InfoListItemMolecule_Day_0_en","libraries.designsystem.atomic.molecules_InfoListItemMolecule_Night_0_en",0,], ["libraries.designsystem.atomic.organisms_InfoListOrganism_Day_0_en","libraries.designsystem.atomic.organisms_InfoListOrganism_Night_0_en",0,], -["libraries.matrix.ui.components_InviteSenderView_Day_0_en","libraries.matrix.ui.components_InviteSenderView_Night_0_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_0_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_0_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_1_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_1_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_2_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_2_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_3_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_3_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_4_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_4_en",20217,], -["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_5_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_5_en",20217,], +["libraries.matrix.ui.components_InviteSenderView_Day_0_en","libraries.matrix.ui.components_InviteSenderView_Night_0_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_0_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_0_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_1_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_1_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_2_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_2_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_3_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_3_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_4_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_4_en",20224,], +["features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Day_5_en","features.createroom.impl.joinbyaddress_JoinRoomByAddressView_Night_5_en",20224,], ["features.joinroom.impl_JoinRoomView_Day_0_en","features.joinroom.impl_JoinRoomView_Night_0_en",0,], -["features.joinroom.impl_JoinRoomView_Day_10_en","features.joinroom.impl_JoinRoomView_Night_10_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_11_en","features.joinroom.impl_JoinRoomView_Night_11_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_12_en","features.joinroom.impl_JoinRoomView_Night_12_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_13_en","features.joinroom.impl_JoinRoomView_Night_13_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_14_en","features.joinroom.impl_JoinRoomView_Night_14_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_15_en","features.joinroom.impl_JoinRoomView_Night_15_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_16_en","features.joinroom.impl_JoinRoomView_Night_16_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20217,], -["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_0_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_0_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_1_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_1_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_2_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_2_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_3_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_3_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_4_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_4_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_5_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_5_en",20217,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_6_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_6_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_0_en","features.knockrequests.impl.list_KnockRequestsListView_Night_0_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_10_en","features.knockrequests.impl.list_KnockRequestsListView_Night_10_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_1_en","features.knockrequests.impl.list_KnockRequestsListView_Night_1_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_2_en","features.knockrequests.impl.list_KnockRequestsListView_Night_2_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_3_en","features.knockrequests.impl.list_KnockRequestsListView_Night_3_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_4_en","features.knockrequests.impl.list_KnockRequestsListView_Night_4_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_5_en","features.knockrequests.impl.list_KnockRequestsListView_Night_5_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_6_en","features.knockrequests.impl.list_KnockRequestsListView_Night_6_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_7_en","features.knockrequests.impl.list_KnockRequestsListView_Night_7_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_8_en","features.knockrequests.impl.list_KnockRequestsListView_Night_8_en",20217,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_9_en","features.knockrequests.impl.list_KnockRequestsListView_Night_9_en",20217,], +["features.joinroom.impl_JoinRoomView_Day_10_en","features.joinroom.impl_JoinRoomView_Night_10_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_11_en","features.joinroom.impl_JoinRoomView_Night_11_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_12_en","features.joinroom.impl_JoinRoomView_Night_12_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_13_en","features.joinroom.impl_JoinRoomView_Night_13_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_14_en","features.joinroom.impl_JoinRoomView_Night_14_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_15_en","features.joinroom.impl_JoinRoomView_Night_15_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_16_en","features.joinroom.impl_JoinRoomView_Night_16_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20224,], +["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_0_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_0_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_1_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_1_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_2_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_2_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_3_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_3_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_4_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_4_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_5_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_5_en",20224,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_6_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_6_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_0_en","features.knockrequests.impl.list_KnockRequestsListView_Night_0_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_10_en","features.knockrequests.impl.list_KnockRequestsListView_Night_10_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_1_en","features.knockrequests.impl.list_KnockRequestsListView_Night_1_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_2_en","features.knockrequests.impl.list_KnockRequestsListView_Night_2_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_3_en","features.knockrequests.impl.list_KnockRequestsListView_Night_3_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_4_en","features.knockrequests.impl.list_KnockRequestsListView_Night_4_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_5_en","features.knockrequests.impl.list_KnockRequestsListView_Night_5_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_6_en","features.knockrequests.impl.list_KnockRequestsListView_Night_6_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_7_en","features.knockrequests.impl.list_KnockRequestsListView_Night_7_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_8_en","features.knockrequests.impl.list_KnockRequestsListView_Night_8_en",20224,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_9_en","features.knockrequests.impl.list_KnockRequestsListView_Night_9_en",20224,], ["libraries.designsystem.components_LabelledCheckbox_Toggles_en","",0,], ["features.leaveroom.api_LeaveRoomView_Day_0_en","features.leaveroom.api_LeaveRoomView_Night_0_en",0,], -["features.leaveroom.api_LeaveRoomView_Day_1_en","features.leaveroom.api_LeaveRoomView_Night_1_en",20217,], -["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20217,], -["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20217,], -["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20217,], -["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20217,], -["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20217,], +["features.leaveroom.api_LeaveRoomView_Day_1_en","features.leaveroom.api_LeaveRoomView_Night_1_en",20224,], +["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20224,], +["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20224,], +["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20224,], +["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20224,], +["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20224,], ["libraries.designsystem.background_LightGradientBackground_Day_0_en","libraries.designsystem.background_LightGradientBackground_Night_0_en",0,], ["libraries.designsystem.theme.components_LinearProgressIndicator_Progress_Indicators_en","",0,], ["features.messages.impl.link_LinkView_Day_0_en","features.messages.impl.link_LinkView_Night_0_en",0,], -["features.messages.impl.link_LinkView_Day_1_en","features.messages.impl.link_LinkView_Night_1_en",20217,], +["features.messages.impl.link_LinkView_Day_1_en","features.messages.impl.link_LinkView_Night_1_en",20224,], ["libraries.designsystem.components.dialogs_ListDialogContent_Dialogs_en","",0,], ["libraries.designsystem.components.dialogs_ListDialog_Day_0_en","libraries.designsystem.components.dialogs_ListDialog_Night_0_en",0,], ["libraries.designsystem.theme.components_ListItemPrimaryActionWithIcon_List_item_-_Primary_action_&_Icon_List_items_en","",0,], @@ -565,31 +565,31 @@ export const screenshots = [ ["libraries.designsystem.theme.components_ListSupportingTextSmallPadding_List_supporting_text_-_small_padding_List_sections_en","",0,], ["libraries.textcomposer.components_LiveWaveformView_Day_0_en","libraries.textcomposer.components_LiveWaveformView_Night_0_en",0,], ["appnav.room.joined_LoadingRoomNodeView_Day_0_en","appnav.room.joined_LoadingRoomNodeView_Night_0_en",0,], -["appnav.room.joined_LoadingRoomNodeView_Day_1_en","appnav.room.joined_LoadingRoomNodeView_Night_1_en",20217,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20217,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20217,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20217,], +["appnav.room.joined_LoadingRoomNodeView_Day_1_en","appnav.room.joined_LoadingRoomNodeView_Night_1_en",20224,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20224,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20224,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20224,], ["appnav.loggedin_LoggedInView_Day_0_en","appnav.loggedin_LoggedInView_Night_0_en",0,], -["appnav.loggedin_LoggedInView_Day_1_en","appnav.loggedin_LoggedInView_Night_1_en",20217,], -["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20217,], -["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20217,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20217,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20217,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20217,], -["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20217,], -["features.logout.impl_LogoutView_Day_10_en","features.logout.impl_LogoutView_Night_10_en",20217,], -["features.logout.impl_LogoutView_Day_11_en","features.logout.impl_LogoutView_Night_11_en",20217,], -["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20217,], -["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20217,], -["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20217,], -["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20217,], -["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20217,], -["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20217,], -["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20217,], -["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20217,], -["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20217,], +["appnav.loggedin_LoggedInView_Day_1_en","appnav.loggedin_LoggedInView_Night_1_en",20224,], +["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20224,], +["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20224,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20224,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20224,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20224,], +["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20224,], +["features.logout.impl_LogoutView_Day_10_en","features.logout.impl_LogoutView_Night_10_en",20224,], +["features.logout.impl_LogoutView_Day_11_en","features.logout.impl_LogoutView_Night_11_en",20224,], +["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20224,], +["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20224,], +["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20224,], +["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20224,], +["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20224,], +["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20224,], +["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20224,], +["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20224,], +["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20224,], ["libraries.designsystem.components.button_MainActionButton_Buttons_en","",0,], -["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20217,], +["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20224,], ["libraries.textcomposer.components.markdown_MarkdownTextInput_Day_0_en","libraries.textcomposer.components.markdown_MarkdownTextInput_Night_0_en",0,], ["libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en","libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en",0,], ["libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en","libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en",0,], @@ -602,22 +602,22 @@ export const screenshots = [ ["libraries.matrix.ui.components_MatrixUserRow_Day_1_en","libraries.matrix.ui.components_MatrixUserRow_Night_1_en",0,], ["libraries.mediaviewer.impl.local.audio_MediaAudioView_Day_0_en","libraries.mediaviewer.impl.local.audio_MediaAudioView_Night_0_en",0,], ["libraries.mediaviewer.impl.local.audio_MediaAudioView_Day_1_en","libraries.mediaviewer.impl.local.audio_MediaAudioView_Night_1_en",0,], -["libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Night_0_en",20217,], -["libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Night_0_en",20217,], +["libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Night_0_en",20224,], +["libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Night_0_en",20224,], ["libraries.mediaviewer.impl.local.file_MediaFileView_Day_0_en","libraries.mediaviewer.impl.local.file_MediaFileView_Night_0_en",0,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_0_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_0_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_10_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_10_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_11_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_11_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_12_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_12_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_1_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_1_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_2_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_2_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_3_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_3_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_4_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_4_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_5_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_5_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_6_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_6_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_7_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_7_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_8_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_8_en",20217,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_9_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_9_en",20217,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_0_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_0_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_10_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_10_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_11_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_11_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_12_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_12_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_1_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_1_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_2_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_2_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_3_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_3_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_4_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_4_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_5_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_5_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_6_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_6_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_7_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_7_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_8_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_8_en",20224,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_9_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_9_en",20224,], ["libraries.mediaviewer.impl.local.image_MediaImageView_Day_0_en","libraries.mediaviewer.impl.local.image_MediaImageView_Night_0_en",0,], ["libraries.mediaviewer.impl.local.player_MediaPlayerControllerView_Day_0_en","libraries.mediaviewer.impl.local.player_MediaPlayerControllerView_Night_0_en",0,], ["libraries.mediaviewer.impl.local.player_MediaPlayerControllerView_Day_1_en","libraries.mediaviewer.impl.local.player_MediaPlayerControllerView_Night_1_en",0,], @@ -625,14 +625,14 @@ export const screenshots = [ ["libraries.mediaviewer.impl.local.video_MediaVideoView_Day_0_en","libraries.mediaviewer.impl.local.video_MediaVideoView_Night_0_en",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_0_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_10_en","",0,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_11_en","",20217,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_12_en","",20217,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_11_en","",20224,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_12_en","",20224,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_13_en","",0,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_14_en","",20217,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_14_en","",20224,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_15_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_16_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_1_en","",0,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_2_en","",20217,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_2_en","",20224,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_3_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_4_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_5_en","",0,], @@ -644,7 +644,7 @@ export const screenshots = [ ["libraries.textcomposer.mentions_MentionSpanTheme_Day_0_en","libraries.textcomposer.mentions_MentionSpanTheme_Night_0_en",0,], ["libraries.designsystem.theme.components.previews_Menu_Menus_en","",0,], ["features.messages.impl.messagecomposer_MessageComposerViewVoice_Day_0_en","features.messages.impl.messagecomposer_MessageComposerViewVoice_Night_0_en",0,], -["features.messages.impl.messagecomposer_MessageComposerView_Day_0_en","features.messages.impl.messagecomposer_MessageComposerView_Night_0_en",20217,], +["features.messages.impl.messagecomposer_MessageComposerView_Day_0_en","features.messages.impl.messagecomposer_MessageComposerView_Night_0_en",20224,], ["features.messages.impl.timeline.components_MessageEventBubble_Day_0_en","features.messages.impl.timeline.components_MessageEventBubble_Night_0_en",0,], ["features.messages.impl.timeline.components_MessageEventBubble_Day_10_en","features.messages.impl.timeline.components_MessageEventBubble_Night_10_en",0,], ["features.messages.impl.timeline.components_MessageEventBubble_Day_11_en","features.messages.impl.timeline.components_MessageEventBubble_Night_11_en",0,], @@ -661,7 +661,7 @@ export const screenshots = [ ["features.messages.impl.timeline.components_MessageEventBubble_Day_7_en","features.messages.impl.timeline.components_MessageEventBubble_Night_7_en",0,], ["features.messages.impl.timeline.components_MessageEventBubble_Day_8_en","features.messages.impl.timeline.components_MessageEventBubble_Night_8_en",0,], ["features.messages.impl.timeline.components_MessageEventBubble_Day_9_en","features.messages.impl.timeline.components_MessageEventBubble_Night_9_en",0,], -["features.messages.impl.timeline.components_MessageShieldView_Day_0_en","features.messages.impl.timeline.components_MessageShieldView_Night_0_en",20217,], +["features.messages.impl.timeline.components_MessageShieldView_Day_0_en","features.messages.impl.timeline.components_MessageShieldView_Night_0_en",20224,], ["features.messages.impl.timeline.components_MessageStateEventContainer_Day_0_en","features.messages.impl.timeline.components_MessageStateEventContainer_Night_0_en",0,], ["features.messages.impl.timeline.components_MessagesReactionButtonAdd_Day_0_en","features.messages.impl.timeline.components_MessagesReactionButtonAdd_Night_0_en",0,], ["features.messages.impl.timeline.components_MessagesReactionButtonExtra_Day_0_en","features.messages.impl.timeline.components_MessagesReactionButtonExtra_Night_0_en",0,], @@ -669,25 +669,25 @@ export const screenshots = [ ["features.messages.impl.timeline.components_MessagesReactionButton_Day_1_en","features.messages.impl.timeline.components_MessagesReactionButton_Night_1_en",0,], ["features.messages.impl.timeline.components_MessagesReactionButton_Day_2_en","features.messages.impl.timeline.components_MessagesReactionButton_Night_2_en",0,], ["features.messages.impl.timeline.components_MessagesReactionButton_Day_3_en","features.messages.impl.timeline.components_MessagesReactionButton_Night_3_en",0,], -["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en",20217,], -["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20217,], -["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20217,], -["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20217,], -["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20217,], -["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20217,], -["features.messages.impl_MessagesView_Day_12_en","features.messages.impl_MessagesView_Night_12_en",20217,], -["features.messages.impl_MessagesView_Day_13_en","features.messages.impl_MessagesView_Night_13_en",20217,], -["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20217,], -["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20217,], -["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20217,], -["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20217,], -["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20217,], -["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20217,], -["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20217,], -["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20217,], -["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20217,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en",20224,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20224,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20224,], +["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20224,], +["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20224,], +["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20224,], +["features.messages.impl_MessagesView_Day_12_en","features.messages.impl_MessagesView_Night_12_en",20224,], +["features.messages.impl_MessagesView_Day_13_en","features.messages.impl_MessagesView_Night_13_en",20224,], +["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20224,], +["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20224,], +["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20224,], +["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20224,], +["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20224,], +["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20224,], +["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20224,], +["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20224,], +["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20224,], ["features.migration.impl_MigrationView_Day_0_en","features.migration.impl_MigrationView_Night_0_en",0,], -["features.migration.impl_MigrationView_Day_1_en","features.migration.impl_MigrationView_Night_1_en",20217,], +["features.migration.impl_MigrationView_Day_1_en","features.migration.impl_MigrationView_Night_1_en",20224,], ["libraries.designsystem.theme.components_ModalBottomSheetDark_Bottom_Sheets_en","",0,], ["libraries.designsystem.theme.components_ModalBottomSheetLight_Bottom_Sheets_en","",0,], ["appicon.element_MonochromeIcon_en","",0,], @@ -696,44 +696,44 @@ export const screenshots = [ ["libraries.designsystem.components.list_MutipleSelectionListItemSelectedTrailingContent_Multiple_selection_List_item_-_selection_in_trailing_content_List_items_en","",0,], ["libraries.designsystem.components.list_MutipleSelectionListItemSelected_Multiple_selection_List_item_-_selection_in_supporting_text_List_items_en","",0,], ["libraries.designsystem.components.list_MutipleSelectionListItem_Multiple_selection_List_item_-_no_selection_List_items_en","",0,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_13_en","features.preferences.impl.notifications_NotificationSettingsView_Night_13_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20217,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20217,], -["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20217,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_13_en","features.preferences.impl.notifications_NotificationSettingsView_Night_13_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20224,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20224,], +["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20224,], ["libraries.oidc.impl.webview_OidcView_Day_0_en","libraries.oidc.impl.webview_OidcView_Night_0_en",0,], ["libraries.oidc.impl.webview_OidcView_Day_1_en","libraries.oidc.impl.webview_OidcView_Night_1_en",0,], ["libraries.designsystem.atomic.pages_OnBoardingPage_Day_0_en","libraries.designsystem.atomic.pages_OnBoardingPage_Night_0_en",0,], -["features.onboarding.impl_OnBoardingView_Day_0_en","features.onboarding.impl_OnBoardingView_Night_0_en",20217,], -["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20217,], -["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20217,], -["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20217,], -["features.onboarding.impl_OnBoardingView_Day_4_en","features.onboarding.impl_OnBoardingView_Night_4_en",20217,], +["features.onboarding.impl_OnBoardingView_Day_0_en","features.onboarding.impl_OnBoardingView_Night_0_en",20224,], +["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20224,], +["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20224,], +["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20224,], +["features.onboarding.impl_OnBoardingView_Day_4_en","features.onboarding.impl_OnBoardingView_Night_4_en",20224,], ["libraries.designsystem.background_OnboardingBackground_Day_0_en","libraries.designsystem.background_OnboardingBackground_Night_0_en",0,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_0_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_0_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_10_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_10_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_11_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_11_en",20220,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_0_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_0_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_10_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_10_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_11_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_11_en",20224,], ["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_12_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_12_en",0,], ["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_13_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_13_en",0,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_1_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_1_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_2_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_2_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_3_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_3_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_4_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_4_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_5_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_5_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_6_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_6_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_7_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_7_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_8_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_8_en",20220,], -["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_9_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_9_en",20220,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_1_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_1_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_2_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_2_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_3_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_3_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_4_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_4_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_5_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_5_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_6_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_6_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_7_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_7_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_8_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_8_en",20224,], +["features.verifysession.impl.outgoing_OutgoingVerificationView_Day_9_en","features.verifysession.impl.outgoing_OutgoingVerificationView_Night_9_en",20224,], ["libraries.designsystem.theme.components_OutlinedButtonLargeLowPadding_Buttons_en","",0,], ["libraries.designsystem.theme.components_OutlinedButtonLarge_Buttons_en","",0,], ["libraries.designsystem.theme.components_OutlinedButtonMediumLowPadding_Buttons_en","",0,], @@ -747,65 +747,65 @@ export const screenshots = [ ["libraries.designsystem.components_PageTitleWithIconFull_Day_5_en","libraries.designsystem.components_PageTitleWithIconFull_Night_5_en",0,], ["libraries.designsystem.components_PageTitleWithIconFull_Day_6_en","libraries.designsystem.components_PageTitleWithIconFull_Night_6_en",0,], ["libraries.designsystem.components_PageTitleWithIconMinimal_Day_0_en","libraries.designsystem.components_PageTitleWithIconMinimal_Night_0_en",0,], -["libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Day_0_en","libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20217,], -["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20217,], -["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20217,], -["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20217,], -["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20217,], +["libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Day_0_en","libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20224,], +["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20224,], +["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20224,], +["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20224,], +["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20224,], ["features.lockscreen.impl.components_PinEntryTextField_Day_0_en","features.lockscreen.impl.components_PinEntryTextField_Night_0_en",0,], ["libraries.designsystem.components_PinIcon_Day_0_en","libraries.designsystem.components_PinIcon_Night_0_en",0,], ["features.lockscreen.impl.unlock.keypad_PinKeypad_Day_0_en","features.lockscreen.impl.unlock.keypad_PinKeypad_Night_0_en",0,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_0_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_0_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20217,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20217,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_0_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_0_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20224,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20224,], ["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_0_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_0_en",0,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_10_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_10_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20217,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20217,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20217,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20217,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20217,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20217,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_10_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_10_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20224,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20224,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20224,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20224,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20224,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20224,], ["libraries.designsystem.atomic.atoms_PlaceholderAtom_Day_0_en","libraries.designsystem.atomic.atoms_PlaceholderAtom_Night_0_en",0,], -["features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Night_0_en",20217,], -["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20217,], -["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20217,], -["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20217,], -["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20217,], +["features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Night_0_en",20224,], +["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20224,], +["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20224,], +["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20224,], +["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20224,], ["features.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewUndisclosedNotSelected_Night_0_en",0,], ["features.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewUndisclosedSelected_Night_0_en",0,], -["features.poll.api.pollcontent_PollContentViewCreatorEditable_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEditable_Night_0_en",20217,], -["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20217,], -["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20217,], -["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20217,], -["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20217,], -["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20217,], -["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20217,], -["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20217,], -["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20217,], -["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20217,], -["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20217,], +["features.poll.api.pollcontent_PollContentViewCreatorEditable_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEditable_Night_0_en",20224,], +["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20224,], +["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20224,], +["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20224,], +["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20224,], +["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20224,], +["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20224,], +["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20224,], +["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20224,], +["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20224,], +["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20224,], ["features.poll.api.pollcontent_PollTitleView_Day_0_en","features.poll.api.pollcontent_PollTitleView_Night_0_en",0,], ["libraries.designsystem.components.preferences_PreferenceCategory_Preferences_en","",0,], ["libraries.designsystem.components.preferences_PreferenceCheckbox_Preferences_en","",0,], @@ -819,217 +819,218 @@ export const screenshots = [ ["libraries.designsystem.components.preferences_PreferenceRow_Preferences_en","",0,], ["libraries.designsystem.components.preferences_PreferenceSlide_Preferences_en","",0,], ["libraries.designsystem.components.preferences_PreferenceSwitch_Preferences_en","",0,], -["features.preferences.impl.root_PreferencesRootViewDark_0_en","",20217,], -["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20217,], -["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20217,], -["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20217,], +["features.preferences.impl.root_PreferencesRootViewDark_0_en","",20224,], +["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20224,], +["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20224,], +["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20224,], ["features.messages.impl.timeline.components.event_ProgressButton_Day_0_en","features.messages.impl.timeline.components.event_ProgressButton_Night_0_en",0,], -["libraries.designsystem.components_ProgressDialogContent_Dialogs_en","",20217,], -["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20217,], -["features.messages.impl.timeline.protection_ProtectedView_Day_0_en","features.messages.impl.timeline.protection_ProtectedView_Night_0_en",20217,], -["features.messages.impl.timeline.protection_ProtectedView_Day_1_en","features.messages.impl.timeline.protection_ProtectedView_Night_1_en",20217,], -["features.messages.impl.timeline.protection_ProtectedView_Day_2_en","features.messages.impl.timeline.protection_ProtectedView_Night_2_en",20217,], -["features.messages.impl.timeline.protection_ProtectedView_Day_3_en","features.messages.impl.timeline.protection_ProtectedView_Night_3_en",20217,], -["libraries.troubleshoot.impl.history_PushHistoryView_Day_0_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_0_en",20217,], -["libraries.troubleshoot.impl.history_PushHistoryView_Day_1_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_1_en",20217,], -["libraries.troubleshoot.impl.history_PushHistoryView_Day_2_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_2_en",20217,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20217,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20217,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20217,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20217,], -["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20217,], -["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20217,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20217,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20217,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20217,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20217,], +["libraries.designsystem.components_ProgressDialogContent_Dialogs_en","",20224,], +["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20224,], +["features.messages.impl.timeline.protection_ProtectedView_Day_0_en","features.messages.impl.timeline.protection_ProtectedView_Night_0_en",20224,], +["features.messages.impl.timeline.protection_ProtectedView_Day_1_en","features.messages.impl.timeline.protection_ProtectedView_Night_1_en",20224,], +["features.messages.impl.timeline.protection_ProtectedView_Day_2_en","features.messages.impl.timeline.protection_ProtectedView_Night_2_en",20224,], +["features.messages.impl.timeline.protection_ProtectedView_Day_3_en","features.messages.impl.timeline.protection_ProtectedView_Night_3_en",20224,], +["libraries.troubleshoot.impl.history_PushHistoryView_Day_0_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_0_en",20224,], +["libraries.troubleshoot.impl.history_PushHistoryView_Day_1_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_1_en",20224,], +["libraries.troubleshoot.impl.history_PushHistoryView_Day_2_en","libraries.troubleshoot.impl.history_PushHistoryView_Night_2_en",20224,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20224,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20224,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20224,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20224,], +["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20224,], +["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20224,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20224,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20224,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20224,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20224,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_4_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_4_en",20227,], ["libraries.designsystem.theme.components_RadioButton_Toggles_en","",0,], -["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20217,], -["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20217,], +["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20224,], +["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20224,], ["features.rageshake.api.preferences_RageshakePreferencesView_Day_1_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_1_en",0,], ["features.messages.impl.timeline.components.reactionsummary_ReactionSummaryViewContent_Day_0_en","features.messages.impl.timeline.components.reactionsummary_ReactionSummaryViewContent_Night_0_en",0,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_0_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_0_en",20217,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20217,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20217,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20217,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20217,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20217,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20217,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_0_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_0_en",20224,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20224,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20224,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20224,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20224,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20224,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20224,], ["libraries.designsystem.atomic.atoms_RedIndicatorAtom_Day_0_en","libraries.designsystem.atomic.atoms_RedIndicatorAtom_Night_0_en",0,], ["features.messages.impl.timeline.components_ReplySwipeIndicator_Day_0_en","features.messages.impl.timeline.components_ReplySwipeIndicator_Night_0_en",0,], -["features.messages.impl.report_ReportMessageView_Day_0_en","features.messages.impl.report_ReportMessageView_Night_0_en",20217,], -["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20217,], -["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20217,], -["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20217,], -["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20217,], -["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20217,], -["features.reportroom.impl_ReportRoomView_Day_0_en","features.reportroom.impl_ReportRoomView_Night_0_en",20217,], -["features.reportroom.impl_ReportRoomView_Day_1_en","features.reportroom.impl_ReportRoomView_Night_1_en",20217,], -["features.reportroom.impl_ReportRoomView_Day_2_en","features.reportroom.impl_ReportRoomView_Night_2_en",20217,], -["features.reportroom.impl_ReportRoomView_Day_3_en","features.reportroom.impl_ReportRoomView_Night_3_en",20217,], -["features.reportroom.impl_ReportRoomView_Day_4_en","features.reportroom.impl_ReportRoomView_Night_4_en",20217,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20217,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20217,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20217,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20217,], -["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20217,], -["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20217,], +["features.messages.impl.report_ReportMessageView_Day_0_en","features.messages.impl.report_ReportMessageView_Night_0_en",20224,], +["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20224,], +["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20224,], +["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20224,], +["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20224,], +["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20224,], +["features.reportroom.impl_ReportRoomView_Day_0_en","features.reportroom.impl_ReportRoomView_Night_0_en",20224,], +["features.reportroom.impl_ReportRoomView_Day_1_en","features.reportroom.impl_ReportRoomView_Night_1_en",20224,], +["features.reportroom.impl_ReportRoomView_Day_2_en","features.reportroom.impl_ReportRoomView_Night_2_en",20224,], +["features.reportroom.impl_ReportRoomView_Day_3_en","features.reportroom.impl_ReportRoomView_Night_3_en",20224,], +["features.reportroom.impl_ReportRoomView_Day_4_en","features.reportroom.impl_ReportRoomView_Night_4_en",20224,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20224,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20224,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20224,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20224,], +["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20224,], +["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20224,], ["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_0_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_0_en",0,], -["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_1_en",20217,], -["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20217,], -["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20217,], -["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20217,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20217,], +["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_1_en",20224,], +["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20224,], +["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20224,], +["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20224,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20224,], ["libraries.matrix.ui.room.address_RoomAddressField_Day_0_en","libraries.matrix.ui.room.address_RoomAddressField_Night_0_en",0,], ["features.roomaliasresolver.impl_RoomAliasResolverView_Day_0_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_0_en",0,], -["features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en",20217,], -["features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en",20217,], -["features.roomdetails.impl_RoomDetailsDark_0_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_10_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_11_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_12_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_13_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_14_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_15_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_16_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_17_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_18_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_1_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_2_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_3_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_4_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_5_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_6_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_7_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_8_en","",20217,], -["features.roomdetails.impl_RoomDetailsDark_9_en","",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20217,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20217,], -["features.roomdetails.impl_RoomDetails_0_en","",20217,], -["features.roomdetails.impl_RoomDetails_10_en","",20217,], -["features.roomdetails.impl_RoomDetails_11_en","",20217,], -["features.roomdetails.impl_RoomDetails_12_en","",20217,], -["features.roomdetails.impl_RoomDetails_13_en","",20217,], -["features.roomdetails.impl_RoomDetails_14_en","",20217,], -["features.roomdetails.impl_RoomDetails_15_en","",20217,], -["features.roomdetails.impl_RoomDetails_16_en","",20217,], -["features.roomdetails.impl_RoomDetails_17_en","",20217,], -["features.roomdetails.impl_RoomDetails_18_en","",20217,], -["features.roomdetails.impl_RoomDetails_1_en","",20217,], -["features.roomdetails.impl_RoomDetails_2_en","",20217,], -["features.roomdetails.impl_RoomDetails_3_en","",20217,], -["features.roomdetails.impl_RoomDetails_4_en","",20217,], -["features.roomdetails.impl_RoomDetails_5_en","",20217,], -["features.roomdetails.impl_RoomDetails_6_en","",20217,], -["features.roomdetails.impl_RoomDetails_7_en","",20217,], -["features.roomdetails.impl_RoomDetails_8_en","",20217,], -["features.roomdetails.impl_RoomDetails_9_en","",20217,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20217,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20217,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20217,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20217,], -["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20217,], -["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20217,], +["features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en",20224,], +["features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en",20224,], +["features.roomdetails.impl_RoomDetailsDark_0_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_10_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_11_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_12_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_13_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_14_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_15_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_16_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_17_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_18_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_1_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_2_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_3_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_4_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_5_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_6_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_7_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_8_en","",20224,], +["features.roomdetails.impl_RoomDetailsDark_9_en","",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20224,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20224,], +["features.roomdetails.impl_RoomDetails_0_en","",20224,], +["features.roomdetails.impl_RoomDetails_10_en","",20224,], +["features.roomdetails.impl_RoomDetails_11_en","",20224,], +["features.roomdetails.impl_RoomDetails_12_en","",20224,], +["features.roomdetails.impl_RoomDetails_13_en","",20224,], +["features.roomdetails.impl_RoomDetails_14_en","",20224,], +["features.roomdetails.impl_RoomDetails_15_en","",20224,], +["features.roomdetails.impl_RoomDetails_16_en","",20224,], +["features.roomdetails.impl_RoomDetails_17_en","",20224,], +["features.roomdetails.impl_RoomDetails_18_en","",20224,], +["features.roomdetails.impl_RoomDetails_1_en","",20224,], +["features.roomdetails.impl_RoomDetails_2_en","",20224,], +["features.roomdetails.impl_RoomDetails_3_en","",20224,], +["features.roomdetails.impl_RoomDetails_4_en","",20224,], +["features.roomdetails.impl_RoomDetails_5_en","",20224,], +["features.roomdetails.impl_RoomDetails_6_en","",20224,], +["features.roomdetails.impl_RoomDetails_7_en","",20224,], +["features.roomdetails.impl_RoomDetails_8_en","",20224,], +["features.roomdetails.impl_RoomDetails_9_en","",20224,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20224,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20224,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20224,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20224,], +["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20224,], +["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20224,], ["features.roomlist.impl.components_RoomListContentView_Day_2_en","features.roomlist.impl.components_RoomListContentView_Night_2_en",0,], -["features.roomlist.impl.components_RoomListContentView_Day_3_en","features.roomlist.impl.components_RoomListContentView_Night_3_en",20217,], -["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20217,], -["features.roomlist.impl_RoomListDeclineInviteMenuContent_Day_0_en","features.roomlist.impl_RoomListDeclineInviteMenuContent_Night_0_en",20217,], -["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20217,], -["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20217,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20217,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20217,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20217,], +["features.roomlist.impl.components_RoomListContentView_Day_3_en","features.roomlist.impl.components_RoomListContentView_Night_3_en",20224,], +["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20224,], +["features.roomlist.impl_RoomListDeclineInviteMenuContent_Day_0_en","features.roomlist.impl_RoomListDeclineInviteMenuContent_Night_0_en",20224,], +["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20224,], +["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20224,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20224,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20224,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20224,], ["features.roomlist.impl.search_RoomListSearchContent_Day_0_en","features.roomlist.impl.search_RoomListSearchContent_Night_0_en",0,], -["features.roomlist.impl.search_RoomListSearchContent_Day_1_en","features.roomlist.impl.search_RoomListSearchContent_Night_1_en",20217,], -["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20217,], -["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20217,], -["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20217,], -["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20217,], -["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20217,], -["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20217,], -["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20217,], -["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20217,], -["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20217,], +["features.roomlist.impl.search_RoomListSearchContent_Day_1_en","features.roomlist.impl.search_RoomListSearchContent_Night_1_en",20224,], +["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20224,], +["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20224,], +["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20224,], +["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20224,], +["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20224,], +["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20224,], +["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20224,], +["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20224,], +["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20224,], ["features.roomlist.impl_RoomListView_Day_8_en","features.roomlist.impl_RoomListView_Night_8_en",0,], ["features.roomlist.impl_RoomListView_Day_9_en","features.roomlist.impl_RoomListView_Night_9_en",0,], -["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en",20217,], -["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20217,], -["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_5_en","features.roomdetails.impl.members_RoomMemberListView_Night_5_en",20217,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en",20224,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20224,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_5_en","features.roomdetails.impl.members_RoomMemberListView_Night_5_en",20224,], ["features.roomdetails.impl.members_RoomMemberListView_Day_6_en","features.roomdetails.impl.members_RoomMemberListView_Night_6_en",0,], -["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20217,], -["features.roomdetails.impl.members_RoomMemberListView_Day_9_en","features.roomdetails.impl.members_RoomMemberListView_Night_9_en",20217,], +["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20224,], +["features.roomdetails.impl.members_RoomMemberListView_Day_9_en","features.roomdetails.impl.members_RoomMemberListView_Night_9_en",20224,], ["libraries.designsystem.atomic.molecules_RoomMembersCountMolecule_Day_0_en","libraries.designsystem.atomic.molecules_RoomMembersCountMolecule_Night_0_en",0,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_0_en",20217,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_0_en",20224,], ["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_10_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_10_en",0,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_5_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_5_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_6_en",20217,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_5_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_5_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_6_en",20224,], ["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_7_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_7_en",0,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20217,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_9_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_9_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Night_0_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20217,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20217,], -["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20217,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20224,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_9_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_9_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Night_0_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20224,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20224,], +["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20224,], ["features.roomlist.impl.components_RoomSummaryPlaceholderRow_Day_0_en","features.roomlist.impl.components_RoomSummaryPlaceholderRow_Night_0_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_0_en","features.roomlist.impl.components_RoomSummaryRow_Night_0_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_10_en","features.roomlist.impl.components_RoomSummaryRow_Night_10_en",0,], @@ -1052,12 +1053,12 @@ export const screenshots = [ ["features.roomlist.impl.components_RoomSummaryRow_Day_26_en","features.roomlist.impl.components_RoomSummaryRow_Night_26_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_27_en","features.roomlist.impl.components_RoomSummaryRow_Night_27_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_28_en","features.roomlist.impl.components_RoomSummaryRow_Night_28_en",0,], -["features.roomlist.impl.components_RoomSummaryRow_Day_29_en","features.roomlist.impl.components_RoomSummaryRow_Night_29_en",20217,], -["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20217,], -["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20217,], -["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20217,], -["features.roomlist.impl.components_RoomSummaryRow_Day_32_en","features.roomlist.impl.components_RoomSummaryRow_Night_32_en",20217,], -["features.roomlist.impl.components_RoomSummaryRow_Day_33_en","features.roomlist.impl.components_RoomSummaryRow_Night_33_en",20217,], +["features.roomlist.impl.components_RoomSummaryRow_Day_29_en","features.roomlist.impl.components_RoomSummaryRow_Night_29_en",20224,], +["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20224,], +["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20224,], +["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20224,], +["features.roomlist.impl.components_RoomSummaryRow_Day_32_en","features.roomlist.impl.components_RoomSummaryRow_Night_32_en",20224,], +["features.roomlist.impl.components_RoomSummaryRow_Day_33_en","features.roomlist.impl.components_RoomSummaryRow_Night_33_en",20224,], ["features.roomlist.impl.components_RoomSummaryRow_Day_3_en","features.roomlist.impl.components_RoomSummaryRow_Night_3_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_4_en","features.roomlist.impl.components_RoomSummaryRow_Night_4_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_5_en","features.roomlist.impl.components_RoomSummaryRow_Night_5_en",0,], @@ -1065,77 +1066,77 @@ export const screenshots = [ ["features.roomlist.impl.components_RoomSummaryRow_Day_7_en","features.roomlist.impl.components_RoomSummaryRow_Night_7_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_8_en","features.roomlist.impl.components_RoomSummaryRow_Night_8_en",0,], ["features.roomlist.impl.components_RoomSummaryRow_Day_9_en","features.roomlist.impl.components_RoomSummaryRow_Night_9_en",0,], -["appnav.root_RootView_Day_0_en","appnav.root_RootView_Night_0_en",20217,], -["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20217,], -["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20217,], -["appicon.enterprise_RoundIcon_en","",0,], +["appnav.root_RootView_Day_0_en","appnav.root_RootView_Night_0_en",20224,], +["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20224,], +["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20224,], ["appicon.element_RoundIcon_en","",0,], +["appicon.enterprise_RoundIcon_en","",0,], ["libraries.designsystem.atomic.atoms_RoundedIconAtom_Day_0_en","libraries.designsystem.atomic.atoms_RoundedIconAtom_Night_0_en",0,], -["features.verifysession.impl.emoji_SasEmojis_Day_0_en","features.verifysession.impl.emoji_SasEmojis_Night_0_en",20217,], -["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20217,], -["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20217,], +["features.verifysession.impl.emoji_SasEmojis_Day_0_en","features.verifysession.impl.emoji_SasEmojis_Night_0_en",20224,], +["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20224,], +["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20224,], ["libraries.designsystem.theme.components_SearchBarActiveNoneQuery_Search_views_en","",0,], ["libraries.designsystem.theme.components_SearchBarActiveWithContent_Search_views_en","",0,], -["libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search_views_en","",20217,], +["libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search_views_en","",20224,], ["libraries.designsystem.theme.components_SearchBarActiveWithQueryNoBackButton_Search_views_en","",0,], ["libraries.designsystem.theme.components_SearchBarActiveWithQuery_Search_views_en","",0,], ["libraries.designsystem.theme.components_SearchBarInactive_Search_views_en","",0,], -["features.createroom.impl.components_SearchMultipleUsersResultItem_en","",20217,], -["features.createroom.impl.components_SearchSingleUserResultItem_en","",20217,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20217,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20217,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20217,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20217,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20217,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20217,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20217,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20217,], -["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20217,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_en","",20217,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_en","",20217,], +["features.createroom.impl.components_SearchMultipleUsersResultItem_en","",20224,], +["features.createroom.impl.components_SearchSingleUserResultItem_en","",20224,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20224,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20224,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20224,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20224,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20224,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20224,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20224,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20224,], +["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20224,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_en","",20224,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_en","",20224,], ["libraries.matrix.ui.components_SelectedRoom_Day_0_en","libraries.matrix.ui.components_SelectedRoom_Night_0_en",0,], ["libraries.matrix.ui.components_SelectedRoom_Day_1_en","libraries.matrix.ui.components_SelectedRoom_Night_1_en",0,], ["libraries.matrix.ui.components_SelectedRoom_Day_2_en","libraries.matrix.ui.components_SelectedRoom_Night_2_en",0,], @@ -1143,11 +1144,11 @@ export const screenshots = [ ["libraries.matrix.ui.components_SelectedUser_Day_0_en","libraries.matrix.ui.components_SelectedUser_Night_0_en",0,], ["libraries.matrix.ui.components_SelectedUsersRowList_Day_0_en","libraries.matrix.ui.components_SelectedUsersRowList_Night_0_en",0,], ["libraries.textcomposer.components_SendButton_Day_0_en","libraries.textcomposer.components_SendButton_Night_0_en",0,], -["features.location.impl.send_SendLocationView_Day_0_en","features.location.impl.send_SendLocationView_Night_0_en",20217,], -["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20217,], -["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20217,], -["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20217,], -["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20217,], +["features.location.impl.send_SendLocationView_Day_0_en","features.location.impl.send_SendLocationView_Night_0_en",20224,], +["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20224,], +["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20224,], +["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20224,], +["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20224,], ["libraries.matrix.ui.messages.sender_SenderName_Day_0_en","libraries.matrix.ui.messages.sender_SenderName_Night_0_en",0,], ["libraries.matrix.ui.messages.sender_SenderName_Day_1_en","libraries.matrix.ui.messages.sender_SenderName_Night_1_en",0,], ["libraries.matrix.ui.messages.sender_SenderName_Day_2_en","libraries.matrix.ui.messages.sender_SenderName_Night_2_en",0,], @@ -1157,27 +1158,27 @@ export const screenshots = [ ["libraries.matrix.ui.messages.sender_SenderName_Day_6_en","libraries.matrix.ui.messages.sender_SenderName_Night_6_en",0,], ["libraries.matrix.ui.messages.sender_SenderName_Day_7_en","libraries.matrix.ui.messages.sender_SenderName_Night_7_en",0,], ["libraries.matrix.ui.messages.sender_SenderName_Day_8_en","libraries.matrix.ui.messages.sender_SenderName_Night_8_en",0,], -["features.verifysession.impl.incoming.ui_SessionDetailsView_Day_0_en","features.verifysession.impl.incoming.ui_SessionDetailsView_Night_0_en",20217,], -["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20217,], -["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20217,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20217,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20217,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20217,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20217,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20217,], +["features.verifysession.impl.incoming.ui_SessionDetailsView_Day_0_en","features.verifysession.impl.incoming.ui_SessionDetailsView_Night_0_en",20224,], +["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20224,], +["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20224,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20224,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20224,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20224,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20224,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20224,], ["features.share.impl_ShareView_Day_0_en","features.share.impl_ShareView_Night_0_en",0,], ["features.share.impl_ShareView_Day_1_en","features.share.impl_ShareView_Night_1_en",0,], ["features.share.impl_ShareView_Day_2_en","features.share.impl_ShareView_Night_2_en",0,], -["features.share.impl_ShareView_Day_3_en","features.share.impl_ShareView_Night_3_en",20217,], -["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20217,], -["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20217,], -["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20217,], -["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20217,], -["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20217,], -["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20217,], -["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20217,], -["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20217,], -["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20217,], +["features.share.impl_ShareView_Day_3_en","features.share.impl_ShareView_Night_3_en",20224,], +["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20224,], +["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20224,], +["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20224,], +["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20224,], +["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20224,], +["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20224,], +["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20224,], +["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20224,], +["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20224,], ["libraries.designsystem.components.dialogs_SingleSelectionDialogContent_Dialogs_en","",0,], ["libraries.designsystem.components.dialogs_SingleSelectionDialog_Day_0_en","libraries.designsystem.components.dialogs_SingleSelectionDialog_Night_0_en",0,], ["libraries.designsystem.components.list_SingleSelectionListItemCustomFormattert_Single_selection_List_item_-_custom_formatter_List_items_en","",0,], @@ -1186,7 +1187,7 @@ export const screenshots = [ ["libraries.designsystem.components.list_SingleSelectionListItemUnselectedWithSupportingText_Single_selection_List_item_-_no_selection,_supporting_text_List_items_en","",0,], ["libraries.designsystem.components.list_SingleSelectionListItem_Single_selection_List_item_-_no_selection_List_items_en","",0,], ["libraries.designsystem.theme.components_Sliders_Sliders_en","",0,], -["features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Day_0_en","features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Night_0_en",20217,], +["features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Day_0_en","features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Night_0_en",20224,], ["libraries.designsystem.theme.components_SnackbarWithActionAndCloseButton_Snackbar_with_action_and_close_button_Snackbars_en","",0,], ["libraries.designsystem.theme.components_SnackbarWithActionOnNewLineAndCloseButton_Snackbar_with_action_and_close_button_on_new_line_Snackbars_en","",0,], ["libraries.designsystem.theme.components_SnackbarWithActionOnNewLine_Snackbar_with_action_on_new_line_Snackbars_en","",0,], @@ -1195,60 +1196,60 @@ export const screenshots = [ ["libraries.designsystem.modifiers_SquareSizeModifierInsideSquare_en","",0,], ["libraries.designsystem.modifiers_SquareSizeModifierLargeHeight_en","",0,], ["libraries.designsystem.modifiers_SquareSizeModifierLargeWidth_en","",0,], -["features.location.api.internal_StaticMapPlaceholder_Day_0_en","features.location.api.internal_StaticMapPlaceholder_Night_0_en",20217,], +["features.location.api.internal_StaticMapPlaceholder_Day_0_en","features.location.api.internal_StaticMapPlaceholder_Night_0_en",20224,], ["features.location.api_StaticMapView_Day_0_en","features.location.api_StaticMapView_Night_0_en",0,], -["features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en","features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en",20217,], +["features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en","features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en",20224,], ["libraries.designsystem.atomic.pages_SunsetPage_Day_0_en","libraries.designsystem.atomic.pages_SunsetPage_Night_0_en",0,], ["libraries.designsystem.components.button_SuperButton_Day_0_en","libraries.designsystem.components.button_SuperButton_Night_0_en",0,], ["libraries.designsystem.theme.components_Surface_en","",0,], ["libraries.designsystem.theme.components_Switch_Toggles_en","",0,], -["appnav.loggedin_SyncStateView_Day_0_en","appnav.loggedin_SyncStateView_Night_0_en",20217,], +["appnav.loggedin_SyncStateView_Day_0_en","appnav.loggedin_SyncStateView_Night_0_en",20224,], ["libraries.designsystem.theme.components_TextButtonLargeLowPadding_Buttons_en","",0,], ["libraries.designsystem.theme.components_TextButtonLarge_Buttons_en","",0,], ["libraries.designsystem.theme.components_TextButtonMediumLowPadding_Buttons_en","",0,], ["libraries.designsystem.theme.components_TextButtonMedium_Buttons_en","",0,], ["libraries.designsystem.theme.components_TextButtonSmall_Buttons_en","",0,], -["libraries.textcomposer_TextComposerAddCaption_Day_0_en","libraries.textcomposer_TextComposerAddCaption_Night_0_en",20217,], -["libraries.textcomposer_TextComposerCaption_Day_0_en","libraries.textcomposer_TextComposerCaption_Night_0_en",20217,], -["libraries.textcomposer_TextComposerEditCaption_Day_0_en","libraries.textcomposer_TextComposerEditCaption_Night_0_en",20217,], -["libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en",20217,], -["libraries.textcomposer_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20217,], -["libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en",20217,], -["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20217,], -["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20217,], -["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20217,], -["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en",20217,], -["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20217,], -["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20217,], -["libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en",20217,], -["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20217,], -["libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en",20217,], +["libraries.textcomposer_TextComposerAddCaption_Day_0_en","libraries.textcomposer_TextComposerAddCaption_Night_0_en",20224,], +["libraries.textcomposer_TextComposerCaption_Day_0_en","libraries.textcomposer_TextComposerCaption_Night_0_en",20224,], +["libraries.textcomposer_TextComposerEditCaption_Day_0_en","libraries.textcomposer_TextComposerEditCaption_Night_0_en",20224,], +["libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en",20224,], +["libraries.textcomposer_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20224,], +["libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en",20224,], +["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20224,], +["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20224,], +["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20224,], +["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en",20224,], +["libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en","libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20224,], +["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20224,], +["libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en",20224,], +["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20224,], +["libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en","libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en",20224,], ["libraries.textcomposer_TextComposerVoice_Day_0_en","libraries.textcomposer_TextComposerVoice_Night_0_en",0,], ["libraries.designsystem.theme.components_TextDark_Text_en","",0,], -["libraries.designsystem.components.dialogs_TextFieldDialogWithError_Day_0_en","libraries.designsystem.components.dialogs_TextFieldDialogWithError_Night_0_en",20217,], -["libraries.designsystem.components.dialogs_TextFieldDialog_Day_0_en","libraries.designsystem.components.dialogs_TextFieldDialog_Night_0_en",20217,], +["libraries.designsystem.components.dialogs_TextFieldDialogWithError_Day_0_en","libraries.designsystem.components.dialogs_TextFieldDialogWithError_Night_0_en",20224,], +["libraries.designsystem.components.dialogs_TextFieldDialog_Day_0_en","libraries.designsystem.components.dialogs_TextFieldDialog_Night_0_en",20224,], ["libraries.designsystem.components.list_TextFieldListItemEmpty_Text_field_List_item_-_empty_List_items_en","",0,], ["libraries.designsystem.components.list_TextFieldListItemTextFieldValue_Text_field_List_item_-_textfieldvalue_List_items_en","",0,], ["libraries.designsystem.components.list_TextFieldListItem_Text_field_List_item_-_text_List_items_en","",0,], @@ -1260,14 +1261,14 @@ export const screenshots = [ ["libraries.mediaviewer.impl.local.txt_TextFileContentView_Day_3_en","libraries.mediaviewer.impl.local.txt_TextFileContentView_Night_3_en",0,], ["libraries.textcomposer.components_TextFormatting_Day_0_en","libraries.textcomposer.components_TextFormatting_Night_0_en",0,], ["libraries.designsystem.theme.components_TextLight_Text_en","",0,], -["libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_en","",20217,], -["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_en","",20217,], -["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_en","",20217,], +["libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_en","",20224,], +["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_en","",20224,], +["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_en","",20224,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_0_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_1_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_1_en",0,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_2_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_2_en",0,], -["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_3_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_3_en",20217,], -["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20217,], +["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_3_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_3_en",20224,], +["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20224,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_5_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_5_en",0,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_6_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_6_en",0,], ["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_7_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_7_en",0,], @@ -1277,18 +1278,18 @@ export const screenshots = [ ["features.messages.impl.timeline.components.event_TimelineItemAudioView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemAudioView_Night_2_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemAudioView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemAudioView_Night_3_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemAudioView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemAudioView_Night_4_en",0,], -["features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_en","features.messages.impl.timeline.components_TimelineItemCallNotifyView_Night_0_en",20217,], +["features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_en","features.messages.impl.timeline.components_TimelineItemCallNotifyView_Night_0_en",20224,], ["features.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_Night_0_en",0,], ["features.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_Day_1_en","features.messages.impl.timeline.components.virtual_TimelineItemDaySeparatorView_Night_1_en",0,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_0_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_2_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_3_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_5_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_5_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_6_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_6_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_7_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_7_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_8_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_8_en",20217,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_0_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_2_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_3_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_5_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_5_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_6_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_6_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_7_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_7_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_8_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_8_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowDisambiguated_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowForDirectRoom_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowLongSenderName_en","",0,], @@ -1296,18 +1297,18 @@ export const screenshots = [ ["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_1_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_2_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_2_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_3_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_3_en",20217,], -["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20217,], +["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_3_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_3_en",20224,], +["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_5_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_5_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_6_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_6_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_7_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_7_en",20217,], -["features.messages.impl.timeline.components_TimelineItemEventRowUtd_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowUtd_Night_0_en",20217,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20217,], +["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_7_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_7_en",20224,], +["features.messages.impl.timeline.components_TimelineItemEventRowUtd_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowUtd_Night_0_en",20224,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Night_1_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Day_2_en","features.messages.impl.timeline.components_TimelineItemEventRowWithRR_Night_2_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_0_en",20217,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20217,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_0_en",20224,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_Night_0_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyOther_Night_1_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_0_en",0,], @@ -1316,40 +1317,40 @@ export const screenshots = [ ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_1_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_2_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_2_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_3_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_3_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_4_en",20217,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_4_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_5_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_5_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_6_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_6_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_7_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_7_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_8_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_8_en",20217,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_8_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_8_en",20224,], ["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_9_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_9_en",0,], ["features.messages.impl.timeline.components_TimelineItemEventRow_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRow_Night_0_en",0,], -["features.messages.impl.timeline.components_TimelineItemEventTimestampBelow_en","",20217,], +["features.messages.impl.timeline.components_TimelineItemEventTimestampBelow_en","",20224,], ["features.messages.impl.timeline.components.event_TimelineItemFileView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemFileView_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemFileView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemFileView_Night_1_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemFileView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemFileView_Night_2_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemFileView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemFileView_Night_3_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemFileView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemFileView_Night_4_en",0,], -["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Night_0_en",20217,], -["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Night_0_en",20217,], +["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Night_0_en",20224,], +["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Night_0_en",20224,], ["features.messages.impl.timeline.components.event_TimelineItemImageView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageView_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemImageView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemImageView_Night_1_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemImageView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemImageView_Night_2_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemImageView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemImageView_Night_3_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemInformativeView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemInformativeView_Night_0_en",0,], -["features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en",20217,], +["features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en",20224,], ["features.messages.impl.timeline.components.event_TimelineItemLocationView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemLocationView_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemLocationView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemLocationView_Night_1_en",0,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_0_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20217,], -["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20217,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_0_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20224,], +["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20224,], ["features.messages.impl.timeline.components_TimelineItemReactionsViewFew_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewFew_Night_0_en",0,], -["features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Night_0_en",20217,], -["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20217,], +["features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Night_0_en",20224,], +["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20224,], ["features.messages.impl.timeline.components_TimelineItemReactionsView_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsView_Night_0_en",0,], -["features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Night_0_en",20217,], +["features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Night_0_en",20224,], ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_0_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_0_en",0,], ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_1_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_1_en",0,], ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_2_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_2_en",0,], @@ -1358,8 +1359,8 @@ export const screenshots = [ ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_5_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_5_en",0,], ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_6_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_6_en",0,], ["features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Day_7_en","features.messages.impl.timeline.components.receipt_TimelineItemReadReceiptView_Night_7_en",0,], -["features.messages.impl.timeline.components.event_TimelineItemRedactedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemRedactedView_Night_0_en",20217,], -["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20217,], +["features.messages.impl.timeline.components.event_TimelineItemRedactedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemRedactedView_Night_0_en",20224,], +["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20224,], ["features.messages.impl.timeline.components_TimelineItemStateEventRow_Day_0_en","features.messages.impl.timeline.components_TimelineItemStateEventRow_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemStateView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemStateView_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemStickerView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemStickerView_Night_0_en",0,], @@ -1374,8 +1375,8 @@ export const screenshots = [ ["features.messages.impl.timeline.components.event_TimelineItemTextView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemTextView_Night_3_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemTextView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemTextView_Night_4_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemTextView_Day_5_en","features.messages.impl.timeline.components.event_TimelineItemTextView_Night_5_en",0,], -["features.messages.impl.timeline.components.event_TimelineItemUnknownView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemUnknownView_Night_0_en",20217,], -["features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Night_0_en",20217,], +["features.messages.impl.timeline.components.event_TimelineItemUnknownView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemUnknownView_Night_0_en",20224,], +["features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Night_0_en",20224,], ["features.messages.impl.timeline.components.event_TimelineItemVideoView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoView_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemVideoView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemVideoView_Night_1_en",0,], ["features.messages.impl.timeline.components.event_TimelineItemVideoView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemVideoView_Night_2_en",0,], @@ -1398,73 +1399,73 @@ export const screenshots = [ ["features.messages.impl.timeline.components.event_TimelineItemVoiceView_Day_9_en","features.messages.impl.timeline.components.event_TimelineItemVoiceView_Night_9_en",0,], ["features.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineLoadingMoreIndicator_Night_0_en",0,], ["features.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_Day_0_en","features.messages.impl.timeline.components.event_TimelineVideoWithCaptionRow_Night_0_en",0,], -["features.messages.impl.timeline_TimelineViewMessageShield_Day_0_en","features.messages.impl.timeline_TimelineViewMessageShield_Night_0_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20217,], +["features.messages.impl.timeline_TimelineViewMessageShield_Day_0_en","features.messages.impl.timeline_TimelineViewMessageShield_Night_0_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20224,], ["features.messages.impl.timeline_TimelineView_Day_10_en","features.messages.impl.timeline_TimelineView_Night_10_en",0,], -["features.messages.impl.timeline_TimelineView_Day_11_en","features.messages.impl.timeline_TimelineView_Night_11_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20217,], -["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20217,], +["features.messages.impl.timeline_TimelineView_Day_11_en","features.messages.impl.timeline_TimelineView_Night_11_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20224,], +["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20224,], ["features.messages.impl.timeline_TimelineView_Day_2_en","features.messages.impl.timeline_TimelineView_Night_2_en",0,], ["features.messages.impl.timeline_TimelineView_Day_3_en","features.messages.impl.timeline_TimelineView_Night_3_en",0,], -["features.messages.impl.timeline_TimelineView_Day_4_en","features.messages.impl.timeline_TimelineView_Night_4_en",20217,], +["features.messages.impl.timeline_TimelineView_Day_4_en","features.messages.impl.timeline_TimelineView_Night_4_en",20224,], ["features.messages.impl.timeline_TimelineView_Day_5_en","features.messages.impl.timeline_TimelineView_Night_5_en",0,], -["features.messages.impl.timeline_TimelineView_Day_6_en","features.messages.impl.timeline_TimelineView_Night_6_en",20217,], +["features.messages.impl.timeline_TimelineView_Day_6_en","features.messages.impl.timeline_TimelineView_Night_6_en",20224,], ["features.messages.impl.timeline_TimelineView_Day_7_en","features.messages.impl.timeline_TimelineView_Night_7_en",0,], -["features.messages.impl.timeline_TimelineView_Day_8_en","features.messages.impl.timeline_TimelineView_Night_8_en",20217,], +["features.messages.impl.timeline_TimelineView_Day_8_en","features.messages.impl.timeline_TimelineView_Night_8_en",20224,], ["features.messages.impl.timeline_TimelineView_Day_9_en","features.messages.impl.timeline_TimelineView_Night_9_en",0,], ["libraries.designsystem.theme.components_TopAppBar_App_Bars_en","",0,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_0_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_0_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20217,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20217,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_0_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_0_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20224,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20224,], ["features.messages.impl.typing_TypingNotificationView_Day_0_en","features.messages.impl.typing_TypingNotificationView_Night_0_en",0,], -["features.messages.impl.typing_TypingNotificationView_Day_1_en","features.messages.impl.typing_TypingNotificationView_Night_1_en",20217,], -["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20217,], -["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20217,], -["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20217,], -["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20217,], -["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20217,], +["features.messages.impl.typing_TypingNotificationView_Day_1_en","features.messages.impl.typing_TypingNotificationView_Night_1_en",20224,], +["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20224,], +["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20224,], +["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20224,], +["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20224,], +["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20224,], ["features.messages.impl.typing_TypingNotificationView_Day_7_en","features.messages.impl.typing_TypingNotificationView_Night_7_en",0,], ["features.messages.impl.typing_TypingNotificationView_Day_8_en","features.messages.impl.typing_TypingNotificationView_Night_8_en",0,], ["libraries.designsystem.atomic.atoms_UnreadIndicatorAtom_Day_0_en","libraries.designsystem.atomic.atoms_UnreadIndicatorAtom_Night_0_en",0,], -["libraries.matrix.ui.components_UnresolvedUserRow_en","",20217,], +["libraries.matrix.ui.components_UnresolvedUserRow_en","",20224,], ["libraries.matrix.ui.components_UnsavedAvatar_Day_0_en","libraries.matrix.ui.components_UnsavedAvatar_Night_0_en",0,], ["libraries.designsystem.components.avatar_UserAvatarColors_Day_0_en","libraries.designsystem.components.avatar_UserAvatarColors_Night_0_en",0,], -["features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en",20217,], -["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20217,], -["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20217,], -["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20217,], +["features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en",20224,], +["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20224,], +["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20224,], +["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20224,], ["features.createroom.impl.components_UserListView_Day_3_en","features.createroom.impl.components_UserListView_Night_3_en",0,], ["features.createroom.impl.components_UserListView_Day_4_en","features.createroom.impl.components_UserListView_Night_4_en",0,], ["features.createroom.impl.components_UserListView_Day_5_en","features.createroom.impl.components_UserListView_Night_5_en",0,], ["features.createroom.impl.components_UserListView_Day_6_en","features.createroom.impl.components_UserListView_Night_6_en",0,], -["features.createroom.impl.components_UserListView_Day_7_en","features.createroom.impl.components_UserListView_Night_7_en",20217,], +["features.createroom.impl.components_UserListView_Day_7_en","features.createroom.impl.components_UserListView_Night_7_en",20224,], ["features.createroom.impl.components_UserListView_Day_8_en","features.createroom.impl.components_UserListView_Night_8_en",0,], -["features.createroom.impl.components_UserListView_Day_9_en","features.createroom.impl.components_UserListView_Night_9_en",20217,], +["features.createroom.impl.components_UserListView_Day_9_en","features.createroom.impl.components_UserListView_Night_9_en",20224,], ["features.preferences.impl.user_UserPreferences_Day_0_en","features.preferences.impl.user_UserPreferences_Night_0_en",0,], ["features.preferences.impl.user_UserPreferences_Day_1_en","features.preferences.impl.user_UserPreferences_Night_1_en",0,], ["features.preferences.impl.user_UserPreferences_Day_2_en","features.preferences.impl.user_UserPreferences_Night_2_en",0,], -["features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en","features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en",20217,], -["features.userprofile.shared_UserProfileHeaderSection_Day_0_en","features.userprofile.shared_UserProfileHeaderSection_Night_0_en",20217,], -["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20217,], -["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20217,], -["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20217,], -["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20217,], -["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20217,], -["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20217,], -["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20217,], -["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20217,], -["features.userprofile.shared_UserProfileView_Day_8_en","features.userprofile.shared_UserProfileView_Night_8_en",20217,], -["features.userprofile.shared_UserProfileView_Day_9_en","features.userprofile.shared_UserProfileView_Night_9_en",20217,], +["features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Day_0_en","features.userprofile.shared_UserProfileHeaderSectionWithVerificationViolation_Night_0_en",20224,], +["features.userprofile.shared_UserProfileHeaderSection_Day_0_en","features.userprofile.shared_UserProfileHeaderSection_Night_0_en",20224,], +["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20224,], +["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20224,], +["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20224,], +["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20224,], +["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20224,], +["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20224,], +["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20224,], +["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20224,], +["features.userprofile.shared_UserProfileView_Day_8_en","features.userprofile.shared_UserProfileView_Night_8_en",20224,], +["features.userprofile.shared_UserProfileView_Day_9_en","features.userprofile.shared_UserProfileView_Night_9_en",20224,], ["features.verifysession.impl.ui_VerificationUserProfileContent_Day_0_en","features.verifysession.impl.ui_VerificationUserProfileContent_Night_0_en",0,], ["libraries.designsystem.ruler_VerticalRuler_Day_0_en","libraries.designsystem.ruler_VerticalRuler_Night_0_en",0,], ["libraries.mediaviewer.impl.gallery.ui_VideoItemView_Day_0_en","libraries.mediaviewer.impl.gallery.ui_VideoItemView_Night_0_en",0,], @@ -1472,7 +1473,7 @@ export const screenshots = [ ["features.viewfolder.impl.file_ViewFileView_Day_0_en","features.viewfolder.impl.file_ViewFileView_Night_0_en",0,], ["features.viewfolder.impl.file_ViewFileView_Day_1_en","features.viewfolder.impl.file_ViewFileView_Night_1_en",0,], ["features.viewfolder.impl.file_ViewFileView_Day_2_en","features.viewfolder.impl.file_ViewFileView_Night_2_en",0,], -["features.viewfolder.impl.file_ViewFileView_Day_3_en","features.viewfolder.impl.file_ViewFileView_Night_3_en",20217,], +["features.viewfolder.impl.file_ViewFileView_Day_3_en","features.viewfolder.impl.file_ViewFileView_Night_3_en",20224,], ["features.viewfolder.impl.file_ViewFileView_Day_4_en","features.viewfolder.impl.file_ViewFileView_Night_4_en",0,], ["features.viewfolder.impl.file_ViewFileView_Day_5_en","features.viewfolder.impl.file_ViewFileView_Night_5_en",0,], ["features.viewfolder.impl.folder_ViewFolderView_Day_0_en","features.viewfolder.impl.folder_ViewFolderView_Night_0_en",0,], @@ -1491,6 +1492,6 @@ export const screenshots = [ ["libraries.textcomposer.components_VoiceMessageRecording_Day_0_en","libraries.textcomposer.components_VoiceMessageRecording_Night_0_en",0,], ["libraries.textcomposer.components_VoiceMessage_Day_0_en","libraries.textcomposer.components_VoiceMessage_Night_0_en",0,], ["libraries.designsystem.components.media_WaveformPlaybackView_Day_0_en","libraries.designsystem.components.media_WaveformPlaybackView_Night_0_en",0,], -["features.ftue.impl.welcome_WelcomeView_Day_0_en","features.ftue.impl.welcome_WelcomeView_Night_0_en",20217,], +["features.ftue.impl.welcome_WelcomeView_Day_0_en","features.ftue.impl.welcome_WelcomeView_Night_0_en",20224,], ["libraries.designsystem.ruler_WithRulers_Day_0_en","libraries.designsystem.ruler_WithRulers_Night_0_en",0,], ]; From 056fbcb0e74834d7173ae4360ecaeef718c96b10 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 19 May 2025 22:44:23 +0200 Subject: [PATCH 17/33] Trigger pipeline build when a release tag is pushed (#4741) --- .github/workflows/post-release.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/post-release.yml diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml new file mode 100644 index 0000000000..56d40d0cf6 --- /dev/null +++ b/.github/workflows/post-release.yml @@ -0,0 +1,28 @@ +name: Post-release + +on: + push: + tags: + - 'v*' + +jobs: + post-release: + runs-on: ubuntu-latest + # Skip in forks + if: github.repository == 'element-hq/element-x-android' + + steps: + - name: Trigger pipeline + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.ENTERPRISE_ACTIONS_TOKEN }} + script: | + const tag = context.ref.replace('refs/tags/', ''); + const inputs = { git_tag: tag }; + await github.rest.actions.createWorkflowDispatch({ + owner: 'element-hq', + repo: 'element-enterprise', + workflow_id: 'pipeline-android.yml', + ref: 'main', + inputs: inputs + }); From 6995e625484ac487dde43d9ec906eab556e052fb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 May 2025 08:54:23 +0200 Subject: [PATCH 18/33] Merge on boarding module to login module (#4746) * Move onboarding code to the login module. * Remove OnBoardingEntryPoint, move the flow to LoginFlowNode * Update screenshots --------- Co-authored-by: ElementBot --- .../android/appnav/NotLoggedInFlowNode.kt | 34 ++-------- .../features/login/api/LoginEntryPoint.kt | 18 ++--- features/login/impl/build.gradle.kts | 3 + .../login/impl/DefaultLoginEntryPoint.kt | 4 +- .../features/login/impl/LoginFlowNode.kt | 67 +++++++++++++------ .../login/impl/onboarding}/OnBoardingNode.kt | 18 +++-- .../impl/onboarding}/OnBoardingPresenter.kt | 2 +- .../login/impl/onboarding}/OnBoardingState.kt | 2 +- .../onboarding}/OnBoardingStateProvider.kt | 2 +- .../login/impl/onboarding}/OnBoardingView.kt | 3 +- .../src/main/res/values-be/translations.xml | 6 ++ .../src/main/res/values-bg/translations.xml | 6 ++ .../src/main/res/values-cs/translations.xml | 7 ++ .../src/main/res/values-cy/translations.xml | 7 ++ .../src/main/res/values-de/translations.xml | 6 ++ .../src/main/res/values-el/translations.xml | 6 ++ .../src/main/res/values-es/translations.xml | 6 ++ .../src/main/res/values-et/translations.xml | 7 ++ .../src/main/res/values-eu/translations.xml | 6 ++ .../src/main/res/values-fa/translations.xml | 6 ++ .../src/main/res/values-fi/translations.xml | 10 +++ .../src/main/res/values-fr/translations.xml | 7 ++ .../src/main/res/values-hu/translations.xml | 7 ++ .../src/main/res/values-in/translations.xml | 6 ++ .../src/main/res/values-it/translations.xml | 6 ++ .../src/main/res/values-ka/translations.xml | 6 ++ .../src/main/res/values-lt/translations.xml | 5 ++ .../src/main/res/values-nb/translations.xml | 7 ++ .../src/main/res/values-nl/translations.xml | 6 ++ .../src/main/res/values-pl/translations.xml | 7 ++ .../main/res/values-pt-rBR/translations.xml | 6 ++ .../src/main/res/values-pt/translations.xml | 6 ++ .../src/main/res/values-ro/translations.xml | 6 ++ .../src/main/res/values-ru/translations.xml | 6 ++ .../src/main/res/values-sk/translations.xml | 7 ++ .../src/main/res/values-sv/translations.xml | 6 ++ .../src/main/res/values-tr/translations.xml | 6 ++ .../src/main/res/values-uk/translations.xml | 7 ++ .../src/main/res/values-uz/translations.xml | 6 ++ .../main/res/values-zh-rTW/translations.xml | 6 ++ .../src/main/res/values-zh/translations.xml | 6 ++ .../impl/src/main/res/values/localazy.xml | 7 ++ .../onboarding}/OnBoardingPresenterTest.kt | 2 +- .../impl/onboarding}/OnboardingViewTest.kt | 3 +- features/onboarding/api/build.gradle.kts | 17 ----- .../onboarding/api/OnBoardingEntryPoint.kt | 29 -------- features/onboarding/impl/build.gradle.kts | 52 -------------- .../impl/DefaultOnBoardingEntryPoint.kt | 35 ---------- .../src/main/res/values-be/translations.xml | 9 --- .../src/main/res/values-bg/translations.xml | 9 --- .../src/main/res/values-cs/translations.xml | 10 --- .../src/main/res/values-cy/translations.xml | 10 --- .../src/main/res/values-de/translations.xml | 9 --- .../src/main/res/values-el/translations.xml | 9 --- .../src/main/res/values-es/translations.xml | 9 --- .../src/main/res/values-et/translations.xml | 10 --- .../src/main/res/values-eu/translations.xml | 9 --- .../src/main/res/values-fa/translations.xml | 9 --- .../src/main/res/values-fi/translations.xml | 9 --- .../src/main/res/values-fr/translations.xml | 10 --- .../src/main/res/values-hu/translations.xml | 10 --- .../src/main/res/values-in/translations.xml | 9 --- .../src/main/res/values-it/translations.xml | 9 --- .../src/main/res/values-ka/translations.xml | 9 --- .../src/main/res/values-lt/translations.xml | 8 --- .../src/main/res/values-nb/translations.xml | 10 --- .../src/main/res/values-nl/translations.xml | 9 --- .../src/main/res/values-pl/translations.xml | 10 --- .../main/res/values-pt-rBR/translations.xml | 9 --- .../src/main/res/values-pt/translations.xml | 9 --- .../src/main/res/values-ro/translations.xml | 9 --- .../src/main/res/values-ru/translations.xml | 9 --- .../src/main/res/values-sk/translations.xml | 10 --- .../src/main/res/values-sv/translations.xml | 9 --- .../src/main/res/values-tr/translations.xml | 9 --- .../src/main/res/values-uk/translations.xml | 9 --- .../src/main/res/values-uz/translations.xml | 9 --- .../main/res/values-zh-rTW/translations.xml | 9 --- .../src/main/res/values-zh/translations.xml | 9 --- .../impl/src/main/res/values/localazy.xml | 10 --- ...pl.onboarding_OnBoardingView_Day_0_en.png} | 0 ...pl.onboarding_OnBoardingView_Day_1_en.png} | 0 ...pl.onboarding_OnBoardingView_Day_2_en.png} | 0 ...pl.onboarding_OnBoardingView_Day_3_en.png} | 0 ...pl.onboarding_OnBoardingView_Day_4_en.png} | 0 ....onboarding_OnBoardingView_Night_0_en.png} | 0 ....onboarding_OnBoardingView_Night_1_en.png} | 0 ....onboarding_OnBoardingView_Night_2_en.png} | 0 ....onboarding_OnBoardingView_Night_3_en.png} | 0 ....onboarding_OnBoardingView_Night_4_en.png} | 0 tools/localazy/config.json | 7 +- 91 files changed, 287 insertions(+), 512 deletions(-) rename features/{onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl => login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingNode.kt (76%) rename features/{onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl => login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingPresenter.kt (96%) rename features/{onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl => login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingState.kt (86%) rename features/{onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl => login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingStateProvider.kt (95%) rename features/{onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl => login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingView.kt (98%) rename features/{onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl => login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding}/OnBoardingPresenterTest.kt (97%) rename features/{onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl => login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding}/OnboardingViewTest.kt (97%) delete mode 100644 features/onboarding/api/build.gradle.kts delete mode 100644 features/onboarding/api/src/main/kotlin/io/element/android/features/onboarding/api/OnBoardingEntryPoint.kt delete mode 100644 features/onboarding/impl/build.gradle.kts delete mode 100644 features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/DefaultOnBoardingEntryPoint.kt delete mode 100644 features/onboarding/impl/src/main/res/values-be/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-bg/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-cs/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-cy/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-de/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-el/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-es/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-et/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-eu/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-fa/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-fi/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-fr/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-hu/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-in/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-it/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-ka/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-lt/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-nb/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-nl/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-pl/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-pt-rBR/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-pt/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-ro/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-ru/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-sk/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-sv/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-tr/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-uk/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-uz/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-zh-rTW/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values-zh/translations.xml delete mode 100644 features/onboarding/impl/src/main/res/values/localazy.xml rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Day_0_en.png => features.login.impl.onboarding_OnBoardingView_Day_0_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Day_1_en.png => features.login.impl.onboarding_OnBoardingView_Day_1_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Day_2_en.png => features.login.impl.onboarding_OnBoardingView_Day_2_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Day_3_en.png => features.login.impl.onboarding_OnBoardingView_Day_3_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Day_4_en.png => features.login.impl.onboarding_OnBoardingView_Day_4_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Night_0_en.png => features.login.impl.onboarding_OnBoardingView_Night_0_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Night_1_en.png => features.login.impl.onboarding_OnBoardingView_Night_1_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Night_2_en.png => features.login.impl.onboarding_OnBoardingView_Night_2_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Night_3_en.png => features.login.impl.onboarding_OnBoardingView_Night_3_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.onboarding.impl_OnBoardingView_Night_4_en.png => features.login.impl.onboarding_OnBoardingView_Night_4_en.png} (100%) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt index 8842396fd0..bcd1c5a61e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt @@ -20,13 +20,10 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import com.bumble.appyx.navmodel.backstack.operation.push import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.api.LoginEntryPoint -import io.element.android.features.login.api.LoginFlowType -import io.element.android.features.onboarding.api.OnBoardingEntryPoint import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.designsystem.utils.ForceOrientationInMobileDevices @@ -39,12 +36,11 @@ import kotlinx.parcelize.Parcelize class NotLoggedInFlowNode @AssistedInject constructor( @Assisted buildContext: BuildContext, @Assisted plugins: List, - private val onBoardingEntryPoint: OnBoardingEntryPoint, private val loginEntryPoint: LoginEntryPoint, private val notLoggedInImageLoaderFactory: NotLoggedInImageLoaderFactory, ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.OnBoarding, + initialElement = NavTarget.Root, savedStateMap = buildContext.savedStateMap ), buildContext = buildContext, @@ -65,42 +61,22 @@ class NotLoggedInFlowNode @AssistedInject constructor( sealed interface NavTarget : Parcelable { @Parcelize - data object OnBoarding : NavTarget - - @Parcelize - data class LoginFlow(val type: LoginFlowType) : NavTarget + data object Root : NavTarget } override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { - NavTarget.OnBoarding -> { - val callback = object : OnBoardingEntryPoint.Callback { - override fun onSignUp() { - backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_UP)) - } - - override fun onSignIn() { - backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_IN_MANUAL)) - } - - override fun onSignInWithQrCode() { - backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_IN_QR_CODE)) - } - + NavTarget.Root -> { + val callback = object : LoginEntryPoint.Callback { override fun onReportProblem() { plugins().forEach { it.onOpenBugReport() } } } - onBoardingEntryPoint + loginEntryPoint .nodeBuilder(this, buildContext) .callback(callback) .build() } - is NavTarget.LoginFlow -> { - loginEntryPoint.nodeBuilder(this, buildContext) - .params(LoginEntryPoint.Params(flowType = navTarget.type)) - .build() - } } } diff --git a/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginEntryPoint.kt b/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginEntryPoint.kt index ead74221c1..9914eb1eee 100644 --- a/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginEntryPoint.kt +++ b/features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginEntryPoint.kt @@ -7,28 +7,20 @@ package io.element.android.features.login.api -import android.os.Parcelable import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin import io.element.android.libraries.architecture.FeatureEntryPoint -import kotlinx.parcelize.Parcelize interface LoginEntryPoint : FeatureEntryPoint { - data class Params( - val flowType: LoginFlowType - ) + interface Callback : Plugin { + fun onReportProblem() + } fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder interface NodeBuilder { - fun params(params: Params): NodeBuilder + fun callback(callback: Callback): NodeBuilder fun build(): Node } } - -@Parcelize -enum class LoginFlowType : Parcelable { - SIGN_IN_MANUAL, - SIGN_IN_QR_CODE, - SIGN_UP -} diff --git a/features/login/impl/build.gradle.kts b/features/login/impl/build.gradle.kts index 02c38e2a57..31d3141920 100644 --- a/features/login/impl/build.gradle.kts +++ b/features/login/impl/build.gradle.kts @@ -29,9 +29,11 @@ setupAnvil(componentMergingStrategy = ComponentMergingStrategy.KSP) dependencies { implementation(projects.appconfig) implementation(projects.features.enterprise.api) + implementation(projects.features.rageshake.api) implementation(projects.libraries.core) implementation(projects.libraries.androidutils) implementation(projects.libraries.architecture) + implementation(projects.libraries.featureflag.api) implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrix.api) implementation(projects.libraries.network) @@ -57,6 +59,7 @@ dependencies { testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.features.enterprise.test) + testImplementation(projects.libraries.featureflag.test) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.oidc.impl) testImplementation(projects.libraries.permissions.test) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt index 902cf4ca33..cec04c9cb7 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt @@ -22,8 +22,8 @@ class DefaultLoginEntryPoint @Inject constructor() : LoginEntryPoint { val plugins = ArrayList() return object : LoginEntryPoint.NodeBuilder { - override fun params(params: LoginEntryPoint.Params): LoginEntryPoint.NodeBuilder { - plugins += LoginFlowNode.Inputs(flowType = params.flowType) + override fun callback(callback: LoginEntryPoint.Callback): LoginEntryPoint.NodeBuilder { + plugins += callback return this } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt index 0f2328656e..382180c856 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt @@ -18,6 +18,7 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.singleTop @@ -25,8 +26,9 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme -import io.element.android.features.login.api.LoginFlowType +import io.element.android.features.login.api.LoginEntryPoint import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource +import io.element.android.features.login.impl.onboarding.OnBoardingNode import io.element.android.features.login.impl.qrcode.QrCodeLoginFlowNode import io.element.android.features.login.impl.screens.changeaccountprovider.ChangeAccountProviderNode import io.element.android.features.login.impl.screens.confirmaccountprovider.ConfirmAccountProviderNode @@ -35,9 +37,7 @@ import io.element.android.features.login.impl.screens.loginpassword.LoginPasswor import io.element.android.features.login.impl.screens.searchaccountprovider.SearchAccountProviderNode import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode -import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails import io.element.android.libraries.oidc.api.OidcAction @@ -57,7 +57,7 @@ class LoginFlowNode @AssistedInject constructor( private val oidcEntryPoint: OidcEntryPoint, ) : BaseFlowNode( backstack = BackStack( - initialElement = NavTarget.Root, + initialElement = NavTarget.OnBoarding, savedStateMap = buildContext.savedStateMap, ), buildContext = buildContext, @@ -66,12 +66,6 @@ class LoginFlowNode @AssistedInject constructor( private var activity: Activity? = null private var darkTheme: Boolean = false - data class Inputs( - val flowType: LoginFlowType, - ) : NodeInputs - - private val inputs: Inputs = inputs() - private var customChromeTabStarted = false override fun onBuilt() { @@ -96,10 +90,15 @@ class LoginFlowNode @AssistedInject constructor( sealed interface NavTarget : Parcelable { @Parcelize - data object Root : NavTarget + data object OnBoarding : NavTarget @Parcelize - data object ConfirmAccountProvider : NavTarget + data object QrCode : NavTarget + + @Parcelize + data class ConfirmAccountProvider( + val isAccountCreation: Boolean, + ) : NavTarget @Parcelize data object ChangeAccountProvider : NavTarget @@ -119,16 +118,36 @@ class LoginFlowNode @AssistedInject constructor( override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { - NavTarget.Root -> { - if (inputs.flowType == LoginFlowType.SIGN_IN_QR_CODE) { - createNode(buildContext) - } else { - resolve(NavTarget.ConfirmAccountProvider, buildContext) + NavTarget.OnBoarding -> { + val callback = object : OnBoardingNode.Callback { + override fun onSignUp() { + backstack.push( + NavTarget.ConfirmAccountProvider(isAccountCreation = true) + ) + } + + override fun onSignIn() { + backstack.push( + NavTarget.ConfirmAccountProvider(isAccountCreation = false) + ) + } + + override fun onSignInWithQrCode() { + backstack.push(NavTarget.QrCode) + } + + override fun onReportProblem() { + plugins().forEach { it.onReportProblem() } + } } + createNode(buildContext, listOf(callback)) } - NavTarget.ConfirmAccountProvider -> { + NavTarget.QrCode -> { + createNode(buildContext) + } + is NavTarget.ConfirmAccountProvider -> { val inputs = ConfirmAccountProviderNode.Inputs( - isAccountCreation = inputs.flowType == LoginFlowType.SIGN_UP, + isAccountCreation = navTarget.isAccountCreation, ) val callback = object : ConfirmAccountProviderNode.Callback { override fun onOidcDetails(oidcDetails: OidcDetails) { @@ -162,7 +181,10 @@ class LoginFlowNode @AssistedInject constructor( val callback = object : ChangeAccountProviderNode.Callback { override fun onDone() { // Go back to the Account Provider screen - backstack.singleTop(NavTarget.ConfirmAccountProvider) + val confirmAccountProvider = backstack.elements.value.firstOrNull { + it.key.navTarget is NavTarget.ConfirmAccountProvider + }?.key?.navTarget ?: NavTarget.ConfirmAccountProvider(isAccountCreation = false) + backstack.singleTop(confirmAccountProvider) } override fun onOtherClick() { @@ -176,7 +198,10 @@ class LoginFlowNode @AssistedInject constructor( val callback = object : SearchAccountProviderNode.Callback { override fun onDone() { // Go back to the Account Provider screen - backstack.singleTop(NavTarget.ConfirmAccountProvider) + val confirmAccountProvider = backstack.elements.value.firstOrNull { + it.key.navTarget is NavTarget.ConfirmAccountProvider + }?.key?.navTarget ?: NavTarget.ConfirmAccountProvider(isAccountCreation = false) + backstack.singleTop(confirmAccountProvider) } } diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingNode.kt similarity index 76% rename from features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingNode.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingNode.kt index f26a6fdd78..0f566ea1d3 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingNode.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -16,7 +16,6 @@ import com.bumble.appyx.core.plugin.plugins import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.anvilannotations.ContributesNode -import io.element.android.features.onboarding.api.OnBoardingEntryPoint import io.element.android.libraries.di.AppScope @ContributesNode(AppScope::class) @@ -28,20 +27,27 @@ class OnBoardingNode @AssistedInject constructor( buildContext = buildContext, plugins = plugins ) { + interface Callback : Plugin { + fun onSignUp() + fun onSignIn() + fun onSignInWithQrCode() + fun onReportProblem() + } + private fun onSignIn() { - plugins().forEach { it.onSignIn() } + plugins().forEach { it.onSignIn() } } private fun onSignUp() { - plugins().forEach { it.onSignUp() } + plugins().forEach { it.onSignUp() } } private fun onSignInWithQrCode() { - plugins().forEach { it.onSignInWithQrCode() } + plugins().forEach { it.onSignInWithQrCode() } } private fun onReportProblem() { - plugins().forEach { it.onReportProblem() } + plugins().forEach { it.onReportProblem() } } @Composable diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenter.kt similarity index 96% rename from features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenter.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenter.kt index 481ad6edc6..3d4029990e 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenter.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingState.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingState.kt similarity index 86% rename from features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingState.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingState.kt index 3a5afb741c..f36566398a 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingState.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingState.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding data class OnBoardingState( val productionApplicationName: String, diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingStateProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingStateProvider.kt similarity index 95% rename from features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingStateProvider.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingStateProvider.kt index d65b6aa2bf..26135ad353 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingStateProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingStateProvider.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import androidx.compose.ui.tooling.preview.PreviewParameterProvider diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingView.kt similarity index 98% rename from features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingView.kt index 44ab2d84a5..bfe1348764 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingView.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -26,6 +26,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.features.login.impl.R import io.element.android.libraries.designsystem.atomic.atoms.ElementLogoAtom import io.element.android.libraries.designsystem.atomic.atoms.ElementLogoAtomSize import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule diff --git a/features/login/impl/src/main/res/values-be/translations.xml b/features/login/impl/src/main/res/values-be/translations.xml index 1100b7dc08..6fde5f6622 100644 --- a/features/login/impl/src/main/res/values-be/translations.xml +++ b/features/login/impl/src/main/res/values-be/translations.xml @@ -29,6 +29,12 @@ "Matrix - гэта адкрытая сетка для бяспечнай, дэцэнтралізаванай сувязі." "Сардэчна запрашаем!" "Увайсці ў %1$s" + "Увайсці ўручную" + "Увайсці з QR-кодам" + "Стварыць уліковы запіс" + "Сардэчна запрашаем у самы хуткі %1$s. Перавага ў хуткасці і прастаце." + "Сардэчна запрашаем у %1$s. Зараджаны, для хуткасці і прастаты." + "Будзьце ў сваім element" "Ўсталяванне бяспечнага злучэння" "Не атрымалася ўсталяваць бяспечнае злучэнне з новай прыладай. Існуючыя прылады па-ранейшаму ў бяспецы, і вам не трэба турбавацца пра іх." "Што зараз?" diff --git a/features/login/impl/src/main/res/values-bg/translations.xml b/features/login/impl/src/main/res/values-bg/translations.xml index fc512422e9..808dbfade9 100644 --- a/features/login/impl/src/main/res/values-bg/translations.xml +++ b/features/login/impl/src/main/res/values-bg/translations.xml @@ -19,6 +19,12 @@ "Matrix е отворена мрежа за сигурна, децентрализирана комуникация." "Добре дошли отново!" "Влизане в %1$s" + "Влизане ръчно" + "Влизане с QR код" + "Създаване на акаунт" + "Добре дошли в най-бързия %1$s досега. Супер зареден за скорост и простота." + "Добре дошли в %1$s. Супер зареден за скорост и простота." + "Бъдете в стихията си" "Повторен опит" "Промяна на доставчика на акаунт" "Matrix е отворена мрежа за сигурна, децентрализирана комуникация." diff --git a/features/login/impl/src/main/res/values-cs/translations.xml b/features/login/impl/src/main/res/values-cs/translations.xml index c0b2e69c79..77bc398fef 100644 --- a/features/login/impl/src/main/res/values-cs/translations.xml +++ b/features/login/impl/src/main/res/values-cs/translations.xml @@ -34,6 +34,13 @@ "Matrix je otevřená síť pro bezpečnou a decentralizovanou komunikaci." "Vítejte zpět!" "Přihlaste se k %1$s" + "Ruční přihlášení" + "Přihlásit se do %1$s" + "Přihlásit se pomocí QR kódu" + "Vytvořit účet" + "Vítejte v dosud nejrychlejším %1$su. Vylepšený pro rychlost a jednoduchost." + "Vítejte v %1$su. Vylepšený, pro rychlost a jednoduchost." + "Buďte ve svém živlu" "Navazování zabezpečeného spojení" "K novému zařízení se nepodařilo navázat bezpečné připojení. Vaše stávající zařízení jsou stále v bezpečí a nemusíte se o ně obávat." "Co teď?" diff --git a/features/login/impl/src/main/res/values-cy/translations.xml b/features/login/impl/src/main/res/values-cy/translations.xml index 7751ea1270..462a7c640c 100644 --- a/features/login/impl/src/main/res/values-cy/translations.xml +++ b/features/login/impl/src/main/res/values-cy/translations.xml @@ -34,6 +34,13 @@ "Mae Matrix yn rhwydwaith agored ar gyfer cyfathrebu diogel, datganoledig." "Croeso nôl!" "Mewngofnodi i %1$s" + "Mewngofnodwch â llaw" + "Mewngofnodi i %1$s" + "Mewngofnodwch gyda chod QR" + "Creu cyfrif" + "Croeso i\'r %1$s cyflymaf erioed. Yn nodedig am gyflymder a symlrwydd." + "Croeso i %1$s. Yn nodedig ar gyfer cyflymder a symlrwydd." + "Byddwch yn eich elfen" "Yn creu cysylltiad diogel" "Nid oedd modd gwneud cysylltiad diogel â\'r ddyfais newydd. Mae eich dyfeisiau presennol yn dal yn ddiogel a does dim angen i chi boeni amdanyn nhw." "Beth nawr?" diff --git a/features/login/impl/src/main/res/values-de/translations.xml b/features/login/impl/src/main/res/values-de/translations.xml index fdaa1812f7..73a52ee0db 100644 --- a/features/login/impl/src/main/res/values-de/translations.xml +++ b/features/login/impl/src/main/res/values-de/translations.xml @@ -32,6 +32,12 @@ "Matrix ist ein offenes Netzwerk für eine sichere, dezentrale Kommunikation." "Willkommen zurück!" "Anmelden bei %1$s" + "Manuell anmelden" + "Mit QR-Code anmelden" + "Konto erstellen" + "Willkommen beim schnellsten %1$s aller Zeiten. Optimiert für Geschwindigkeit und Einfachheit." + "Willkommen zu %1$s. Aufgeladen, für Geschwindigkeit und Einfachheit." + "Sei in Deinem Element" "Sichere Verbindung aufbauen" "Es konnte keine sichere Verbindung zu dem neuen Gerät hergestellt werden." "Und jetzt?" diff --git a/features/login/impl/src/main/res/values-el/translations.xml b/features/login/impl/src/main/res/values-el/translations.xml index 505e1f43d5..742c86ad73 100644 --- a/features/login/impl/src/main/res/values-el/translations.xml +++ b/features/login/impl/src/main/res/values-el/translations.xml @@ -29,6 +29,12 @@ "Το Matrix είναι ένα ανοιχτό δίκτυο για ασφαλή, αποκεντρωμένη επικοινωνία." "Καλωσόρισες ξανά!" "Συνδέσου στο %1$s" + "Σύνδεση χειροκίνητα" + "Συνδέσου με κωδικό QR" + "Δημιουργία λογαριασμού" + "Καλώς ήλθατε στο γρηγορότερο %1$s όλων των εποχών. Υπερτροφοδοτούμενο με ταχύτητα και απλότητα." + "Καλώς ήρθες στο %1$s. Υπερφορτισμένο, για ταχύτητα και απλότητα." + "Μείνε στο element σου" "Εγκαθίδρυση ασφαλούς σύνδεσης" "Δεν ήταν δυνατή η πραγματοποίηση ασφαλούς σύνδεσης στη νέα συσκευή. Οι υπάρχουσες συσκευές σας εξακολουθούν να είναι ασφαλείς και δεν χρειάζεται να ανησυχείς για αυτές." "Τί είναι πάλι;" diff --git a/features/login/impl/src/main/res/values-es/translations.xml b/features/login/impl/src/main/res/values-es/translations.xml index 1e4d4617b5..390f701b0a 100644 --- a/features/login/impl/src/main/res/values-es/translations.xml +++ b/features/login/impl/src/main/res/values-es/translations.xml @@ -29,6 +29,12 @@ "Matrix es una red abierta para una comunicación segura y descentralizada." "¡Hola de nuevo!" "Iniciar sesión en %1$s" + "Iniciar sesión manualmente" + "Iniciar sesión con un código QR" + "Crear cuenta" + "Bienvenido al %1$s más rápido de todos los tiempos. Diseñado para la velocidad y la simplicidad." + "Bienvenido a %1$s. Vitaminado, para mayor rapidez y sencillez." + "Siéntete en tu Elemento" "Estableciendo una conexión segura" "No se pudo establecer una conexión segura con el nuevo dispositivo. Tus dispositivos actuales siguen siendo seguros y no tienes que preocuparte por ellos." "¿Y ahora qué?" diff --git a/features/login/impl/src/main/res/values-et/translations.xml b/features/login/impl/src/main/res/values-et/translations.xml index 62d0e64c91..4b28c1483f 100644 --- a/features/login/impl/src/main/res/values-et/translations.xml +++ b/features/login/impl/src/main/res/values-et/translations.xml @@ -34,6 +34,13 @@ "Matrix on avatud võrk turvalise ja hajutatud suhtluse jaoks." "Tere tulemast tagasi!" "Logi sisse serverisse %1$s" + "Logi sisse käsitsi" + "Logi sisse teenusesse %1$s" + "Logi sisse QR-koodi alusel" + "Loo kasutajakonto" + "Läbi aegade kiireim ja mugavaim %1$s." + "Tere tulemast kasutama kiiret ja lihtsat suhtlusrakendust %1$s." + "Ole oma elemendis" "Loome turvalist ühendust" "Turvalise ühenduse loomine uue seadmega ei õnnestunud. Sinu olemasolevad seadmed on jätkuvalt turvatud ja sa ei pea nende pärast muretsema." "Mida järgmiseks teeme?" diff --git a/features/login/impl/src/main/res/values-eu/translations.xml b/features/login/impl/src/main/res/values-eu/translations.xml index aad7020ab8..25f11458bf 100644 --- a/features/login/impl/src/main/res/values-eu/translations.xml +++ b/features/login/impl/src/main/res/values-eu/translations.xml @@ -20,6 +20,12 @@ "Matrix komunikazio seguru eta deszentralizaturako sare irekia da." "Ongi etorri!" "Hasi saioa %1$s(e)n" + "Hasi saioa eskuz" + "Hasi saioa QR kodearekin" + "Sortu kontua" + "Ongi etorri inoizko %1$s azkarrenera. Abiaduraz eta sinpletasunaz gainkargatua." + "Ongi etorri %1$s-ra. Abiaduraz eta sinpletasunez gainezka." + "Egon zure saltsan" "Konexio segurua ezartzen" "Ezin izan da konexio segururik ezarri gailu berriarekin. Lehendik dauden gailuak seguru daude oraindik ere eta ez duzu haietaz kezkatu beharrik." "Orain zer?" diff --git a/features/login/impl/src/main/res/values-fa/translations.xml b/features/login/impl/src/main/res/values-fa/translations.xml index 1e7cfba770..071e28046f 100644 --- a/features/login/impl/src/main/res/values-fa/translations.xml +++ b/features/login/impl/src/main/res/values-fa/translations.xml @@ -25,6 +25,12 @@ "ماتریکس شبکه‌ای بار برای ارتباطات نامتمرکز و امن است." "خوش برگشتید!" "ورود به %1$s" + "ورود دستی" + "ورود با کد QR" + "ایجاد حساب" + "به سریع‌ترین %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی." + "به %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی." + "در المنتتان باشید" "برقرار کدن اتّصالی امن" "نتوانست اتّصالی امن به افزارهٔ جدید بسازد. افزاره‌های موجودتان هنوز امنند و نیازی نیست نگرانشان باشید." "اکنون چه؟" diff --git a/features/login/impl/src/main/res/values-fi/translations.xml b/features/login/impl/src/main/res/values-fi/translations.xml index 505d777eec..56f1a52365 100644 --- a/features/login/impl/src/main/res/values-fi/translations.xml +++ b/features/login/impl/src/main/res/values-fi/translations.xml @@ -17,6 +17,9 @@ "Sliding sync ei ole saatavilla well-known tiedostossa olevan ongelman vuoksi: %1$s" "Valitsemasi palveluntarjoaja ei tue sliding syncia. Palvelimen päivitys tarvitaan %1$s -sovelluksen käyttämiseen." + "%1$s ei saa yhdistää %2$s -palvelimeen." + "Tämä sovellus on määritetty sallimaan: %1$s." + "Palveluntarjoaja %1$s ei ole sallittu." "Kotipalvelimen osoite" "Anna verkkotunnuksen osoite." "Mikä on palvelimesi osoite?" @@ -31,6 +34,13 @@ "Matrix on avoin verkko turvallista, hajautettua viestintää varten." "Tervetuloa takaisin!" "Kirjaudu sisään %1$s -palvelimelle" + "Kirjaudu sisään manuaalisesti" + "Kirjaudu sisään %1$s -palvelimelle" + "Kirjaudu sisään QR-koodilla" + "Luo tili" + "Tervetuloa kaikkien aikojen nopeimpaan %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella." + "Tervetuloa %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella." + "Ole elementissäsi" "Muodostetaan turvallista yhteyttä" "Turvallista yhteyttä uuteen laitteeseen ei voitu muodostaa. Olemassa olevat laitteesi ovat edelleen turvassa, eikä sinun tarvitse huolehtia niistä." "Mitä nyt?" diff --git a/features/login/impl/src/main/res/values-fr/translations.xml b/features/login/impl/src/main/res/values-fr/translations.xml index aa2ca75160..517c63baca 100644 --- a/features/login/impl/src/main/res/values-fr/translations.xml +++ b/features/login/impl/src/main/res/values-fr/translations.xml @@ -34,6 +34,13 @@ "Matrix est un réseau ouvert pour une communication sécurisée et décentralisée." "Content de vous revoir !" "Connectez-vous à %1$s" + "Se connecter manuellement" + "Se connecter à %1$s" + "Se connecter avec un QR code" + "Créer un compte" + "Bienvenue dans l’application %1$s la plus rapide de tous les temps. Boosté pour plus de rapidité et de simplicité." + "Bienvenue sur %1$s. Boosté, pour plus de rapidité et de simplicité." + "Soyez dans votre Element" "Établissement d’une connexion sécurisée" "Aucune connexion sécurisée n’a pu être établie avec la nouvelle session. Vos sessions existantes sont toujours en sécurité et vous n’avez pas à vous en soucier." "Et maintenant ?" diff --git a/features/login/impl/src/main/res/values-hu/translations.xml b/features/login/impl/src/main/res/values-hu/translations.xml index c5704c4ddf..fbd9e57262 100644 --- a/features/login/impl/src/main/res/values-hu/translations.xml +++ b/features/login/impl/src/main/res/values-hu/translations.xml @@ -34,6 +34,13 @@ "A Matrix egy nyitott hálózat a biztonságos, decentralizált kommunikációhoz." "Örülünk, hogy visszatért!" "Bejelentkezés ide: %1$s" + "Kézi bejelentkezés" + "Bejelentkezés ide: %1$s" + "Bejelentkezés QR-kóddal" + "Fiók létrehozása" + "Üdvözöljük a valaha volt leggyorsabb %1$sben. Felturbózva, a sebesség és az egyszerűség érdekében." + "Üdvözli az %1$s. Felturbózva, a sebesség és az egyszerűség jegyében." + "Legyen elemében" "Biztonságos kapcsolat létesítése" "Nem sikerült biztonságos kapcsolatot létesíteni az új eszközzel. A meglévő eszközei továbbra is biztonságban vannak, és nem kell aggódnia miattuk." "Most mi lesz?" diff --git a/features/login/impl/src/main/res/values-in/translations.xml b/features/login/impl/src/main/res/values-in/translations.xml index f089fa5ea8..f7d658e739 100644 --- a/features/login/impl/src/main/res/values-in/translations.xml +++ b/features/login/impl/src/main/res/values-in/translations.xml @@ -29,6 +29,12 @@ "Matrix adalah jaringan terbuka untuk komunikasi yang aman dan terdesentralisasi." "Selamat datang kembali!" "Masuk ke %1$s" + "Masuk secara manual" + "Masuk dengan kode QR" + "Buat akun" + "Selamat datang di %1$s tercepat yang pernah ada. Berdaya besar untuk kecepatan dan kesederhanaan." + "Selamat datang di %1$s. Berdaya penuh, untuk kecepatan dan kesederhanaan." + "Berada di elemen Anda" "Membuat koneksi aman" "Koneksi aman tidak dapat dibuat ke perangkat baru. Perangkat Anda yang ada masih aman dan Anda tidak perlu khawatir tentang mereka." "Apa sekarang?" diff --git a/features/login/impl/src/main/res/values-it/translations.xml b/features/login/impl/src/main/res/values-it/translations.xml index 494d22a39c..b294e498e6 100644 --- a/features/login/impl/src/main/res/values-it/translations.xml +++ b/features/login/impl/src/main/res/values-it/translations.xml @@ -29,6 +29,12 @@ "Matrix è una rete aperta per comunicazioni sicure e decentralizzate." "Bentornato!" "Accedi a %1$s" + "Accedi manualmente" + "Accedi con codice QR" + "Crea account" + "Benvenuti nell\'%1$s più veloce di sempre. Potenziato per velocità e semplicità." + "Benvenuto su %1$s. Potenziato in velocità e semplicità." + "Sii nel tuo elemento" "Stabilendo la connessione" "Non è stato possibile stabilire una connessione sicura con il nuovo dispositivo. I tuoi dispositivi esistenti sono ancora al sicuro e non devi preoccuparti di loro." "E adesso?" diff --git a/features/login/impl/src/main/res/values-ka/translations.xml b/features/login/impl/src/main/res/values-ka/translations.xml index a5dcbec300..f3e46faf19 100644 --- a/features/login/impl/src/main/res/values-ka/translations.xml +++ b/features/login/impl/src/main/res/values-ka/translations.xml @@ -28,6 +28,12 @@ "Matrix არის ღია ქსელი უსაფრთხო, დეცენტრალიზებული კომუნიკაციისთვის." "კეთილი იყოს თქვენი მობრძანება!" "შესვლა %1$s-ში" + "ხელით შესვლა" + "შესვლა QR კოდით" + "ანგარიშის შექმნა" + "კეთილი იყოს თქვენი მობრძანება უსწრაფეს %1$s-ში. დამუხტულია სიჩქარისა და სიმარტივისათვის." + "კეთილი იყოს თქვენი მობრძანება %1$s-ში! დამუხტული სიჩქარისა და სიმარტივისთვის." + "იყავი შენს element-ში" "ხელახლა ცდა" "შეცვალეთ ანგარიშის მომწოდებელი" "კერძო სერვერი Element-ის თანამშრომლებისთვის." diff --git a/features/login/impl/src/main/res/values-lt/translations.xml b/features/login/impl/src/main/res/values-lt/translations.xml index 192e8fbc70..bd53419ce8 100644 --- a/features/login/impl/src/main/res/values-lt/translations.xml +++ b/features/login/impl/src/main/res/values-lt/translations.xml @@ -22,6 +22,11 @@ "Matrix yra atviras tinklas, skirtas saugiam, decentralizuotam bendravimui." "Sveiki sugrįžę!" "Prisijungti prie %1$s" + "Prisijunkite rankiniu būdu" + "Prisijunkite naudodami QR kodą" + "Sukurti paskyrą" + "Sveiki atvykę į %1$s. Įkrautas greitumui ir paprastumui." + "Būkite savo elemente" "Keisti paskyros teikėją" "Privatus serveris “Element” darbuotojams." "Matrix yra atviras tinklas, skirtas saugiam, decentralizuotam bendravimui." diff --git a/features/login/impl/src/main/res/values-nb/translations.xml b/features/login/impl/src/main/res/values-nb/translations.xml index 6622eb750d..88c063d701 100644 --- a/features/login/impl/src/main/res/values-nb/translations.xml +++ b/features/login/impl/src/main/res/values-nb/translations.xml @@ -34,6 +34,13 @@ "Matrix er et åpent nettverk for sikker, desentralisert kommunikasjon." "Velkommen tilbake!" "Logg inn på %1$s" + "Logg på manuelt" + "Logg inn på %1$s" + "Logg inn med QR-kode" + "Opprett konto" + "Velkommen til den raskeste %1$s noensinne. Superladet for hastighet og enkelhet." + "Velkommen til %1$s. Supercharged, for hastighet og enkelhet." + "Vær i ditt rette element" "Etablere en sikker forbindelse" "En sikker tilkobling kunne ikke opprettes til den nye enheten. Dine eksisterende enheter er fortsatt trygge, og du trenger ikke å bekymre deg for dem." "Hva nå?" diff --git a/features/login/impl/src/main/res/values-nl/translations.xml b/features/login/impl/src/main/res/values-nl/translations.xml index edf9f4ad51..1c8515df22 100644 --- a/features/login/impl/src/main/res/values-nl/translations.xml +++ b/features/login/impl/src/main/res/values-nl/translations.xml @@ -29,6 +29,12 @@ "Matrix is een open netwerk voor veilige, gedecentraliseerde communicatie." "Welkom terug!" "Inloggen bij %1$s" + "Handmatig inloggen" + "Inloggen met QR-code" + "Account aanmaken" + "Welkom bij de snelste %1$s ooit. Supercharged, voor snelheid en eenvoud." + "Welkom bij %1$s. Supercharged, voor snelheid en eenvoud." + "Wees in je element" "Een beveiligde verbinding tot stand brengen" "Er kon geen beveiligde verbinding worden gemaakt met het nieuwe apparaat. Je bestaande apparaten zijn nog steeds veilig en je hoeft je daarover geen zorgen te maken." "Wat nu?" diff --git a/features/login/impl/src/main/res/values-pl/translations.xml b/features/login/impl/src/main/res/values-pl/translations.xml index 20506c2359..64a6e57db2 100644 --- a/features/login/impl/src/main/res/values-pl/translations.xml +++ b/features/login/impl/src/main/res/values-pl/translations.xml @@ -32,6 +32,13 @@ "Matrix to otwarta sieć do bezpiecznej i zdecentralizowanej komunikacji." "Witaj ponownie!" "Zaloguj się do %1$s" + "Zaloguj się ręcznie" + "Zaloguj się do %1$s" + "Zaloguj się za pomocą kodu QR" + "Utwórz konto" + "Witamy w %1$s. Szybszy i prostszy niż kiedykolwiek." + "Witamy w %1$s. Doładowany, dla szybkości i prostoty." + "Be in your element" "Nawiązanie bezpiecznego połączenia" "Nie udało się nawiązać bezpiecznego połączenia z nowym urządzeniem. Twoje istniejące urządzenia są nadal bezpieczne i nie musisz się o nie martwić." "Co teraz?" diff --git a/features/login/impl/src/main/res/values-pt-rBR/translations.xml b/features/login/impl/src/main/res/values-pt-rBR/translations.xml index 5794b69f92..9543098529 100644 --- a/features/login/impl/src/main/res/values-pt-rBR/translations.xml +++ b/features/login/impl/src/main/res/values-pt-rBR/translations.xml @@ -27,6 +27,12 @@ "A Matrix é uma rede aberta para comunicação segura e descentralizada." "Bem-vindo de volta!" "Iniciar sessão em %1$s" + "Iniciar sessão manualmente" + "Iniciar sessão com código QR" + "Criar conta" + "Bem-vindo ao mais rápido %1$s de todos os tempos. Turbinado para velocidade e simplicidade." + "Bem-vindo ao %1$s. Turbinado, para velocidade e simplicidade" + "Esteja no seu elemento" "Tente novamente" "Você deve permitir ao %1$s usar a câmera do seu dispositivo para continuar." "Seu código de verificação" diff --git a/features/login/impl/src/main/res/values-pt/translations.xml b/features/login/impl/src/main/res/values-pt/translations.xml index dd67f9f19d..2da567a829 100644 --- a/features/login/impl/src/main/res/values-pt/translations.xml +++ b/features/login/impl/src/main/res/values-pt/translations.xml @@ -29,6 +29,12 @@ "A Matrix é uma rede aberta de comunicação descentralizada e segura." "Bem-vindo(a) de volta!" "Iniciar sessão em %1$s" + "Iniciar sessão manualmente" + "Iniciar sessão com código QR" + "Criar conta" + "Bem-vindo(a) à %1$s mais rápida de sempre. Super rápida e simples." + "Bem-vindo(a) à %1$s. Revitalizado, rápido e simples." + "A liberdade do teu elemento" "A estabelecer uma ligação segura" "Não foi possível estabelecer uma ligação segura com o novo dispositivo. Os teus outros dispositivos continuam seguros, não precisas de te preocupar com eles." "E agora?" diff --git a/features/login/impl/src/main/res/values-ro/translations.xml b/features/login/impl/src/main/res/values-ro/translations.xml index 65b7c90437..c1355a9491 100644 --- a/features/login/impl/src/main/res/values-ro/translations.xml +++ b/features/login/impl/src/main/res/values-ro/translations.xml @@ -29,6 +29,12 @@ "Matrix este o rețea deschisă pentru o comunicare sigură și descentralizată." "Bine ați revenit!" "Conectați-vă la %1$s" + "Conectați-vă manual" + "Conectați-vă cu un cod QR" + "Creați un cont" + "Bine ați venit la cel mai rapid %1$s din toate timpurile. Supraalimentat pentru viteză și simplitate." + "Bun venit în %1$s. Supraalimentat, pentru viteză și simplitate." + "Fii în Elementul tău" "Se stabilește o conexiune securizată" "Nu a putut fi făcută o conexiune sigură la noul dispozitiv. Dispozitivele existente sunt încă în siguranță și nu trebuie să vă faceți griji cu privire la ele." "Și acum?" diff --git a/features/login/impl/src/main/res/values-ru/translations.xml b/features/login/impl/src/main/res/values-ru/translations.xml index 180358ff33..b16ff24a92 100644 --- a/features/login/impl/src/main/res/values-ru/translations.xml +++ b/features/login/impl/src/main/res/values-ru/translations.xml @@ -30,6 +30,12 @@ "Matrix — это открытая сеть для безопасной децентрализованной связи." "Рады видеть вас снова!" "Войти в %1$s" + "Войти вручную" + "Войти QR-кодом" + "Создать учетную запись" + "Добро пожаловать в самый быстрый клиент %1$s. Ориентирован на скорость и простоту." + "Добро пожаловать в %1$s. Ориентирован на скорость и простоту." + "Чувствуйте себя как дома с Element" "Установление безопасного соединения" "Не удалось установить безопасное соединение с новым устройством. Существующие устройства по-прежнему в безопасности, и вам не нужно беспокоиться о них." "Что теперь?" diff --git a/features/login/impl/src/main/res/values-sk/translations.xml b/features/login/impl/src/main/res/values-sk/translations.xml index 92cb48b947..7bdb9c079d 100644 --- a/features/login/impl/src/main/res/values-sk/translations.xml +++ b/features/login/impl/src/main/res/values-sk/translations.xml @@ -34,6 +34,13 @@ "Matrix je otvorená sieť pre bezpečnú a decentralizovanú komunikáciu." "Vitajte späť!" "Prihlásiť sa do %1$s" + "Prihlásiť sa manuálne" + "Prihlásiť sa do %1$s" + "Prihlásiť sa pomocou QR kódu" + "Vytvoriť účet" + "Vitajte v najrýchlejšom %1$s vôbec. Nadupaný pre rýchlosť a jednoduchosť." + "Vitajte v %1$s. Nadupaný, pre rýchlosť a jednoduchosť." + "Buďte vo svojom elemente" "Nadväzovanie bezpečného spojenia" "K novému zariadeniu sa nepodarilo vytvoriť bezpečné pripojenie. Vaše existujúce zariadenia sú stále v bezpečí a nemusíte sa o ne obávať." "Čo teraz?" diff --git a/features/login/impl/src/main/res/values-sv/translations.xml b/features/login/impl/src/main/res/values-sv/translations.xml index 69523b21fa..11ad5f8f10 100644 --- a/features/login/impl/src/main/res/values-sv/translations.xml +++ b/features/login/impl/src/main/res/values-sv/translations.xml @@ -29,6 +29,12 @@ "Matrix är ett öppet nätverk för säker, decentraliserad kommunikation." "Välkommen tillbaka!" "Logga in på %1$s" + "Logga in manuellt" + "Logga in med QR-kod" + "Skapa konto" + "Välkommen till den snabbaste %1$s någonsin. Superladdad för snabbhet och enkelhet." + "Välkommen till %1$s. Superladdad, för snabbhet och enkelhet." + "Var i ditt rätta element" "Upprättar en säker anslutning" "En säker anslutning kunde inte göras till den nya enheten. Dina befintliga enheter är fortfarande säkra och du behöver inte oroa dig för dem." "Nu då?" diff --git a/features/login/impl/src/main/res/values-tr/translations.xml b/features/login/impl/src/main/res/values-tr/translations.xml index 07b84e1f5c..1a18fba1bc 100644 --- a/features/login/impl/src/main/res/values-tr/translations.xml +++ b/features/login/impl/src/main/res/values-tr/translations.xml @@ -29,6 +29,12 @@ "Matrix, güvenli, merkezi olmayan iletişim için açık bir ağdır." "Tekrar hoş geldiniz!" "%1$s adresinde oturum aç" + "Manuel olarak oturum aç" + "QR kodu ile giriş yap" + "Hesap oluştur" + "Şimdiye kadarki en hızlı %1$s hoş geldiniz. Hız ve basitlik için güçlendirildi." + "%1$s\'e hoş geldiniz. Hız ve basitlik için süper şarjlı." + "Kendi elementinizde olun" "Güvenli bir bağlantı kuruluyor" "Yeni cihaza güvenli bir bağlantı kurulamadı. Mevcut cihazlarınız hala güvende ve onlar için endişelenmenize gerek yok." "Şimdi ne olacak?" diff --git a/features/login/impl/src/main/res/values-uk/translations.xml b/features/login/impl/src/main/res/values-uk/translations.xml index 43e3846e2e..b0f3e28567 100644 --- a/features/login/impl/src/main/res/values-uk/translations.xml +++ b/features/login/impl/src/main/res/values-uk/translations.xml @@ -30,6 +30,13 @@ "Matrix — це відкрита мережа для безпечної, децентралізованої комунікації." "З поверненням!" "Увійти в %1$s" + "Увійти вручну" + "Увійти в %1$s" + "Увійти за допомогою QR-коду" + "Створити обліковий запис" + "Ласкаво просимо до найшвидшого %1$s. Заряджений для швидкості та простоти." + "Ласкаво просимо до %1$s. Заряджений, для швидкості та простоти." + "Будьте у своєму element" "Встановлення безпечного з\'єднання" "Не вдалося встановити безпечне з\'єднання з новим пристроєм. Ваші наявні пристрої досі в безпеці, і вам не потрібно про них турбуватися." "Що тепер?" diff --git a/features/login/impl/src/main/res/values-uz/translations.xml b/features/login/impl/src/main/res/values-uz/translations.xml index 6994a30643..25fc695452 100644 --- a/features/login/impl/src/main/res/values-uz/translations.xml +++ b/features/login/impl/src/main/res/values-uz/translations.xml @@ -26,6 +26,12 @@ "Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir." "Qaytib kelganingizdan xursandmiz!" "Kirish%1$s" + "Qo\'lda tizimga kiring" + "QR kod bilan tizimga kiring" + "Hisob yaratish" + "Eng tezkor %1$sga xush kelibsiz. Tezlik va oddylik uchun super zaryadlangan." + "%1$sga Xush kelibsiz. Tezlik va oddylik uchun o\'ta zaryadlangan." + "Elementingizda bo\'ling" "Hisob provayderini o\'zgartiring" "Element xodimlari uchun shaxsiy server." "Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir." diff --git a/features/login/impl/src/main/res/values-zh-rTW/translations.xml b/features/login/impl/src/main/res/values-zh-rTW/translations.xml index 2ca9e3737a..6bd29cb417 100644 --- a/features/login/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/login/impl/src/main/res/values-zh-rTW/translations.xml @@ -29,6 +29,12 @@ "Matrix 是一個開放網路,為了安全且去中心化的通訊而生。" "歡迎回來!" "登入 %1$s" + "手動登入" + "使用 QR code 登入" + "建立帳號" + "歡迎使用有史以來最快的 %1$s。速度超快,操作簡便。" + "歡迎使用 %1$s。速度超快且簡單。" + "Be in your element" "建立安全連線" "無法與新裝置建立安全連線。您現有的裝置仍然安全,您不必擔心它們。" "現在怎麼辦?" diff --git a/features/login/impl/src/main/res/values-zh/translations.xml b/features/login/impl/src/main/res/values-zh/translations.xml index 6b9e9af591..44d5d48574 100644 --- a/features/login/impl/src/main/res/values-zh/translations.xml +++ b/features/login/impl/src/main/res/values-zh/translations.xml @@ -29,6 +29,12 @@ "Matrix 是一个用于安全、去中心化通信的开放网络。" "欢迎回来!" "登录到 %1$s" + "手动登录" + "使用二维码登录" + "创建账户" + "欢迎使用 %1$s,快而简约的消息应用。" + "欢迎使用 %1$s,速度与简洁的极致。" + "融入您的 Element" "建立安全连接" "无法与新设备建立安全连接。您现有的设备仍然安全,无需担心。" "现在怎么办?" diff --git a/features/login/impl/src/main/res/values/localazy.xml b/features/login/impl/src/main/res/values/localazy.xml index bebbc8e6c3..998a0bc775 100644 --- a/features/login/impl/src/main/res/values/localazy.xml +++ b/features/login/impl/src/main/res/values/localazy.xml @@ -34,6 +34,13 @@ "Matrix is an open network for secure, decentralised communication." "Welcome back!" "Sign in to %1$s" + "Sign in manually" + "Sign in to %1$s" + "Sign in with QR code" + "Create account" + "Welcome to the fastest %1$s ever. Supercharged for speed and simplicity." + "Welcome to %1$s. Supercharged, for speed and simplicity." + "Be in your element" "Establishing a secure connection" "A secure connection could not be made to the new device. Your existing devices are still safe and you don\'t need to worry about them." "What now?" diff --git a/features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenterTest.kt similarity index 97% rename from features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenterTest.kt rename to features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenterTest.kt index b692d291b5..faee90ca14 100644 --- a/features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnBoardingPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenterTest.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow diff --git a/features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnboardingViewTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnboardingViewTest.kt similarity index 97% rename from features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnboardingViewTest.kt rename to features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnboardingViewTest.kt index 955bbea1f1..9565eca614 100644 --- a/features/onboarding/impl/src/test/kotlin/io/element/android/features/onboarding/impl/OnboardingViewTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnboardingViewTest.kt @@ -5,13 +5,14 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.onboarding.impl +package io.element.android.features.login.impl.onboarding import androidx.activity.ComponentActivity import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.login.impl.R import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled import io.element.android.tests.testutils.clickOn diff --git a/features/onboarding/api/build.gradle.kts b/features/onboarding/api/build.gradle.kts deleted file mode 100644 index 2079f2221b..0000000000 --- a/features/onboarding/api/build.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2023, 2024 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. - */ -plugins { - id("io.element.android-library") -} - -android { - namespace = "io.element.android.features.onboarding.api" -} - -dependencies { - implementation(projects.libraries.architecture) -} diff --git a/features/onboarding/api/src/main/kotlin/io/element/android/features/onboarding/api/OnBoardingEntryPoint.kt b/features/onboarding/api/src/main/kotlin/io/element/android/features/onboarding/api/OnBoardingEntryPoint.kt deleted file mode 100644 index 378176a2a7..0000000000 --- a/features/onboarding/api/src/main/kotlin/io/element/android/features/onboarding/api/OnBoardingEntryPoint.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2023, 2024 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.features.onboarding.api - -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import io.element.android.libraries.architecture.FeatureEntryPoint - -interface OnBoardingEntryPoint : FeatureEntryPoint { - fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder - - interface NodeBuilder { - fun callback(callback: Callback): NodeBuilder - fun build(): Node - } - - interface Callback : Plugin { - fun onSignUp() - fun onSignIn() - fun onSignInWithQrCode() - fun onReportProblem() - } -} diff --git a/features/onboarding/impl/build.gradle.kts b/features/onboarding/impl/build.gradle.kts deleted file mode 100644 index c59cd5684b..0000000000 --- a/features/onboarding/impl/build.gradle.kts +++ /dev/null @@ -1,52 +0,0 @@ -import extension.setupAnvil - -/* - * Copyright 2022-2024 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. - */ - -plugins { - id("io.element.android-compose-library") - id("kotlin-parcelize") -} - -android { - namespace = "io.element.android.features.onboarding.impl" - - testOptions { - unitTests { - isIncludeAndroidResources = true - } - } -} - -setupAnvil() - -dependencies { - implementation(projects.appconfig) - implementation(projects.features.rageshake.api) - implementation(projects.libraries.core) - implementation(projects.libraries.androidutils) - implementation(projects.libraries.architecture) - implementation(projects.libraries.designsystem) - implementation(projects.libraries.featureflag.api) - implementation(projects.libraries.matrix.api) - implementation(projects.libraries.testtags) - implementation(projects.libraries.uiStrings) - api(projects.features.onboarding.api) - - testImplementation(libs.test.junit) - testImplementation(libs.androidx.compose.ui.test.junit) - testImplementation(libs.androidx.test.ext.junit) - testImplementation(libs.coroutines.test) - testImplementation(libs.molecule.runtime) - testImplementation(libs.test.robolectric) - testImplementation(libs.test.truth) - testImplementation(libs.test.turbine) - testImplementation(projects.libraries.matrix.test) - testImplementation(projects.libraries.featureflag.test) - testImplementation(projects.tests.testutils) - testReleaseImplementation(libs.androidx.compose.ui.test.manifest) -} diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/DefaultOnBoardingEntryPoint.kt b/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/DefaultOnBoardingEntryPoint.kt deleted file mode 100644 index 9f31a10ab7..0000000000 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/DefaultOnBoardingEntryPoint.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2023, 2024 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.features.onboarding.impl - -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.features.onboarding.api.OnBoardingEntryPoint -import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject - -@ContributesBinding(AppScope::class) -class DefaultOnBoardingEntryPoint @Inject constructor() : OnBoardingEntryPoint { - override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): OnBoardingEntryPoint.NodeBuilder { - return object : OnBoardingEntryPoint.NodeBuilder { - val plugins = ArrayList() - - override fun callback(callback: OnBoardingEntryPoint.Callback): OnBoardingEntryPoint.NodeBuilder { - plugins += callback - return this - } - - override fun build(): Node { - return parentNode.createNode(buildContext, plugins) - } - } - } -} diff --git a/features/onboarding/impl/src/main/res/values-be/translations.xml b/features/onboarding/impl/src/main/res/values-be/translations.xml deleted file mode 100644 index ab1c5aba87..0000000000 --- a/features/onboarding/impl/src/main/res/values-be/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Увайсці ўручную" - "Увайсці з QR-кодам" - "Стварыць уліковы запіс" - "Сардэчна запрашаем у самы хуткі %1$s. Перавага ў хуткасці і прастаце." - "Сардэчна запрашаем у %1$s. Зараджаны, для хуткасці і прастаты." - "Будзьце ў сваім element" - diff --git a/features/onboarding/impl/src/main/res/values-bg/translations.xml b/features/onboarding/impl/src/main/res/values-bg/translations.xml deleted file mode 100644 index 67a3fe4a28..0000000000 --- a/features/onboarding/impl/src/main/res/values-bg/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Влизане ръчно" - "Влизане с QR код" - "Създаване на акаунт" - "Добре дошли в най-бързия %1$s досега. Супер зареден за скорост и простота." - "Добре дошли в %1$s. Супер зареден за скорост и простота." - "Бъдете в стихията си" - diff --git a/features/onboarding/impl/src/main/res/values-cs/translations.xml b/features/onboarding/impl/src/main/res/values-cs/translations.xml deleted file mode 100644 index ee565c39b6..0000000000 --- a/features/onboarding/impl/src/main/res/values-cs/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Ruční přihlášení" - "Přihlásit se do %1$s" - "Přihlásit se pomocí QR kódu" - "Vytvořit účet" - "Vítejte v dosud nejrychlejším %1$su. Vylepšený pro rychlost a jednoduchost." - "Vítejte v %1$su. Vylepšený, pro rychlost a jednoduchost." - "Buďte ve svém živlu" - diff --git a/features/onboarding/impl/src/main/res/values-cy/translations.xml b/features/onboarding/impl/src/main/res/values-cy/translations.xml deleted file mode 100644 index 3ecac1ad97..0000000000 --- a/features/onboarding/impl/src/main/res/values-cy/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Mewngofnodwch â llaw" - "Mewngofnodi i %1$s" - "Mewngofnodwch gyda chod QR" - "Creu cyfrif" - "Croeso i\'r %1$s cyflymaf erioed. Yn nodedig am gyflymder a symlrwydd." - "Croeso i %1$s. Yn nodedig ar gyfer cyflymder a symlrwydd." - "Byddwch yn eich elfen" - diff --git a/features/onboarding/impl/src/main/res/values-de/translations.xml b/features/onboarding/impl/src/main/res/values-de/translations.xml deleted file mode 100644 index bd5e9c0c54..0000000000 --- a/features/onboarding/impl/src/main/res/values-de/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Manuell anmelden" - "Mit QR-Code anmelden" - "Konto erstellen" - "Willkommen beim schnellsten %1$s aller Zeiten. Optimiert für Geschwindigkeit und Einfachheit." - "Willkommen zu %1$s. Aufgeladen, für Geschwindigkeit und Einfachheit." - "Sei in Deinem Element" - diff --git a/features/onboarding/impl/src/main/res/values-el/translations.xml b/features/onboarding/impl/src/main/res/values-el/translations.xml deleted file mode 100644 index bdaf30f11b..0000000000 --- a/features/onboarding/impl/src/main/res/values-el/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Σύνδεση χειροκίνητα" - "Συνδέσου με κωδικό QR" - "Δημιουργία λογαριασμού" - "Καλώς ήλθατε στο γρηγορότερο %1$s όλων των εποχών. Υπερτροφοδοτούμενο με ταχύτητα και απλότητα." - "Καλώς ήρθες στο %1$s. Υπερφορτισμένο, για ταχύτητα και απλότητα." - "Μείνε στο element σου" - diff --git a/features/onboarding/impl/src/main/res/values-es/translations.xml b/features/onboarding/impl/src/main/res/values-es/translations.xml deleted file mode 100644 index c794e3b9ab..0000000000 --- a/features/onboarding/impl/src/main/res/values-es/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Iniciar sesión manualmente" - "Iniciar sesión con un código QR" - "Crear cuenta" - "Bienvenido al %1$s más rápido de todos los tiempos. Diseñado para la velocidad y la simplicidad." - "Bienvenido a %1$s. Vitaminado, para mayor rapidez y sencillez." - "Siéntete en tu Elemento" - diff --git a/features/onboarding/impl/src/main/res/values-et/translations.xml b/features/onboarding/impl/src/main/res/values-et/translations.xml deleted file mode 100644 index 1df2de067c..0000000000 --- a/features/onboarding/impl/src/main/res/values-et/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Logi sisse käsitsi" - "Logi sisse teenusesse %1$s" - "Logi sisse QR-koodi alusel" - "Loo kasutajakonto" - "Läbi aegade kiireim ja mugavaim %1$s." - "Tere tulemast kasutama kiiret ja lihtsat suhtlusrakendust %1$s." - "Ole oma elemendis" - diff --git a/features/onboarding/impl/src/main/res/values-eu/translations.xml b/features/onboarding/impl/src/main/res/values-eu/translations.xml deleted file mode 100644 index 18c436a2b7..0000000000 --- a/features/onboarding/impl/src/main/res/values-eu/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Hasi saioa eskuz" - "Hasi saioa QR kodearekin" - "Sortu kontua" - "Ongi etorri inoizko %1$s azkarrenera. Abiaduraz eta sinpletasunaz gainkargatua." - "Ongi etorri %1$s-ra. Abiaduraz eta sinpletasunez gainezka." - "Egon zure saltsan" - diff --git a/features/onboarding/impl/src/main/res/values-fa/translations.xml b/features/onboarding/impl/src/main/res/values-fa/translations.xml deleted file mode 100644 index e4fb34e565..0000000000 --- a/features/onboarding/impl/src/main/res/values-fa/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "ورود دستی" - "ورود با کد QR" - "ایجاد حساب" - "به سریع‌ترین %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی." - "به %1$s خوش آمدید. بازطرّاحی شده برای سرعت و سادگی." - "در المنتتان باشید" - diff --git a/features/onboarding/impl/src/main/res/values-fi/translations.xml b/features/onboarding/impl/src/main/res/values-fi/translations.xml deleted file mode 100644 index fb34bae048..0000000000 --- a/features/onboarding/impl/src/main/res/values-fi/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Kirjaudu sisään manuaalisesti" - "Kirjaudu sisään QR-koodilla" - "Luo tili" - "Tervetuloa kaikkien aikojen nopeimpaan %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella." - "Tervetuloa %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella." - "Ole elementissäsi" - diff --git a/features/onboarding/impl/src/main/res/values-fr/translations.xml b/features/onboarding/impl/src/main/res/values-fr/translations.xml deleted file mode 100644 index f6dbaadf61..0000000000 --- a/features/onboarding/impl/src/main/res/values-fr/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Se connecter manuellement" - "Se connecter à %1$s" - "Se connecter avec un QR code" - "Créer un compte" - "Bienvenue dans l’application %1$s la plus rapide de tous les temps. Boosté pour plus de rapidité et de simplicité." - "Bienvenue sur %1$s. Boosté, pour plus de rapidité et de simplicité." - "Soyez dans votre Element" - diff --git a/features/onboarding/impl/src/main/res/values-hu/translations.xml b/features/onboarding/impl/src/main/res/values-hu/translations.xml deleted file mode 100644 index a992424d68..0000000000 --- a/features/onboarding/impl/src/main/res/values-hu/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Kézi bejelentkezés" - "Bejelentkezés ide: %1$s" - "Bejelentkezés QR-kóddal" - "Fiók létrehozása" - "Üdvözöljük a valaha volt leggyorsabb %1$sben. Felturbózva, a sebesség és az egyszerűség érdekében." - "Üdvözli az %1$s. Felturbózva, a sebesség és az egyszerűség jegyében." - "Legyen elemében" - diff --git a/features/onboarding/impl/src/main/res/values-in/translations.xml b/features/onboarding/impl/src/main/res/values-in/translations.xml deleted file mode 100644 index e9b7b479a8..0000000000 --- a/features/onboarding/impl/src/main/res/values-in/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Masuk secara manual" - "Masuk dengan kode QR" - "Buat akun" - "Selamat datang di %1$s tercepat yang pernah ada. Berdaya besar untuk kecepatan dan kesederhanaan." - "Selamat datang di %1$s. Berdaya penuh, untuk kecepatan dan kesederhanaan." - "Berada di elemen Anda" - diff --git a/features/onboarding/impl/src/main/res/values-it/translations.xml b/features/onboarding/impl/src/main/res/values-it/translations.xml deleted file mode 100644 index e134337d64..0000000000 --- a/features/onboarding/impl/src/main/res/values-it/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Accedi manualmente" - "Accedi con codice QR" - "Crea account" - "Benvenuti nell\'%1$s più veloce di sempre. Potenziato per velocità e semplicità." - "Benvenuto su %1$s. Potenziato in velocità e semplicità." - "Sii nel tuo elemento" - diff --git a/features/onboarding/impl/src/main/res/values-ka/translations.xml b/features/onboarding/impl/src/main/res/values-ka/translations.xml deleted file mode 100644 index e75edfdefa..0000000000 --- a/features/onboarding/impl/src/main/res/values-ka/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "ხელით შესვლა" - "შესვლა QR კოდით" - "ანგარიშის შექმნა" - "კეთილი იყოს თქვენი მობრძანება უსწრაფეს %1$s-ში. დამუხტულია სიჩქარისა და სიმარტივისათვის." - "კეთილი იყოს თქვენი მობრძანება %1$s-ში! დამუხტული სიჩქარისა და სიმარტივისთვის." - "იყავი შენს element-ში" - diff --git a/features/onboarding/impl/src/main/res/values-lt/translations.xml b/features/onboarding/impl/src/main/res/values-lt/translations.xml deleted file mode 100644 index 1b1d332698..0000000000 --- a/features/onboarding/impl/src/main/res/values-lt/translations.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - "Prisijunkite rankiniu būdu" - "Prisijunkite naudodami QR kodą" - "Sukurti paskyrą" - "Sveiki atvykę į %1$s. Įkrautas greitumui ir paprastumui." - "Būkite savo elemente" - diff --git a/features/onboarding/impl/src/main/res/values-nb/translations.xml b/features/onboarding/impl/src/main/res/values-nb/translations.xml deleted file mode 100644 index b10c0c7a78..0000000000 --- a/features/onboarding/impl/src/main/res/values-nb/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Logg på manuelt" - "Logg inn på %1$s" - "Logg inn med QR-kode" - "Opprett konto" - "Velkommen til den raskeste %1$s noensinne. Superladet for hastighet og enkelhet." - "Velkommen til %1$s. Supercharged, for hastighet og enkelhet." - "Vær i ditt rette element" - diff --git a/features/onboarding/impl/src/main/res/values-nl/translations.xml b/features/onboarding/impl/src/main/res/values-nl/translations.xml deleted file mode 100644 index 86bbf73ade..0000000000 --- a/features/onboarding/impl/src/main/res/values-nl/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Handmatig inloggen" - "Inloggen met QR-code" - "Account aanmaken" - "Welkom bij de snelste %1$s ooit. Supercharged, voor snelheid en eenvoud." - "Welkom bij %1$s. Supercharged, voor snelheid en eenvoud." - "Wees in je element" - diff --git a/features/onboarding/impl/src/main/res/values-pl/translations.xml b/features/onboarding/impl/src/main/res/values-pl/translations.xml deleted file mode 100644 index e57a1dd10e..0000000000 --- a/features/onboarding/impl/src/main/res/values-pl/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Zaloguj się ręcznie" - "Zaloguj się do %1$s" - "Zaloguj się za pomocą kodu QR" - "Utwórz konto" - "Witamy w %1$s. Szybszy i prostszy niż kiedykolwiek." - "Witamy w %1$s. Doładowany, dla szybkości i prostoty." - "Be in your element" - diff --git a/features/onboarding/impl/src/main/res/values-pt-rBR/translations.xml b/features/onboarding/impl/src/main/res/values-pt-rBR/translations.xml deleted file mode 100644 index 965c66c78c..0000000000 --- a/features/onboarding/impl/src/main/res/values-pt-rBR/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Iniciar sessão manualmente" - "Iniciar sessão com código QR" - "Criar conta" - "Bem-vindo ao mais rápido %1$s de todos os tempos. Turbinado para velocidade e simplicidade." - "Bem-vindo ao %1$s. Turbinado, para velocidade e simplicidade" - "Esteja no seu elemento" - diff --git a/features/onboarding/impl/src/main/res/values-pt/translations.xml b/features/onboarding/impl/src/main/res/values-pt/translations.xml deleted file mode 100644 index 311343ef9f..0000000000 --- a/features/onboarding/impl/src/main/res/values-pt/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Iniciar sessão manualmente" - "Iniciar sessão com código QR" - "Criar conta" - "Bem-vindo(a) à %1$s mais rápida de sempre. Super rápida e simples." - "Bem-vindo(a) à %1$s. Revitalizado, rápido e simples." - "A liberdade do teu elemento" - diff --git a/features/onboarding/impl/src/main/res/values-ro/translations.xml b/features/onboarding/impl/src/main/res/values-ro/translations.xml deleted file mode 100644 index 7275680729..0000000000 --- a/features/onboarding/impl/src/main/res/values-ro/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Conectați-vă manual" - "Conectați-vă cu un cod QR" - "Creați un cont" - "Bine ați venit la cel mai rapid %1$s din toate timpurile. Supraalimentat pentru viteză și simplitate." - "Bun venit în %1$s. Supraalimentat, pentru viteză și simplitate." - "Fii în Elementul tău" - diff --git a/features/onboarding/impl/src/main/res/values-ru/translations.xml b/features/onboarding/impl/src/main/res/values-ru/translations.xml deleted file mode 100644 index 80b05a158f..0000000000 --- a/features/onboarding/impl/src/main/res/values-ru/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Войти вручную" - "Войти QR-кодом" - "Создать учетную запись" - "Добро пожаловать в самый быстрый клиент %1$s. Ориентирован на скорость и простоту." - "Добро пожаловать в %1$s. Ориентирован на скорость и простоту." - "Чувствуйте себя как дома с Element" - diff --git a/features/onboarding/impl/src/main/res/values-sk/translations.xml b/features/onboarding/impl/src/main/res/values-sk/translations.xml deleted file mode 100644 index 1cba6d81fb..0000000000 --- a/features/onboarding/impl/src/main/res/values-sk/translations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Prihlásiť sa manuálne" - "Prihlásiť sa do %1$s" - "Prihlásiť sa pomocou QR kódu" - "Vytvoriť účet" - "Vitajte v najrýchlejšom %1$s vôbec. Nadupaný pre rýchlosť a jednoduchosť." - "Vitajte v %1$s. Nadupaný, pre rýchlosť a jednoduchosť." - "Buďte vo svojom elemente" - diff --git a/features/onboarding/impl/src/main/res/values-sv/translations.xml b/features/onboarding/impl/src/main/res/values-sv/translations.xml deleted file mode 100644 index 6ffadf355b..0000000000 --- a/features/onboarding/impl/src/main/res/values-sv/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Logga in manuellt" - "Logga in med QR-kod" - "Skapa konto" - "Välkommen till den snabbaste %1$s någonsin. Superladdad för snabbhet och enkelhet." - "Välkommen till %1$s. Superladdad, för snabbhet och enkelhet." - "Var i ditt rätta element" - diff --git a/features/onboarding/impl/src/main/res/values-tr/translations.xml b/features/onboarding/impl/src/main/res/values-tr/translations.xml deleted file mode 100644 index 72dcb42a90..0000000000 --- a/features/onboarding/impl/src/main/res/values-tr/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Manuel olarak oturum aç" - "QR kodu ile giriş yap" - "Hesap oluştur" - "Şimdiye kadarki en hızlı %1$s hoş geldiniz. Hız ve basitlik için güçlendirildi." - "%1$s\'e hoş geldiniz. Hız ve basitlik için süper şarjlı." - "Kendi elementinizde olun" - diff --git a/features/onboarding/impl/src/main/res/values-uk/translations.xml b/features/onboarding/impl/src/main/res/values-uk/translations.xml deleted file mode 100644 index 8c834d9bd0..0000000000 --- a/features/onboarding/impl/src/main/res/values-uk/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Увійти вручну" - "Увійти за допомогою QR-коду" - "Створити обліковий запис" - "Ласкаво просимо до найшвидшого %1$s. Заряджений для швидкості та простоти." - "Ласкаво просимо до %1$s. Заряджений, для швидкості та простоти." - "Будьте у своєму element" - diff --git a/features/onboarding/impl/src/main/res/values-uz/translations.xml b/features/onboarding/impl/src/main/res/values-uz/translations.xml deleted file mode 100644 index b69af4adb7..0000000000 --- a/features/onboarding/impl/src/main/res/values-uz/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "Qo\'lda tizimga kiring" - "QR kod bilan tizimga kiring" - "Hisob yaratish" - "Eng tezkor %1$sga xush kelibsiz. Tezlik va oddylik uchun super zaryadlangan." - "%1$sga Xush kelibsiz. Tezlik va oddylik uchun o\'ta zaryadlangan." - "Elementingizda bo\'ling" - diff --git a/features/onboarding/impl/src/main/res/values-zh-rTW/translations.xml b/features/onboarding/impl/src/main/res/values-zh-rTW/translations.xml deleted file mode 100644 index 8de629fca8..0000000000 --- a/features/onboarding/impl/src/main/res/values-zh-rTW/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "手動登入" - "使用 QR code 登入" - "建立帳號" - "歡迎使用有史以來最快的 %1$s。速度超快,操作簡便。" - "歡迎使用 %1$s。速度超快且簡單。" - "Be in your element" - diff --git a/features/onboarding/impl/src/main/res/values-zh/translations.xml b/features/onboarding/impl/src/main/res/values-zh/translations.xml deleted file mode 100644 index f8b53c3369..0000000000 --- a/features/onboarding/impl/src/main/res/values-zh/translations.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - "手动登录" - "使用二维码登录" - "创建账户" - "欢迎使用 %1$s,快而简约的消息应用。" - "欢迎使用 %1$s,速度与简洁的极致。" - "融入您的 Element" - diff --git a/features/onboarding/impl/src/main/res/values/localazy.xml b/features/onboarding/impl/src/main/res/values/localazy.xml deleted file mode 100644 index 04f51a3667..0000000000 --- a/features/onboarding/impl/src/main/res/values/localazy.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - "Sign in manually" - "Sign in to %1$s" - "Sign in with QR code" - "Create account" - "Welcome to the fastest %1$s ever. Supercharged for speed and simplicity." - "Welcome to %1$s. Supercharged, for speed and simplicity." - "Be in your element" - diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_0_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_0_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_0_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_1_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_1_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_1_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_2_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_2_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_2_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_3_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_3_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_3_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_4_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Day_4_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Day_4_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_0_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_0_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_0_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_1_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_1_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_1_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_2_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_2_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_2_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_3_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_3_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_3_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_4_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/features.onboarding.impl_OnBoardingView_Night_4_en.png rename to tests/uitests/src/test/snapshots/images/features.login.impl.onboarding_OnBoardingView_Night_4_en.png diff --git a/tools/localazy/config.json b/tools/localazy/config.json index e5d35def0c..00b51c1924 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -41,12 +41,6 @@ "screen.join_room.loading_alert_title" ] }, - { - "name" : ":features:onboarding:impl", - "includeRegex" : [ - "screen_onboarding_.*" - ] - }, { "name" : ":features:signedout:impl", "includeRegex" : [ @@ -149,6 +143,7 @@ { "name" : ":features:login:impl", "includeRegex" : [ + "screen_onboarding_.*", "screen_login_.*", "screen_server_confirmation_.*", "screen_change_server_.*", From c6f6c2cd6500d0080ab8f03653285ed779e8f958 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 May 2025 08:57:01 +0200 Subject: [PATCH 19/33] Allow configuration to provide multiple account providers. (#4742) * Allow several account provider in configuration * Target latest private modules. * Fix tests * Target latest private modules. * Trigger CI * Fix formatting issue --- enterprise | 2 +- .../enterprise/api/EnterpriseService.kt | 2 +- .../impl/DefaultEnterpriseService.kt | 2 +- .../impl/DefaultEnterpriseServiceTest.kt | 4 +-- .../enterprise/test/FakeEnterpriseService.kt | 6 ++-- .../AccountProviderDataSource.kt | 17 ++++++----- .../ChangeAccountProviderPresenter.kt | 30 ++++++++++++------- .../ChangeAccountProviderState.kt | 2 +- .../AccountProviderDataSourceTest.kt | 20 +++++++------ .../ChangeAccountProviderPresenterTest.kt | 4 ++- .../ConfirmAccountProviderPresenterTest.kt | 3 +- .../createaccount/DefaultMessageParserTest.kt | 3 +- .../LoginPasswordPresenterTest.kt | 3 +- 13 files changed, 58 insertions(+), 40 deletions(-) diff --git a/enterprise b/enterprise index c754703e72..d3dffc97bf 160000 --- a/enterprise +++ b/enterprise @@ -1 +1 @@ -Subproject commit c754703e720bcb20f5dfa1ea0dcd32976825f71c +Subproject commit d3dffc97bf8b39386ace2db7d857bbff05c73c18 diff --git a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt index b5ade48e01..3209fb4631 100644 --- a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt +++ b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt @@ -13,7 +13,7 @@ import io.element.android.libraries.matrix.api.core.SessionId interface EnterpriseService { val isEnterpriseBuild: Boolean suspend fun isEnterpriseUser(sessionId: SessionId): Boolean - fun defaultHomeserver(): String? + fun defaultHomeserverList(): List suspend fun isAllowedToConnectToHomeserver(homeserverUrl: String): Boolean fun semanticColorsLight(): SemanticColors diff --git a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index 97ab03361c..7f4f4b387b 100644 --- a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -22,7 +22,7 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService { override suspend fun isEnterpriseUser(sessionId: SessionId) = false - override fun defaultHomeserver() = null + override fun defaultHomeserverList(): List = emptyList() override suspend fun isAllowedToConnectToHomeserver(homeserverUrl: String) = true override fun semanticColorsLight(): SemanticColors = compoundColorsLight diff --git a/features/enterprise/impl/src/test/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseServiceTest.kt b/features/enterprise/impl/src/test/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseServiceTest.kt index 0d9dc1cafa..9f3ebbb845 100644 --- a/features/enterprise/impl/src/test/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseServiceTest.kt +++ b/features/enterprise/impl/src/test/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseServiceTest.kt @@ -21,9 +21,9 @@ class DefaultEnterpriseServiceTest { } @Test - fun `defaultHomeserver should return null`() { + fun `defaultHomeserverList should return empty list`() { val defaultEnterpriseService = DefaultEnterpriseService() - assertThat(defaultEnterpriseService.defaultHomeserver()).isNull() + assertThat(defaultEnterpriseService.defaultHomeserverList()).isEmpty() } @Test diff --git a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt index 52b49f4716..14195e1243 100644 --- a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt +++ b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt @@ -16,7 +16,7 @@ import io.element.android.tests.testutils.simulateLongTask class FakeEnterpriseService( override val isEnterpriseBuild: Boolean = false, private val isEnterpriseUserResult: (SessionId) -> Boolean = { lambdaError() }, - private val defaultHomeserverResult: () -> String? = { A_FAKE_HOMESERVER }, + private val defaultHomeserverListResult: () -> List = { emptyList() }, private val isAllowedToConnectToHomeserverResult: (String) -> Boolean = { lambdaError() }, private val semanticColorsLightResult: () -> SemanticColors = { lambdaError() }, private val semanticColorsDarkResult: () -> SemanticColors = { lambdaError() }, @@ -27,8 +27,8 @@ class FakeEnterpriseService( isEnterpriseUserResult(sessionId) } - override fun defaultHomeserver(): String? { - return defaultHomeserverResult() + override fun defaultHomeserverList(): List { + return defaultHomeserverListResult() } override suspend fun isAllowedToConnectToHomeserver(homeserverUrl: String): Boolean = simulateLongTask { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt index 3e1fc1853c..23d60abd01 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt @@ -20,14 +20,15 @@ import javax.inject.Inject class AccountProviderDataSource @Inject constructor( enterpriseService: EnterpriseService, ) { - private val defaultAccountProvider = (enterpriseService.defaultHomeserver() ?: AuthenticationConfig.MATRIX_ORG_URL).let { url -> - AccountProvider( - url = url, - subtitle = null, - isPublic = url == AuthenticationConfig.MATRIX_ORG_URL, - isMatrixOrg = url == AuthenticationConfig.MATRIX_ORG_URL, - ) - } + private val defaultAccountProvider = (enterpriseService.defaultHomeserverList().firstOrNull() ?: AuthenticationConfig.MATRIX_ORG_URL) + .let { url -> + AccountProvider( + url = url, + subtitle = null, + isPublic = url == AuthenticationConfig.MATRIX_ORG_URL, + isMatrixOrg = url == AuthenticationConfig.MATRIX_ORG_URL, + ) + } private val accountProvider: MutableStateFlow = MutableStateFlow( defaultAccountProvider diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt index 3d1ce69b51..590be0d6a7 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt @@ -8,29 +8,39 @@ package io.element.android.features.login.impl.screens.changeaccountprovider import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import io.element.android.appconfig.AuthenticationConfig +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.core.uri.ensureProtocol import javax.inject.Inject class ChangeAccountProviderPresenter @Inject constructor( private val changeServerPresenter: Presenter, + private val enterpriseService: EnterpriseService, ) : Presenter { @Composable override fun present(): ChangeAccountProviderState { + val staticAccountProviderList = remember { + enterpriseService.defaultHomeserverList() + .map { it.ensureProtocol() } + .ifEmpty { listOf(AuthenticationConfig.MATRIX_ORG_URL) } + .map { url -> + AccountProvider( + url = url, + subtitle = null, + isPublic = url == AuthenticationConfig.MATRIX_ORG_URL, + isMatrixOrg = url == AuthenticationConfig.MATRIX_ORG_URL, + isValid = true, + ) + } + } + val changeServerState = changeServerPresenter.present() return ChangeAccountProviderState( - // Just matrix.org by default for now - accountProviders = listOf( - AccountProvider( - url = AuthenticationConfig.MATRIX_ORG_URL, - subtitle = null, - isPublic = true, - isMatrixOrg = true, - isValid = true, - ) - ), + accountProviders = staticAccountProviderList, changeServerState = changeServerState, ) } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderState.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderState.kt index 9211e90bb5..ecd2b8a3d6 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderState.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderState.kt @@ -11,7 +11,7 @@ import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.ChangeServerState // Do not use default value, so no member get forgotten in the presenters. -data class ChangeAccountProviderState constructor( +data class ChangeAccountProviderState( val accountProviders: List, val changeServerState: ChangeServerState, ) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSourceTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSourceTest.kt index e9a8595f3b..a5ede23b2e 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSourceTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSourceTest.kt @@ -27,11 +27,11 @@ class AccountProviderDataSourceTest { val initialState = awaitItem() assertThat(initialState).isEqualTo( AccountProvider( - url = FakeEnterpriseService.A_FAKE_HOMESERVER, - title = FakeEnterpriseService.A_FAKE_HOMESERVER, + url = AuthenticationConfig.MATRIX_ORG_URL, + title = "matrix.org", subtitle = null, - isPublic = false, - isMatrixOrg = false, + isPublic = true, + isMatrixOrg = true, isValid = false, ) ) @@ -40,9 +40,11 @@ class AccountProviderDataSourceTest { @Test fun `present - initial state - matrix org`() = runTest { - val sut = AccountProviderDataSource(FakeEnterpriseService( - defaultHomeserverResult = { AuthenticationConfig.MATRIX_ORG_URL } - )) + val sut = AccountProviderDataSource( + FakeEnterpriseService( + defaultHomeserverListResult = { listOf(AuthenticationConfig.MATRIX_ORG_URL) } + ) + ) sut.flow.test { val initialState = awaitItem() assertThat(initialState).isEqualTo( @@ -63,7 +65,7 @@ class AccountProviderDataSourceTest { val sut = AccountProviderDataSource(FakeEnterpriseService()) sut.flow.test { val initialState = awaitItem() - assertThat(initialState.url).isEqualTo(FakeEnterpriseService.A_FAKE_HOMESERVER) + assertThat(initialState.url).isEqualTo(AuthenticationConfig.MATRIX_ORG_URL) sut.userSelection(AccountProvider(url = "https://example.com")) val changedState = awaitItem() assertThat(changedState).isEqualTo( @@ -78,7 +80,7 @@ class AccountProviderDataSourceTest { ) sut.reset() val resetState = awaitItem() - assertThat(resetState.url).isEqualTo(FakeEnterpriseService.A_FAKE_HOMESERVER) + assertThat(resetState.url).isEqualTo(AuthenticationConfig.MATRIX_ORG_URL) } } } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenterTest.kt index df85aa801a..dbce8164c6 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenterTest.kt @@ -11,6 +11,7 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.aChangeServerState import io.element.android.tests.testutils.WarmUpRule @@ -25,7 +26,8 @@ class ChangeAccountProviderPresenterTest { @Test fun `present - initial state`() = runTest { val presenter = ChangeAccountProviderPresenter( - changeServerPresenter = { aChangeServerState() } + changeServerPresenter = { aChangeServerState() }, + enterpriseService = FakeEnterpriseService(), ) moleculeFlow(RecompositionMode.Immediate) { presenter.present() diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt index 89065f95ea..08eea148a6 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt @@ -11,6 +11,7 @@ import app.cash.molecule.RecompositionMode import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.login.impl.DefaultLoginUserStory import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource @@ -44,7 +45,7 @@ class ConfirmAccountProviderPresenterTest { val initialState = awaitItem() assertThat(initialState.isAccountCreation).isFalse() assertThat(initialState.submitEnabled).isTrue() - assertThat(initialState.accountProvider.url).isEqualTo(FakeEnterpriseService.A_FAKE_HOMESERVER) + assertThat(initialState.accountProvider.url).isEqualTo(AuthenticationConfig.MATRIX_ORG_URL) assertThat(initialState.loginFlow).isEqualTo(AsyncData.Uninitialized) } } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/createaccount/DefaultMessageParserTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/createaccount/DefaultMessageParserTest.kt index 8c39685316..a1fbbc0fe2 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/createaccount/DefaultMessageParserTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/createaccount/DefaultMessageParserTest.kt @@ -8,6 +8,7 @@ package io.element.android.features.login.impl.screens.createaccount import com.google.common.truth.Truth.assertThat +import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import io.element.android.libraries.matrix.api.auth.external.ExternalSession @@ -60,7 +61,7 @@ class DefaultMessageParserTest { // missing homeServer assertThat(sut.parse(validMessage.replace(""""home_server": "home_server",""", ""))).isEqualTo( anExternalSession( - homeserverUrl = FakeEnterpriseService.A_FAKE_HOMESERVER, + homeserverUrl = AuthenticationConfig.MATRIX_ORG_URL, ) ) } diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt index bb5b226536..8e2fa4888c 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt @@ -8,6 +8,7 @@ package io.element.android.features.login.impl.screens.loginpassword import com.google.common.truth.Truth.assertThat +import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.login.impl.DefaultLoginUserStory import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource @@ -33,7 +34,7 @@ class LoginPasswordPresenterTest { fun `present - initial state`() = runTest { createLoginPasswordPresenter().test { val initialState = awaitItem() - assertThat(initialState.accountProvider.url).isEqualTo(FakeEnterpriseService.A_FAKE_HOMESERVER) + assertThat(initialState.accountProvider.url).isEqualTo(AuthenticationConfig.MATRIX_ORG_URL) assertThat(initialState.formState).isEqualTo(LoginFormState.Default) assertThat(initialState.loginAction).isEqualTo(AsyncData.Uninitialized) assertThat(initialState.submitEnabled).isFalse() From caf25894d6cdedc24bd64002fb1568eeb1d0d229 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 May 2025 09:07:43 +0200 Subject: [PATCH 20/33] Reduce API of JoinedRoom, caller must use the Timeline API from liveTimeline instead. (#4731) This removes lots of boilerplate code. --- .../impl/send/SendLocationPresenter.kt | 4 +- .../impl/send/SendLocationPresenterTest.kt | 13 +- .../MessageComposerPresenter.kt | 2 +- .../messages/impl/MessagesPresenterTest.kt | 8 +- .../AttachmentsPreviewPresenterTest.kt | 64 +++-- .../MessageComposerPresenterTest.kt | 18 +- .../VoiceMessageComposerPresenterTest.kt | 11 +- .../poll/impl/actions/DefaultEndPollAction.kt | 2 +- .../actions/DefaultSendPollResponseAction.kt | 2 +- .../features/poll/impl/data/PollRepository.kt | 2 +- .../impl/create/CreatePollPresenterTest.kt | 14 +- .../features/share/impl/SharePresenter.kt | 2 +- .../features/share/impl/SharePresenterTest.kt | 9 +- .../libraries/matrix/api/room/JoinedRoom.kt | 134 ----------- .../matrix/impl/room/JoinedRustRoom.kt | 164 ------------- .../matrix/test/room/FakeJoinedRoom.kt | 202 +--------------- .../matrix/test/timeline/FakeTimeline.kt | 222 +++++++++++------- .../libraries/mediaupload/api/MediaSender.kt | 9 +- .../mediaupload/api/MediaSenderTest.kt | 25 +- ...otificationBroadcastReceiverHandlerTest.kt | 2 +- 20 files changed, 258 insertions(+), 651 deletions(-) diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt index ce2b06a8b2..f92b058786 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt @@ -101,7 +101,7 @@ class SendLocationPresenter @Inject constructor( when (mode) { SendLocationState.Mode.PinLocation -> { val geoUri = event.cameraPosition.toGeoUri() - room.sendLocation( + room.liveTimeline.sendLocation( body = generateBody(geoUri), geoUri = geoUri, description = null, @@ -119,7 +119,7 @@ class SendLocationPresenter @Inject constructor( } SendLocationState.Mode.SenderLocation -> { val geoUri = event.toGeoUri() - room.sendLocation( + room.liveTimeline.sendLocation( body = generateBody(geoUri), geoUri = geoUri, description = null, diff --git a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/send/SendLocationPresenterTest.kt b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/send/SendLocationPresenterTest.kt index 0c4bb5e067..267a359608 100644 --- a/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/send/SendLocationPresenterTest.kt +++ b/features/location/impl/src/test/kotlin/io/element/android/features/location/impl/send/SendLocationPresenterTest.kt @@ -26,6 +26,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.toEventOrTran import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.room.FakeJoinedRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.tests.testutils.WarmUpRule @@ -266,7 +267,9 @@ class SendLocationPresenterTest { Result.success(Unit) } val joinedRoom = FakeJoinedRoom( - sendLocationResult = sendLocationResult, + liveTimeline = FakeTimeline().apply { + sendLocationLambda = sendLocationResult + }, ) val sendLocationPresenter = createSendLocationPresenter(joinedRoom) fakePermissionsPresenter.givenState( @@ -327,7 +330,9 @@ class SendLocationPresenterTest { Result.success(Unit) } val joinedRoom = FakeJoinedRoom( - sendLocationResult = sendLocationResult, + liveTimeline = FakeTimeline().apply { + sendLocationLambda = sendLocationResult + }, ) val sendLocationPresenter = createSendLocationPresenter(joinedRoom) fakePermissionsPresenter.givenState( @@ -388,7 +393,9 @@ class SendLocationPresenterTest { Result.success(Unit) } val joinedRoom = FakeJoinedRoom( - sendLocationResult = sendLocationResult, + liveTimeline = FakeTimeline().apply { + sendLocationLambda = sendLocationResult + }, ) val sendLocationPresenter = createSendLocationPresenter(joinedRoom) fakePermissionsPresenter.givenState( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index 11bb0868e7..dc35fe1642 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -424,7 +424,7 @@ class MessageComposerPresenter @AssistedInject constructor( resetComposer(markdownTextEditorState, richTextEditorState, fromEdit = capturedMode is MessageComposerMode.Edit) when (capturedMode) { is MessageComposerMode.Attachment, - is MessageComposerMode.Normal -> room.sendMessage( + is MessageComposerMode.Normal -> room.liveTimeline.sendMessage( body = message.markdown, htmlBody = message.html, intentionalMentions = message.intentionalMentions diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 2a3c34feee..3cc00d0759 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -5,6 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.element.android.features.messages.impl import androidx.lifecycle.Lifecycle @@ -96,6 +98,7 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -173,12 +176,14 @@ class MessagesPresenterTest { skipItems(1) val initialState = awaitItem() initialState.eventSink(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID.toEventOrTransactionId())) + advanceUntilIdle() assert(toggleReactionSuccess) .isCalledOnce() .with(value("👍"), value(AN_EVENT_ID.toEventOrTransactionId())) // No crashes when sending a reaction failed - timeline.apply { toggleReactionLambda = toggleReactionFailure } + timeline.toggleReactionLambda = toggleReactionFailure initialState.eventSink(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID.toEventOrTransactionId())) + advanceUntilIdle() assert(toggleReactionFailure) .isCalledOnce() .with(value("👍"), value(AN_EVENT_ID.toEventOrTransactionId())) @@ -209,6 +214,7 @@ class MessagesPresenterTest { val initialState = awaitItem() initialState.eventSink(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID.toEventOrTransactionId())) initialState.eventSink(MessagesEvents.ToggleReaction("👍", AN_EVENT_ID.toEventOrTransactionId())) + advanceUntilIdle() assert(toggleReactionSuccess) .isCalledExactly(2) .withSequence( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt index 2124d38b56..2dd7bca3c8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt @@ -35,6 +35,7 @@ import io.element.android.libraries.matrix.test.A_CAPTION import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.permalink.FakePermalinkBuilder import io.element.android.libraries.matrix.test.room.FakeJoinedRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediaupload.api.MediaPreProcessor import io.element.android.libraries.mediaupload.api.MediaSender import io.element.android.libraries.mediaupload.api.MediaUploadInfo @@ -108,15 +109,18 @@ class AttachmentsPreviewPresenterTest { fun `present - send media success scenario`() = runTest { val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.success(FakeMediaUploadHandler()) - } + Result.success(FakeMediaUploadHandler()) + } val room = FakeJoinedRoom( - progressCallbackValues = listOf( - Pair(0, 10), - Pair(5, 10), - Pair(10, 10) - ), - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline( + progressCallbackValues = listOf( + Pair(0, 10), + Pair(5, 10), + Pair(10, 10) + ), + ).apply { + sendFileLambda = sendFileResult + }, ) val onDoneListener = lambdaRecorder { } val presenter = createAttachmentsPreviewPresenter( @@ -146,10 +150,12 @@ class AttachmentsPreviewPresenterTest { fun `present - send media after pre-processing success scenario`() = runTest { val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.success(FakeMediaUploadHandler()) - } + Result.success(FakeMediaUploadHandler()) + } val room = FakeJoinedRoom( - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val onDoneListener = lambdaRecorder { } val processLatch = CompletableDeferred() @@ -182,10 +188,12 @@ class AttachmentsPreviewPresenterTest { fun `present - send media before pre-processing success scenario`() = runTest { val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.success(FakeMediaUploadHandler()) - } + Result.success(FakeMediaUploadHandler()) + } val room = FakeJoinedRoom( - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val onDoneListener = lambdaRecorder { } val processLatch = CompletableDeferred() @@ -298,7 +306,9 @@ class AttachmentsPreviewPresenterTest { givenImageResult() } val room = FakeJoinedRoom( - sendImageResult = sendImageResult, + liveTimeline = FakeTimeline().apply { + sendImageLambda = sendImageResult + }, ) val onDoneListener = lambdaRecorder { } val presenter = createAttachmentsPreviewPresenter( @@ -340,7 +350,9 @@ class AttachmentsPreviewPresenterTest { givenVideoResult() } val room = FakeJoinedRoom( - sendVideoResult = sendVideoResult, + liveTimeline = FakeTimeline().apply { + sendVideoLambda = sendVideoResult + }, ) val onDoneListener = lambdaRecorder { } val presenter = createAttachmentsPreviewPresenter( @@ -382,7 +394,9 @@ class AttachmentsPreviewPresenterTest { givenAudioResult() } val room = FakeJoinedRoom( - sendAudioResult = sendAudioResult, + liveTimeline = FakeTimeline().apply { + sendAudioLambda = sendAudioResult + }, ) val onDoneListener = lambdaRecorder { } val presenter = createAttachmentsPreviewPresenter( @@ -416,10 +430,12 @@ class AttachmentsPreviewPresenterTest { val failure = MediaPreProcessor.Failure(null) val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.failure(failure) - } + Result.failure(failure) + } val room = FakeJoinedRoom( - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val presenter = createAttachmentsPreviewPresenter(room = room, mediaUploadOnSendQueueEnabled = false) moleculeFlow(RecompositionMode.Immediate) { @@ -445,11 +461,13 @@ class AttachmentsPreviewPresenterTest { val failure = MediaPreProcessor.Failure(null) val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.failure(failure) - } + Result.failure(failure) + } val onDoneListenerResult = lambdaRecorder {} val room = FakeJoinedRoom( - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val presenter = createAttachmentsPreviewPresenter(room = room, mediaUploadOnSendQueueEnabled = true, onDoneListener = onDoneListenerResult) moleculeFlow(RecompositionMode.Immediate) { diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenterTest.kt index 9528b81bf3..9146f6515b 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenterTest.kt @@ -384,7 +384,9 @@ class MessageComposerPresenterTest { val presenter = createPresenter( coroutineScope = this, room = FakeJoinedRoom( - sendMessageResult = { _, _, _ -> Result.success(Unit) }, + liveTimeline = FakeTimeline().apply { + sendMessageLambda = { _, _, _ -> Result.success(Unit) } + }, typingNoticeResult = { Result.success(Unit) } ), ) @@ -418,7 +420,9 @@ class MessageComposerPresenterTest { coroutineScope = this, isRichTextEditorEnabled = false, room = FakeJoinedRoom( - sendMessageResult = { _, _, _ -> Result.success(Unit) }, + liveTimeline = FakeTimeline().apply { + sendMessageLambda = { _, _, _ -> Result.success(Unit) } + }, typingNoticeResult = { Result.success(Unit) } ), ) @@ -1118,16 +1122,16 @@ class MessageComposerPresenterTest { val editMessageLambda = lambdaRecorder { _: EventOrTransactionId, _: String, _: String?, _: List -> Result.success(Unit) } - val timeline = FakeTimeline().apply { - this.replyMessageLambda = replyMessageLambda - this.editMessageLambda = editMessageLambda - } val sendMessageResult = lambdaRecorder { _: String, _: String?, _: List -> Result.success(Unit) } + val timeline = FakeTimeline().apply { + this.replyMessageLambda = replyMessageLambda + this.editMessageLambda = editMessageLambda + sendMessageLambda = sendMessageResult + } val room = FakeJoinedRoom( liveTimeline = timeline, - sendMessageResult = sendMessageResult, typingNoticeResult = { Result.success(Unit) } ) val presenter = createPresenter(room = room, coroutineScope = this) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt index b3938dd229..7d0ceb5527 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPresenterTest.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.matrix.api.media.AudioInfo import io.element.android.libraries.matrix.api.room.message.ReplyParameters import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.room.FakeJoinedRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediaplayer.test.FakeMediaPlayer import io.element.android.libraries.mediaupload.api.MediaSender import io.element.android.libraries.mediaupload.test.FakeMediaPreProcessor @@ -45,6 +46,7 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test @@ -65,7 +67,9 @@ class VoiceMessageComposerPresenterTest { Result.success(FakeMediaUploadHandler()) } private val joinedRoom = FakeJoinedRoom( - sendVoiceMessageResult = sendVoiceMessageResult + liveTimeline = FakeTimeline().apply { + sendVoiceMessageLambda = sendVoiceMessageResult + }, ) private val mediaPreProcessor = FakeMediaPreProcessor().apply { givenAudioResult() } private val mediaSender = MediaSender(mediaPreProcessor, joinedRoom, InMemorySessionPreferencesStore()) @@ -295,7 +299,6 @@ class VoiceMessageComposerPresenterTest { awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop)) awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage) assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState()) - val finalState = awaitItem() assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle) sendVoiceMessageResult.assertions().isCalledOnce() @@ -317,7 +320,7 @@ class VoiceMessageComposerPresenterTest { awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop)) awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage) skipItems(1) // Sending state - + advanceUntilIdle() // Now reply with a voice message messageComposerContext.composerMode = aReplyMode() awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start)) @@ -653,7 +656,7 @@ class VoiceMessageComposerPresenterTest { permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(), ): VoiceMessageComposerPresenter { return VoiceMessageComposerPresenter( - this, + backgroundScope, voiceRecorder, analyticsService, mediaSender, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt index 33c2aa589d..ea11ef918e 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt @@ -22,7 +22,7 @@ class DefaultEndPollAction @Inject constructor( private val analyticsService: AnalyticsService, ) : EndPollAction { override suspend fun execute(pollStartId: EventId): Result { - return room.endPoll( + return room.liveTimeline.endPoll( pollStartId = pollStartId, text = "The poll with event id: $pollStartId has ended." ).onSuccess { diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt index cade3e9bef..4f1f29df46 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt @@ -22,7 +22,7 @@ class DefaultSendPollResponseAction @Inject constructor( private val analyticsService: AnalyticsService, ) : SendPollResponseAction { override suspend fun execute(pollStartId: EventId, answerId: String): Result { - return room.sendPollResponse( + return room.liveTimeline.sendPollResponse( pollStartId = pollStartId, answers = listOf(answerId), ).onSuccess { diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt index cde6c569a9..ab711df996 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt @@ -41,7 +41,7 @@ class PollRepository @Inject constructor( pollKind: PollKind, maxSelections: Int, ): Result = when (existingPollId) { - null -> room.createPoll( + null -> room.liveTimeline.createPoll( question = question, answers = answers, maxSelections = maxSelections, diff --git a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt index 6493fc30a7..67556886bc 100644 --- a/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt +++ b/features/poll/impl/src/test/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenterTest.kt @@ -121,7 +121,9 @@ class CreatePollPresenterTest { val createPollResult = lambdaRecorder, Int, PollKind, Result> { _, _, _, _ -> Result.success(Unit) } val presenter = createCreatePollPresenter( room = FakeJoinedRoom( - createPollResult = createPollResult + liveTimeline = FakeTimeline().apply { + createPollLambda = createPollResult + }, ), mode = CreatePollMode.NewPoll, ) @@ -169,7 +171,9 @@ class CreatePollPresenterTest { } val presenter = createCreatePollPresenter( room = FakeJoinedRoom( - createPollResult = createPollResult + liveTimeline = FakeTimeline().apply { + createPollLambda = createPollResult + }, ), mode = CreatePollMode.NewPoll, ) @@ -253,12 +257,8 @@ class CreatePollPresenterTest { @Test fun `when edit poll fails, error is tracked`() = runTest { val error = Exception("cause") - val editPollResult = lambdaRecorder { _: EventId, _: String, _: List, _: Int, _: PollKind -> - Result.failure(error) - } val presenter = createCreatePollPresenter( room = FakeJoinedRoom( - editPollResult = editPollResult, liveTimeline = timeline, ), mode = CreatePollMode.EditPoll(pollEventId), @@ -276,7 +276,7 @@ class CreatePollPresenterTest { awaitPollLoaded().eventSink(CreatePollEvents.SetAnswer(0, "A")) awaitPollLoaded(newAnswer1 = "A").eventSink(CreatePollEvents.Save) advanceUntilIdle() // Wait for the coroutine to finish - assert(editPollLambda).isCalledOnce() + editPollLambda.assertions().isCalledOnce() assertThat(fakeAnalyticsService.capturedEvents).isEmpty() assertThat(fakeAnalyticsService.trackedErrors).hasSize(1) assertThat(fakeAnalyticsService.trackedErrors).containsExactly( diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt index d46fb22ef4..08e9bdc1ff 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt @@ -94,7 +94,7 @@ class SharePresenter @AssistedInject constructor( onPlainText = { text -> roomIds .map { roomId -> - matrixClient.getJoinedRoom(roomId)?.sendMessage( + matrixClient.getJoinedRoom(roomId)?.liveTimeline?.sendMessage( body = text, htmlBody = null, intentionalMentions = emptyList(), diff --git a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt index 7a49982e2b..3504390f68 100644 --- a/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt +++ b/features/share/impl/src/test/kotlin/io/element/android/features/share/impl/SharePresenterTest.kt @@ -24,6 +24,7 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.room.FakeJoinedRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediaupload.api.MediaPreProcessor import io.element.android.libraries.mediaupload.test.FakeMediaPreProcessor import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore @@ -91,7 +92,9 @@ class SharePresenterTest { @Test fun `present - send text ok`() = runTest { val joinedRoom = FakeJoinedRoom( - sendMessageResult = { _, _, _ -> Result.success(Unit) }, + liveTimeline = FakeTimeline().apply { + sendMessageLambda = { _, _, _ -> Result.success(Unit) } + }, ) val matrixClient = FakeMatrixClient().apply { givenGetRoomResult(A_ROOM_ID, joinedRoom) @@ -122,7 +125,9 @@ class SharePresenterTest { Result.success(FakeMediaUploadHandler()) } val joinedRoom = FakeJoinedRoom( - sendFileResult = sendFileResult, + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val matrixClient = FakeMatrixClient().apply { givenGetRoomResult(A_ROOM_ID, joinedRoom) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt index ca62c4b134..4373721b70 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/JoinedRoom.kt @@ -9,34 +9,21 @@ package io.element.android.libraries.matrix.api.room import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomAlias -import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SendHandle -import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.identity.IdentityStateChange -import io.element.android.libraries.matrix.api.media.AudioInfo -import io.element.android.libraries.matrix.api.media.FileInfo -import io.element.android.libraries.matrix.api.media.ImageInfo -import io.element.android.libraries.matrix.api.media.MediaUploadHandler -import io.element.android.libraries.matrix.api.media.VideoInfo -import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest -import io.element.android.libraries.matrix.api.room.location.AssetType -import io.element.android.libraries.matrix.api.room.message.ReplyParameters import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility import io.element.android.libraries.matrix.api.timeline.Timeline -import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow -import java.io.File interface JoinedRoom : BaseRoom { val syncUpdateFlow: StateFlow @@ -63,135 +50,14 @@ interface JoinedRoom : BaseRoom { createTimelineParams: CreateTimelineParams, ): Result - suspend fun sendMessage(body: String, htmlBody: String?, intentionalMentions: List): Result - suspend fun editMessage(eventId: EventId, body: String, htmlBody: String?, intentionalMentions: List): Result - suspend fun sendImage( - file: File, - thumbnailFile: File?, - imageInfo: ImageInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result - - suspend fun sendVideo( - file: File, - thumbnailFile: File?, - videoInfo: VideoInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result - - suspend fun sendAudio( - file: File, - audioInfo: AudioInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result - - suspend fun sendFile( - file: File, - fileInfo: FileInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result - - suspend fun sendVoiceMessage( - file: File, - audioInfo: AudioInfo, - waveform: List, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result - - /** - * Share a location message in the room. - * - * @param body A human readable textual representation of the location. - * @param geoUri A geo URI (RFC 5870) representing the location e.g. `geo:51.5008,0.1247;u=35`. - * Respectively: latitude, longitude, and (optional) uncertainty. - * @param description Optional description of the location to display to the user. - * @param zoomLevel Optional zoom level to display the map at. - * @param assetType Optional type of the location asset. - * Set to SENDER if sharing own location. Set to PIN if sharing any location. - */ - suspend fun sendLocation( - body: String, - geoUri: String, - description: String? = null, - zoomLevel: Int? = null, - assetType: AssetType? = null, - ): Result - - /** - * Create a poll in the room. - * - * @param question The question to ask. - * @param answers The list of answers. - * @param maxSelections The maximum number of answers that can be selected. - * @param pollKind The kind of poll to create. - */ - suspend fun createPoll( - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind, - ): Result - - /** - * Edit a poll in the room. - * - * @param pollStartId The event ID of the poll start event. - * @param question The question to ask. - * @param answers The list of answers. - * @param maxSelections The maximum number of answers that can be selected. - * @param pollKind The kind of poll to create. - */ - suspend fun editPoll( - pollStartId: EventId, - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind, - ): Result - - /** - * Send a response to a poll. - * - * @param pollStartId The event ID of the poll start event. - * @param answers The list of answer ids to send. - */ - suspend fun sendPollResponse(pollStartId: EventId, answers: List): Result - - /** - * Ends a poll in the room. - * - * @param pollStartId The event ID of the poll start event. - * @param text Fallback text of the poll end event. - */ - suspend fun endPoll(pollStartId: EventId, text: String): Result - /** * Send a typing notification. * @param isTyping True if the user is typing, false otherwise. */ suspend fun typingNotice(isTyping: Boolean): Result - suspend fun toggleReaction(emoji: String, eventOrTransactionId: EventOrTransactionId): Result - - suspend fun forwardEvent(eventId: EventId, roomIds: List): Result - - suspend fun cancelSend(transactionId: TransactionId): Result - suspend fun inviteUserById(id: UserId): Result suspend fun updateAvatar(mimeType: String, data: ByteArray): Result diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt index e006dcdba6..d01675bb29 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/JoinedRustRoom.kt @@ -13,20 +13,11 @@ import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.EventId -import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomAlias -import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SendHandle -import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.identity.IdentityStateChange -import io.element.android.libraries.matrix.api.media.AudioInfo -import io.element.android.libraries.matrix.api.media.FileInfo -import io.element.android.libraries.matrix.api.media.ImageInfo -import io.element.android.libraries.matrix.api.media.MediaUploadHandler -import io.element.android.libraries.matrix.api.media.VideoInfo import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService -import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.IntentionalMention @@ -35,14 +26,11 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationSettingsStat import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest -import io.element.android.libraries.matrix.api.room.location.AssetType -import io.element.android.libraries.matrix.api.room.message.ReplyParameters import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.room.roomNotificationSettings import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility import io.element.android.libraries.matrix.api.timeline.Timeline -import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings import io.element.android.libraries.matrix.impl.core.RustSendHandle @@ -84,7 +72,6 @@ import org.matrix.rustcomponents.sdk.getElementCallRequiredPermissions import org.matrix.rustcomponents.sdk.use import timber.log.Timber import uniffi.matrix_sdk.RoomPowerLevelChanges -import java.io.File import kotlin.coroutines.cancellation.CancellationException import org.matrix.rustcomponents.sdk.IdentityStatusChange as RustIdentityStateChange import org.matrix.rustcomponents.sdk.KnockRequest as InnerKnockRequest @@ -249,10 +236,6 @@ class JoinedRustRoom( } } - override suspend fun sendMessage(body: String, htmlBody: String?, intentionalMentions: List): Result { - return liveTimeline.sendMessage(body, htmlBody, intentionalMentions) - } - override suspend fun editMessage( eventId: EventId, body: String, @@ -266,159 +249,12 @@ class JoinedRustRoom( } } - override suspend fun sendImage( - file: File, - thumbnailFile: File?, - imageInfo: ImageInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result { - return liveTimeline.sendImage( - file = file, - thumbnailFile = thumbnailFile, - imageInfo = imageInfo, - caption = caption, - formattedCaption = formattedCaption, - progressCallback = progressCallback, - replyParameters = replyParameters - ) - } - - override suspend fun sendVideo( - file: File, - thumbnailFile: File?, - videoInfo: VideoInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result { - return liveTimeline.sendVideo( - file = file, - thumbnailFile = thumbnailFile, - videoInfo = videoInfo, - caption = caption, - formattedCaption = formattedCaption, - progressCallback = progressCallback, - replyParameters = replyParameters - ) - } - - override suspend fun sendAudio( - file: File, - audioInfo: AudioInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result { - return liveTimeline.sendAudio( - file = file, - audioInfo = audioInfo, - caption = caption, - formattedCaption = formattedCaption, - progressCallback = progressCallback, - replyParameters = replyParameters, - ) - } - - override suspend fun sendFile( - file: File, - fileInfo: FileInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result { - return liveTimeline.sendFile( - file = file, - fileInfo = fileInfo, - caption = caption, - formattedCaption = formattedCaption, - progressCallback = progressCallback, - replyParameters = replyParameters, - ) - } - - override suspend fun sendVoiceMessage( - file: File, - audioInfo: AudioInfo, - waveform: List, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result { - return liveTimeline.sendVoiceMessage( - file = file, - audioInfo = audioInfo, - waveform = waveform, - progressCallback = progressCallback, - replyParameters = replyParameters, - ) - } - - override suspend fun sendLocation( - body: String, - geoUri: String, - description: String?, - zoomLevel: Int?, - assetType: AssetType?, - ): Result { - return liveTimeline.sendLocation(body, geoUri, description, zoomLevel, assetType) - } - - override suspend fun createPoll( - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind, - ): Result { - return liveTimeline.createPoll(question, answers, maxSelections, pollKind) - } - - override suspend fun editPoll( - pollStartId: EventId, - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind, - ): Result { - return liveTimeline.editPoll(pollStartId, question, answers, maxSelections, pollKind) - } - - override suspend fun sendPollResponse( - pollStartId: EventId, - answers: List - ): Result { - return liveTimeline.sendPollResponse(pollStartId, answers) - } - - override suspend fun endPoll( - pollStartId: EventId, - text: String - ): Result { - return liveTimeline.endPoll(pollStartId, text) - } - override suspend fun typingNotice(isTyping: Boolean) = withContext(roomDispatcher) { runCatching { innerRoom.typingNotice(isTyping) } } - override suspend fun toggleReaction(emoji: String, eventOrTransactionId: EventOrTransactionId): Result { - return liveTimeline.toggleReaction(emoji, eventOrTransactionId) - } - - override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result { - return liveTimeline.forwardEvent(eventId, roomIds) - } - - override suspend fun cancelSend(transactionId: TransactionId): Result { - return liveTimeline.cancelSend(transactionId) - } - override suspend fun inviteUserById(id: UserId): Result = withContext(roomDispatcher) { runCatching { innerRoom.inviteUserById(id.value) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeJoinedRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeJoinedRoom.kt index 2cae27b291..64d0a800d6 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeJoinedRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeJoinedRoom.kt @@ -12,17 +12,9 @@ import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomAlias -import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SendHandle -import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.identity.IdentityStateChange -import io.element.android.libraries.matrix.api.media.AudioInfo -import io.element.android.libraries.matrix.api.media.FileInfo -import io.element.android.libraries.matrix.api.media.ImageInfo -import io.element.android.libraries.matrix.api.media.MediaUploadHandler -import io.element.android.libraries.matrix.api.media.VideoInfo -import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.IntentionalMention @@ -33,16 +25,12 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationSettingsStat import io.element.android.libraries.matrix.api.room.history.RoomHistoryVisibility import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.knock.KnockRequest -import io.element.android.libraries.matrix.api.room.location.AssetType -import io.element.android.libraries.matrix.api.room.message.ReplyParameters import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevels import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility import io.element.android.libraries.matrix.api.timeline.Timeline -import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings -import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.notificationsettings.FakeNotificationSettingsService import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.tests.testutils.lambda.lambdaError @@ -53,7 +41,6 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.test.TestScope -import java.io.File class FakeJoinedRoom( val baseRoom: FakeBaseRoom = FakeBaseRoom(), @@ -63,35 +50,16 @@ class FakeJoinedRoom( override val roomTypingMembersFlow: Flow> = MutableStateFlow(emptyList()), override val identityStateChangesFlow: Flow> = MutableStateFlow(emptyList()), override val roomNotificationSettingsStateFlow: StateFlow = - MutableStateFlow(RoomNotificationSettingsState.Unknown), + MutableStateFlow(RoomNotificationSettingsState.Unknown), override val knockRequestsFlow: Flow> = MutableStateFlow(emptyList()), private val roomNotificationSettingsService: FakeNotificationSettingsService = FakeNotificationSettingsService(), private var createTimelineResult: (CreateTimelineParams) -> Result = { lambdaError() }, - private val sendMessageResult: (String, String?, List) -> Result = { _, _, _ -> lambdaError() }, private val editMessageLambda: (EventId, String, String?, List) -> Result = { _, _, _, _ -> lambdaError() }, - private val sendImageResult: (File, File?, ImageInfo, String?, String?, ProgressCallback?, ReplyParameters?) -> Result = - { _, _, _, _, _, _, _ -> lambdaError() }, - private val sendVideoResult: (File, File?, VideoInfo, String?, String?, ProgressCallback?, ReplyParameters?) -> Result = - { _, _, _, _, _, _, _ -> lambdaError() }, - private val sendFileResult: (File, FileInfo, String?, String?, ProgressCallback?, ReplyParameters?) -> Result = - { _, _, _, _, _, _ -> lambdaError() }, - private val sendAudioResult: (File, AudioInfo, String?, String?, ProgressCallback?, ReplyParameters?) -> Result = - { _, _, _, _, _, _ -> lambdaError() }, - private val sendVoiceMessageResult: (File, AudioInfo, List, ProgressCallback?, ReplyParameters?) -> Result = - { _, _, _, _, _ -> lambdaError() }, - private val sendLocationResult: (String, String, String?, Int?, AssetType?) -> Result = { _, _, _, _, _ -> lambdaError() }, private val sendCallNotificationIfNeededResult: () -> Result = { lambdaError() }, private val progressCallbackValues: List> = emptyList(), - private val createPollResult: (String, List, Int, PollKind) -> Result = { _, _, _, _ -> lambdaError() }, - private val editPollResult: (EventId, String, List, Int, PollKind) -> Result = { _, _, _, _, _ -> lambdaError() }, - private val sendPollResponseResult: (EventId, List) -> Result = { _, _ -> lambdaError() }, - private val endPollResult: (EventId, String) -> Result = { _, _ -> lambdaError() }, private val generateWidgetWebViewUrlResult: (MatrixWidgetSettings, String, String?, String?) -> Result = { _, _, _, _ -> lambdaError() }, private val getWidgetDriverResult: (MatrixWidgetSettings) -> Result = { lambdaError() }, private val typingNoticeResult: (Boolean) -> Result = { lambdaError() }, - private val toggleReactionResult: (String, EventOrTransactionId) -> Result = { _, _ -> lambdaError() }, - private val forwardEventResult: (EventId, List) -> Result = { _, _ -> lambdaError() }, - private val cancelSendResult: (TransactionId) -> Result = { lambdaError() }, private val inviteUserResult: (UserId) -> Result = { lambdaError() }, private val setNameResult: (String) -> Result = { lambdaError() }, private val setTopicResult: (String) -> Result = { lambdaError() }, @@ -127,10 +95,6 @@ class FakeJoinedRoom( createTimelineResult(createTimelineParams) } - override suspend fun sendMessage(body: String, htmlBody: String?, intentionalMentions: List): Result = simulateLongTask { - sendMessageResult(body, htmlBody, intentionalMentions) - } - override suspend fun editMessage( eventId: EventId, body: String, @@ -140,174 +104,10 @@ class FakeJoinedRoom( editMessageLambda(eventId, body, htmlBody, intentionalMentions) } - override suspend fun sendImage( - file: File, - thumbnailFile: File?, - imageInfo: ImageInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result = simulateLongTask { - simulateSendMediaProgress(progressCallback) - sendImageResult( - file, - thumbnailFile, - imageInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) - } - - override suspend fun sendVideo( - file: File, - thumbnailFile: File?, - videoInfo: VideoInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result = simulateLongTask { - simulateSendMediaProgress(progressCallback) - sendVideoResult( - file, - thumbnailFile, - videoInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) - } - - override suspend fun sendAudio( - file: File, - audioInfo: AudioInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result = simulateLongTask { - simulateSendMediaProgress(progressCallback) - sendAudioResult( - file, - audioInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) - } - - override suspend fun sendFile( - file: File, - fileInfo: FileInfo, - caption: String?, - formattedCaption: String?, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result = simulateLongTask { - simulateSendMediaProgress(progressCallback) - sendFileResult( - file, - fileInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) - } - - override suspend fun sendVoiceMessage( - file: File, - audioInfo: AudioInfo, - waveform: List, - progressCallback: ProgressCallback?, - replyParameters: ReplyParameters?, - ): Result = simulateLongTask { - simulateSendMediaProgress(progressCallback) - sendVoiceMessageResult( - file, - audioInfo, - waveform, - progressCallback, - replyParameters, - ) - } - - override suspend fun sendLocation( - body: String, - geoUri: String, - description: String?, - zoomLevel: Int?, - assetType: AssetType?, - ): Result = simulateLongTask { - return sendLocationResult( - body, - geoUri, - description, - zoomLevel, - assetType, - ) - } - - override suspend fun createPoll(question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = simulateLongTask { - return createPollResult( - question, - answers, - maxSelections, - pollKind, - ) - } - - override suspend fun editPoll( - pollStartId: EventId, - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind - ): Result = simulateLongTask { - return editPollResult( - pollStartId, - question, - answers, - maxSelections, - pollKind, - ) - } - - override suspend fun sendPollResponse(pollStartId: EventId, answers: List): Result = simulateLongTask { - return sendPollResponseResult( - pollStartId, - answers, - ) - } - - override suspend fun endPoll(pollStartId: EventId, text: String): Result = simulateLongTask { - endPollResult( - pollStartId, - text, - ) - } - override suspend fun typingNotice(isTyping: Boolean): Result = simulateLongTask { typingNoticeResult(isTyping) } - override suspend fun toggleReaction(emoji: String, eventOrTransactionId: EventOrTransactionId): Result = simulateLongTask { - toggleReactionResult(emoji, eventOrTransactionId) - } - - override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = simulateLongTask { - forwardEventResult(eventId, roomIds) - } - - override suspend fun cancelSend(transactionId: TransactionId): Result = simulateLongTask { - cancelSendResult(transactionId) - } - override suspend fun inviteUserById(id: UserId): Result = simulateLongTask { inviteUserResult(id) } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt index 859f81b5c3..3aa3a2e186 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/FakeTimeline.kt @@ -10,6 +10,7 @@ package io.element.android.libraries.matrix.test.timeline import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.TransactionId import io.element.android.libraries.matrix.api.media.AudioInfo import io.element.android.libraries.matrix.api.media.FileInfo import io.element.android.libraries.matrix.api.media.ImageInfo @@ -26,6 +27,8 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransa import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.tests.testutils.lambda.lambdaError +import io.element.android.tests.testutils.simulateLongTask +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow @@ -47,23 +50,31 @@ class FakeTimeline( ) ), override val membershipChangeEventReceived: Flow = MutableSharedFlow(), + private val progressCallbackValues: List> = emptyList(), + private val cancelSendResult: (TransactionId) -> Result = { lambdaError() }, ) : Timeline { var sendMessageLambda: ( body: String, htmlBody: String?, intentionalMentions: List, ) -> Result = { _, _, _ -> - Result.success(Unit) + lambdaError() + } + + override suspend fun cancelSend(transactionId: TransactionId): Result = simulateLongTask { + cancelSendResult(transactionId) } override suspend fun sendMessage( body: String, htmlBody: String?, intentionalMentions: List, - ): Result = sendMessageLambda(body, htmlBody, intentionalMentions) + ): Result = simulateLongTask { + sendMessageLambda(body, htmlBody, intentionalMentions) + } var redactEventLambda: (eventOrTransactionId: EventOrTransactionId, reason: String?) -> Result = { _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun redactEvent( @@ -77,7 +88,7 @@ class FakeTimeline( htmlBody: String?, intentionalMentions: List, ) -> Result = { _, _, _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun editMessage( @@ -117,7 +128,7 @@ class FakeTimeline( intentionalMentions: List, fromNotification: Boolean, ) -> Result = { _, _, _, _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun replyMessage( @@ -154,15 +165,18 @@ class FakeTimeline( formattedCaption: String?, progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, - ): Result = sendImageLambda( - file, - thumbnailFile, - imageInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) + ): Result = simulateLongTask { + simulateSendMediaProgress(progressCallback) + sendImageLambda( + file, + thumbnailFile, + imageInfo, + caption, + formattedCaption, + progressCallback, + replyParameters, + ) + } var sendVideoLambda: ( file: File, @@ -184,15 +198,18 @@ class FakeTimeline( formattedCaption: String?, progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, - ): Result = sendVideoLambda( - file, - thumbnailFile, - videoInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) + ): Result = simulateLongTask { + simulateSendMediaProgress(progressCallback) + sendVideoLambda( + file, + thumbnailFile, + videoInfo, + caption, + formattedCaption, + progressCallback, + replyParameters, + ) + } var sendAudioLambda: ( file: File, @@ -212,14 +229,17 @@ class FakeTimeline( formattedCaption: String?, progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, - ): Result = sendAudioLambda( - file, - audioInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) + ): Result = simulateLongTask { + simulateSendMediaProgress(progressCallback) + sendAudioLambda( + file, + audioInfo, + caption, + formattedCaption, + progressCallback, + replyParameters, + ) + } var sendFileLambda: ( file: File, @@ -239,14 +259,17 @@ class FakeTimeline( formattedCaption: String?, progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, - ): Result = sendFileLambda( - file, - fileInfo, - caption, - formattedCaption, - progressCallback, - replyParameters, - ) + ): Result = simulateLongTask { + simulateSendMediaProgress(progressCallback) + sendFileLambda( + file, + fileInfo, + caption, + formattedCaption, + progressCallback, + replyParameters, + ) + } var sendVoiceMessageLambda: ( file: File, @@ -264,13 +287,16 @@ class FakeTimeline( waveform: List, progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, - ): Result = sendVoiceMessageLambda( - file, - audioInfo, - waveform, - progressCallback, - replyParameters, - ) + ): Result = simulateLongTask { + simulateSendMediaProgress(progressCallback) + sendVoiceMessageLambda( + file, + audioInfo, + waveform, + progressCallback, + replyParameters, + ) + } var sendLocationLambda: ( body: String, @@ -279,7 +305,7 @@ class FakeTimeline( zoomLevel: Int?, assetType: AssetType?, ) -> Result = { _, _, _, _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun sendLocation( @@ -288,24 +314,30 @@ class FakeTimeline( description: String?, zoomLevel: Int?, assetType: AssetType?, - ): Result = sendLocationLambda( - body, - geoUri, - description, - zoomLevel, - assetType - ) + ): Result = simulateLongTask { + sendLocationLambda( + body, + geoUri, + description, + zoomLevel, + assetType, + ) + } - var toggleReactionLambda: (emoji: String, eventOrTransactionId: EventOrTransactionId) -> Result = { _, _ -> Result.success(Unit) } + var toggleReactionLambda: (emoji: String, eventOrTransactionId: EventOrTransactionId) -> Result = { _, _ -> lambdaError() } - override suspend fun toggleReaction(emoji: String, eventOrTransactionId: EventOrTransactionId): Result = toggleReactionLambda( - emoji, - eventOrTransactionId - ) + override suspend fun toggleReaction(emoji: String, eventOrTransactionId: EventOrTransactionId): Result = simulateLongTask { + toggleReactionLambda( + emoji, + eventOrTransactionId, + ) + } - var forwardEventLambda: (eventId: EventId, roomIds: List) -> Result = { _, _ -> Result.success(Unit) } + var forwardEventLambda: (eventId: EventId, roomIds: List) -> Result = { _, _ -> lambdaError() } - override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = forwardEventLambda(eventId, roomIds) + override suspend fun forwardEvent(eventId: EventId, roomIds: List): Result = simulateLongTask { + forwardEventLambda(eventId, roomIds) + } var createPollLambda: ( question: String, @@ -313,20 +345,17 @@ class FakeTimeline( maxSelections: Int, pollKind: PollKind, ) -> Result = { _, _, _, _ -> - Result.success(Unit) + lambdaError() } - override suspend fun createPoll( - question: String, - answers: List, - maxSelections: Int, - pollKind: PollKind, - ): Result = createPollLambda( - question, - answers, - maxSelections, - pollKind - ) + override suspend fun createPoll(question: String, answers: List, maxSelections: Int, pollKind: PollKind): Result = simulateLongTask { + createPollLambda( + question, + answers, + maxSelections, + pollKind, + ) + } var editPollLambda: ( pollStartId: EventId, @@ -335,7 +364,7 @@ class FakeTimeline( maxSelections: Int, pollKind: PollKind, ) -> Result = { _, _, _, _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun editPoll( @@ -343,44 +372,56 @@ class FakeTimeline( question: String, answers: List, maxSelections: Int, - pollKind: PollKind, - ): Result = editPollLambda( - pollStartId, - question, - answers, - maxSelections, - pollKind - ) + pollKind: PollKind + ): Result = simulateLongTask { + editPollLambda( + pollStartId, + question, + answers, + maxSelections, + pollKind, + ) + } var sendPollResponseLambda: ( pollStartId: EventId, answers: List, ) -> Result = { _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun sendPollResponse( pollStartId: EventId, answers: List, - ): Result = sendPollResponseLambda(pollStartId, answers) + ): Result = simulateLongTask { + sendPollResponseLambda( + pollStartId, + answers, + ) + } var endPollLambda: ( pollStartId: EventId, text: String, ) -> Result = { _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun endPoll( pollStartId: EventId, text: String, - ): Result = endPollLambda(pollStartId, text) + ): Result = simulateLongTask { + endPollLambda( + pollStartId, + text, + ) + } var sendReadReceiptLambda: ( eventId: EventId, receiptType: ReceiptType, ) -> Result = { _, _ -> - Result.success(Unit) + lambdaError() } override suspend fun sendReadReceipt( @@ -417,5 +458,12 @@ class FakeTimeline( closeCounter++ } + private suspend fun simulateSendMediaProgress(progressCallback: ProgressCallback?) { + progressCallbackValues.forEach { (current, total) -> + progressCallback?.onProgress(current, total) + delay(1) + } + } + override fun toString() = "FakeTimeline: $name" } diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt index b9508bcfe7..47451faef4 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt @@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.media.MediaUploadHandler import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.message.ReplyParameters +import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Job @@ -49,7 +50,7 @@ class MediaSender @Inject constructor( progressCallback: ProgressCallback?, replyParameters: ReplyParameters?, ): Result { - return room.sendMedia( + return room.liveTimeline.sendMedia( uploadInfo = mediaUploadInfo, progressCallback = progressCallback, caption = caption, @@ -76,7 +77,7 @@ class MediaSender @Inject constructor( compressIfPossible = compressIfPossible, ) .flatMapCatching { info -> - room.sendMedia( + room.liveTimeline.sendMedia( uploadInfo = info, progressCallback = progressCallback, caption = caption, @@ -108,7 +109,7 @@ class MediaSender @Inject constructor( audioInfo = audioInfo, waveform = waveForm, ) - room.sendMedia( + room.liveTimeline.sendMedia( uploadInfo = newInfo, progressCallback = progressCallback, caption = null, @@ -130,7 +131,7 @@ class MediaSender @Inject constructor( ongoingUploadJobs.remove(Job) } - private suspend fun JoinedRoom.sendMedia( + private suspend fun Timeline.sendMedia( uploadInfo: MediaUploadInfo, progressCallback: ProgressCallback?, caption: String?, diff --git a/libraries/mediaupload/api/src/test/kotlin/io/element/android/libraries/mediaupload/api/MediaSenderTest.kt b/libraries/mediaupload/api/src/test/kotlin/io/element/android/libraries/mediaupload/api/MediaSenderTest.kt index 80530c69ab..ae69d85b72 100644 --- a/libraries/mediaupload/api/src/test/kotlin/io/element/android/libraries/mediaupload/api/MediaSenderTest.kt +++ b/libraries/mediaupload/api/src/test/kotlin/io/element/android/libraries/mediaupload/api/MediaSenderTest.kt @@ -17,6 +17,7 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.message.ReplyParameters import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler import io.element.android.libraries.matrix.test.room.FakeJoinedRoom +import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.mediaupload.test.FakeMediaPreProcessor import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore @@ -51,7 +52,9 @@ class MediaSenderTest { Result.success(FakeMediaUploadHandler()) } val room = FakeJoinedRoom( - sendImageResult = sendImageResult + liveTimeline = FakeTimeline().apply { + sendImageLambda = sendImageResult + }, ) val sender = createMediaSender(room = room) @@ -74,14 +77,22 @@ class MediaSenderTest { @Test fun `given a failure in the media upload when sending the whole process fails`() = runTest { + val preProcessor = FakeMediaPreProcessor().apply { + givenImageResult() + } val sendImageResult = lambdaRecorder { _: File, _: File?, _: ImageInfo, _: String?, _: String?, _: ProgressCallback?, _: ReplyParameters? -> Result.failure(Exception()) } val room = FakeJoinedRoom( - sendImageResult = sendImageResult + liveTimeline = FakeTimeline().apply { + sendImageLambda = sendImageResult + }, + ) + val sender = createMediaSender( + preProcessor = preProcessor, + room = room, ) - val sender = createMediaSender(room = room) val uri = Uri.parse("content://image.jpg") val result = sender.sendMedia(uri = uri, mimeType = MimeTypes.Jpeg) @@ -94,10 +105,12 @@ class MediaSenderTest { fun `given a cancellation in the media upload when sending the job is cancelled`() = runTest(StandardTestDispatcher()) { val sendFileResult = lambdaRecorder> { _, _, _, _, _, _ -> - Result.success(FakeMediaUploadHandler()) - } + Result.success(FakeMediaUploadHandler()) + } val room = FakeJoinedRoom( - sendFileResult = sendFileResult + liveTimeline = FakeTimeline().apply { + sendFileLambda = sendFileResult + }, ) val sender = createMediaSender(room = room) val sendJob = launch { diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandlerTest.kt index dfa440bcf0..8a4f535216 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandlerTest.kt @@ -366,7 +366,7 @@ class NotificationBroadcastReceiverHandlerTest { roomId = A_ROOM_ID, ), ) - runCurrent() + advanceUntilIdle() sendMessage.assertions() .isCalledOnce() .with(value(A_MESSAGE), value(null), value(emptyList())) From 4b7b12102a6ab975c29f0a0ecf5a25ec017c7461 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 May 2025 09:10:20 +0200 Subject: [PATCH 21/33] Kotlin 2.1.21 --- .idea/kotlinc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 131e44d798..1e16934f61 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file From 1a6596a89aa725ef040391e3e936c1ad5405c2a8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 May 2025 13:12:01 +0200 Subject: [PATCH 22/33] Fix compilation issues. (#4750) * Fix compilation issues. * Fix compilation issues. --- .../features/login/impl/changeserver/ChangeServerPresenter.kt | 2 +- .../login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt | 2 +- .../login/impl/changeserver/ChangeServerPresenterTest.kt | 2 +- .../login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt index 94510455bc..c0cdf7c06d 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt @@ -58,7 +58,7 @@ class ChangeServerPresenter @Inject constructor( if (enterpriseService.isAllowedToConnectToHomeserver(data.url).not()) { throw UnauthorizedAccountProviderException( unauthorisedAccountProviderTitle = data.title, - authorisedAccountProviderTitles = listOfNotNull(enterpriseService.defaultHomeserver()) + authorisedAccountProviderTitles = enterpriseService.defaultHomeserverList(), ) } authenticationService.setHomeserver(data.url).map { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 5d0f7c41b8..49b94ac504 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -100,7 +100,7 @@ class QrCodeScanPresenter @Inject constructor( if (serverName != null && enterpriseService.isAllowedToConnectToHomeserver(serverName).not()) { throw UnauthorizedAccountProviderException( unauthorisedAccountProviderTitle = serverName, - authorisedAccountProviderTitles = listOfNotNull(enterpriseService.defaultHomeserver()) + authorisedAccountProviderTitles = enterpriseService.defaultHomeserverList(), ) } data diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt index 5d4e3bae5f..17c4cc0ae7 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt @@ -84,7 +84,7 @@ class ChangeServerPresenterTest { createPresenter( enterpriseService = FakeEnterpriseService( isAllowedToConnectToHomeserverResult = isAllowedToConnectToHomeserverResult, - defaultHomeserverResult = { "element.io" }, + defaultHomeserverListResult = { listOf("element.io") }, ), ).test { val initialState = awaitItem() diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt index 18a6678388..ccf2fe4988 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenterTest.kt @@ -82,7 +82,7 @@ class QrCodeScanPresenterTest { qrCodeLoginDataFactory = qrCodeLoginDataFactory, enterpriseService = FakeEnterpriseService( isAllowedToConnectToHomeserverResult = { false }, - defaultHomeserverResult = { "element.io" } + defaultHomeserverListResult = { listOf("element.io") }, ) ) presenter.test { From 01abba6205fda06b4bc0da51443f1a89cea56e5d Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 20 May 2025 17:33:25 +0200 Subject: [PATCH 23/33] Use the right live timeline instance in `RustRoomFactory` (#4745) --- .../matrix/impl/room/RustRoomFactory.kt | 79 ++++++++----------- 1 file changed, 31 insertions(+), 48 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt index 511e94be2f..d76de248d0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomFactory.kt @@ -9,7 +9,6 @@ package io.element.android.libraries.matrix.impl.room import io.element.android.appconfig.TimelineConfig import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.RoomId @@ -21,6 +20,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.awaitLoaded import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewInfoMapper +import io.element.android.libraries.matrix.impl.roomlist.fullRoomWithTimeline import io.element.android.libraries.matrix.impl.roomlist.roomOrNull import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.CoroutineScope @@ -30,10 +30,10 @@ import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.Membership +import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.RoomListItem import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean -import org.matrix.rustcomponents.sdk.Room as SdkRoom import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService class RustRoomFactory( @@ -56,11 +56,6 @@ class RustRoomFactory( private val mutex = Mutex() private val isDestroyed: AtomicBoolean = AtomicBoolean(false) - private data class RustRoomReferences( - val roomListItem: RoomListItem, - val room: SdkRoom, - ) - private val roomInfoMapper = RoomInfoMapper() private val eventFilters = TimelineConfig.excludedEvents @@ -84,17 +79,22 @@ class RustRoomFactory( Timber.d("Room factory is destroyed, returning null for $roomId") return@withContext null } - val roomReferences = awaitRoomReferences(roomId) ?: return@withContext null - getBaseRoom(roomReferences) + val roomListItem = awaitRoomListItem(roomId) ?: return@withContext null + getBaseRoom(roomListItem) } } - private suspend fun getBaseRoom(roomReferences: RustRoomReferences): RustBaseRoom? { - val initialRoomInfo = roomReferences.room.roomInfo() + private suspend fun getBaseRoom(roomListItem: RoomListItem): RustBaseRoom? { + val sdkRoom = innerClient.getRoom(roomListItem.id()) ?: return null + return getBaseRoom(sdkRoom) + } + + private suspend fun getBaseRoom(sdkRoom: Room): RustBaseRoom { + val initialRoomInfo = sdkRoom.roomInfo() return RustBaseRoom( sessionId = sessionId, deviceId = deviceId, - innerRoom = roomReferences.room, + innerRoom = sdkRoom, coroutineDispatchers = dispatchers, roomSyncSubscriber = roomSyncSubscriber, roomMembershipObserver = roomMembershipObserver, @@ -110,22 +110,18 @@ class RustRoomFactory( Timber.d("Room factory is destroyed, returning null for $roomId") return@withContext null } - val roomReferences = awaitRoomReferences(roomId) ?: return@withContext null - - if (roomReferences.room.membership() == Membership.JOINED) { - val baseRoom = getBaseRoom(roomReferences) ?: return@withContext null + val roomListItem = awaitRoomListItem(roomId) ?: return@withContext null + if (roomListItem.membership() == Membership.JOINED) { // Init the live timeline in the SDK from the RoomListItem - if (!roomReferences.roomListItem.isTimelineInitialized()) { - roomReferences.roomListItem.initTimeline(eventFilters, "LIVE") - } + val sdkRoom = roomListItem.fullRoomWithTimeline(eventFilters) GetRoomResult.Joined( JoinedRustRoom( - baseRoom = baseRoom, + baseRoom = getBaseRoom(sdkRoom), notificationSettingsService = notificationSettingsService, roomContentForwarder = roomContentForwarder, - liveInnerTimeline = roomReferences.room.timeline(), + liveInnerTimeline = sdkRoom.timeline(), coroutineDispatchers = dispatchers, systemClock = systemClock, featureFlagService = featureFlagService, @@ -133,7 +129,7 @@ class RustRoomFactory( ) } else { val preview = try { - roomReferences.roomListItem.previewRoom(via = emptyList()) + roomListItem.previewRoom(via = emptyList()) } catch (e: Exception) { Timber.e(e, "Failed to get room preview for $roomId") return@withContext null @@ -142,7 +138,7 @@ class RustRoomFactory( GetRoomResult.NotJoined( NotJoinedRustRoom( sessionId = sessionId, - localRoom = getBaseRoom(roomReferences), + localRoom = getBaseRoom(roomListItem), previewInfo = RoomPreviewInfoMapper.map(preview.info()), ) ) @@ -150,36 +146,23 @@ class RustRoomFactory( } } - private fun getRoomReferences(roomId: RoomId): RustRoomReferences? { - val roomListItem = innerRoomListService.roomOrNull(roomId.value) + /** + * Get the Rust room list item for a room, retrying after the room list is loaded if necessary. + */ + private suspend fun awaitRoomListItem(roomId: RoomId): RoomListItem? { + var roomListItem = innerRoomListService.roomOrNull(roomId.value) + if (roomListItem == null) { + // ... otherwise, lets wait for the SS to load all rooms and check again. + roomListService.allRooms.awaitLoaded() + roomListItem = innerRoomListService.roomOrNull(roomId.value) + } + if (roomListItem == null) { Timber.d("Room not found for $roomId") return null } - val room = tryOrNull { - innerClient.getRoom(roomId.value) - } ?: error("Failed to get room for room id: $roomId") - Timber.d("Got room for $roomId") - return RustRoomReferences( - roomListItem = roomListItem, - room = room, - ) - } - - /** - * Get the Rust room references for a room, retrying after the room list is loaded if necessary. - */ - private suspend fun awaitRoomReferences(roomId: RoomId): RustRoomReferences? { - var roomReferences = getRoomReferences(roomId) - - if (roomReferences == null) { - // ... otherwise, lets wait for the SS to load all rooms and check again. - roomListService.allRooms.awaitLoaded() - roomReferences = getRoomReferences(roomId) - } - - return roomReferences + return roomListItem } } From 10bb276a6463bf96845f0d9366c731a86375d0b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 19:24:18 +0000 Subject: [PATCH 24/33] fix(deps): update dependency com.google.firebase:firebase-bom to v33.14.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0aa2f926c7..12cab6324e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -72,7 +72,7 @@ kover_gradle_plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", ve ksp_gradle_plugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } gms_google_services = "com.google.gms:google-services:4.4.2" # https://firebase.google.com/docs/android/setup#available-libraries -google_firebase_bom = "com.google.firebase:firebase-bom:33.13.0" +google_firebase_bom = "com.google.firebase:firebase-bom:33.14.0" firebase_appdistribution_gradle = { module = "com.google.firebase:firebase-appdistribution-gradle", version.ref = "firebaseAppDistribution" } autonomousapps_dependencyanalysis_plugin = { module = "com.autonomousapps:dependency-analysis-gradle-plugin", version.ref = "dependencyAnalysis" } ksp_plugin = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } From 6d8d758351e74022a16ac01d67957a493d11d531 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 17:39:58 +0200 Subject: [PATCH 25/33] fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.21 (#4759) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.21 * Fix API breaks --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jorge Martín --- gradle/libs.versions.toml | 2 +- .../matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0aa2f926c7..e55a7baf07 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -169,7 +169,7 @@ jsoup = "org.jsoup:jsoup:1.20.1" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.1.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.5.13" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.5.21" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt index 7f179ad2f7..77152776aa 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt @@ -49,6 +49,7 @@ class DefaultCallWidgetSettingsProvider @Inject constructor( sentryEnvironment = if (buildMeta.buildType == BuildType.RELEASE) "RELEASE" else "DEBUG", parentUrl = null, hideHeader = true, + controlledMediaDevices = false, ) val rustWidgetSettings = newVirtualElementCallWidget(options) return MatrixWidgetSettings.fromRustWidgetSettings(rustWidgetSettings) From c3c21bcfcc54a2eaceb3794231ab2185eb8f2955 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 21 May 2025 17:43:25 +0200 Subject: [PATCH 26/33] Setting version for the release 25.05.4 --- plugins/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index e9b7975810..9c79b70426 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -32,7 +32,7 @@ private const val versionYear = 25 private const val versionMonth = 5 // Note: must be in [0,99] -private const val versionReleaseNumber = 3 +private const val versionReleaseNumber = 4 object Versions { const val VERSION_CODE = (2000 + versionYear) * 10_000 + versionMonth * 100 + versionReleaseNumber From 01eddc162b6b1f41c8a60b848cf56aa63f7c0a7a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 21 May 2025 17:44:55 +0200 Subject: [PATCH 27/33] Adding fastlane file for version 25.05.4 --- fastlane/metadata/android/en-US/changelogs/202505040.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/202505040.txt diff --git a/fastlane/metadata/android/en-US/changelogs/202505040.txt b/fastlane/metadata/android/en-US/changelogs/202505040.txt new file mode 100644 index 0000000000..8955ade680 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/202505040.txt @@ -0,0 +1,2 @@ +Main changes in this version: bug fixes and improvements. +Full changelog: https://github.com/element-hq/element-x-android/releases From 50f5f193d5217e8c33e3c4f320077c90c16b2383 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 21 May 2025 18:18:42 +0200 Subject: [PATCH 28/33] Changelog for version 25.05.4 --- CHANGES.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 04a7fa528e..b06cdd6603 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,50 @@ + + +Changes in Element X v25.05.4 +============================= + +Rust SDK: https://github.com/matrix-org/matrix-rust-sdk/releases/tag/matrix-sdk-ffi%2F20250521 + +## What's Changed +### 🙌 Improvements +* Change (report room) : check if server supports the report room api by @ganfra in https://github.com/element-hq/element-x-android/pull/4718 +### 🐛 Bugfixes +* Improve audio focus management by @bmarty in https://github.com/element-hq/element-x-android/pull/4707 +* When transcoding a video fails, send it as a file by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4257 +* Disable mutliple click (parallel or serial) on a room by @bmarty in https://github.com/element-hq/element-x-android/pull/4683 +* Fix generic mime type used when externally sharing several files by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4715 +* Fix issues on JoinedRoom / BaseRoom by @bmarty in https://github.com/element-hq/element-x-android/pull/4724 +* Use the right live timeline instance in `RustRoomFactory` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4745 +### 🗣 Translations +* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4739 +### 🧱 Build +* Ensure the CI is marked as failed when Maestro test is failing by @bmarty in https://github.com/element-hq/element-x-android/pull/4700 +* Trigger pipeline build when a release tag is pushed by @bmarty in https://github.com/element-hq/element-x-android/pull/4741 +* Fix compilation issues. by @bmarty in https://github.com/element-hq/element-x-android/pull/4750 +### 📄 Documentation +* README.md: fix broken link by @richvdh in https://github.com/element-hq/element-x-android/pull/4728 +### Dependency upgrades +* chore(config): migrate renovate config by @renovate in https://github.com/element-hq/element-x-android/pull/4688 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.13 by @renovate in https://github.com/element-hq/element-x-android/pull/4716 +* fix(deps): update dependency io.sentry:sentry-android to v8.12.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4717 +* chore(deps): update plugin sonarqube to v6.2.0.5505 by @renovate in https://github.com/element-hq/element-x-android/pull/4725 +* fix(deps): update dependency com.posthog:posthog-android to v3.15.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4723 +* fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v2.12.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4727 +* chore(deps): update codecov/codecov-action action to v5.4.3 by @renovate in https://github.com/element-hq/element-x-android/pull/4730 +* fix(deps): update kotlin by @renovate in https://github.com/element-hq/element-x-android/pull/4713 +* fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v3 by @renovate in https://github.com/element-hq/element-x-android/pull/4729 +* fix(deps): update kotlinpoet to v2.2.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4732 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.21 by @renovate in https://github.com/element-hq/element-x-android/pull/4759 +### Others +* Remove event cache feature flag by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4719 +* Check homeserver when login using qr code by @bmarty in https://github.com/element-hq/element-x-android/pull/4708 +* Merge on boarding module to login module by @bmarty in https://github.com/element-hq/element-x-android/pull/4746 +* Allow configuration to provide multiple account providers. by @bmarty in https://github.com/element-hq/element-x-android/pull/4742 +* Reduce API of JoinedRoom, caller must use the Timeline API from liveTimeline instead by @bmarty in https://github.com/element-hq/element-x-android/pull/4731 + + +**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v25.05.3...v25.05.4 + Changes in Element X v25.05.3 ============================= From bc759e41293cfc9eb0c05acba3627db24ae54477 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 18:19:24 +0200 Subject: [PATCH 29/33] fix(deps): update datastore to v1.1.7 (#4754) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e55a7baf07..fbd8ac9e68 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ firebaseAppDistribution = "5.1.1" # AndroidX core = "1.16.0" -datastore = "1.1.6" +datastore = "1.1.7" constraintlayout = "2.2.1" constraintlayout_compose = "1.1.1" lifecycle = "2.9.0" From f20caebdcb26ef64272c5747826f6a82d8d25a2d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 21 May 2025 18:19:42 +0200 Subject: [PATCH 30/33] Add support for login link (#4752) * Add support for login link https://mobile.element.io/element?account_provider=example.org&login_hint=mxid:@alice:example.org * Update screenshots * Reduce code duplication * Add test on OnBoardingPresenter * Fix tool * Ignore login parameter if user is not allowed to connect to the provided server. * Improve tests. * Cleanup * Revert change on Project.xml. * Add documentation * Improve LoginHelper * Rename LoginFlow to LoginMode Move LoginFlow to package io.element.android.features.login.impl.login Rename some implementation of LoginMode Rename LoginFlowView to LoginModeView * Change launchMode of MainActivity from `singleTop` to `singleTask` Using launchMode singleTask to avoid multiple instances of the Activity when the app is already open. This is important for incoming share and for opening the application from a mobile.element.io link. Closes #4074 --------- Co-authored-by: ElementBot --- app/src/main/AndroidManifest.xml | 26 ++- appnav/build.gradle.kts | 1 + .../android/appnav/NotLoggedInFlowNode.kt | 15 ++ .../io/element/android/appnav/RootFlowNode.kt | 43 ++++- .../android/appnav/intent/IntentResolver.kt | 15 +- .../appnav/intent/IntentResolverTest.kt | 29 +++- .../features/login/api/LoginEntryPoint.kt | 6 + .../features/login/api/LoginIntentResolver.kt | 12 ++ .../android/features/login/api/LoginParams.kt | 21 +++ features/login/impl/build.gradle.kts | 1 + .../login/impl/DefaultLoginEntryPoint.kt | 8 + .../login/impl/DefaultLoginIntentResolver.kt | 30 ++++ .../features/login/impl/LoginFlowNode.kt | 52 ++++-- .../features/login/impl/login/LoginHelper.kt | 119 ++++++++++++++ .../features/login/impl/login/LoginMode.kt | 16 ++ .../login/impl/login/LoginModeView.kt | 87 ++++++++++ .../impl/onboarding/OnBoardingPresenter.kt | 44 ------ .../login/impl/onboarding/OnBoardingState.kt | 15 -- .../ConfirmAccountProviderPresenter.kt | 104 ++---------- .../ConfirmAccountProviderState.kt | 12 +- .../ConfirmAccountProviderStateProvider.kt | 7 +- .../ConfirmAccountProviderView.kt | 61 ++----- .../screens/onboarding/OnBoardingEvents.kt | 16 ++ .../onboarding/OnBoardingNode.kt | 40 ++++- .../screens/onboarding/OnBoardingPresenter.kt | 77 +++++++++ .../screens/onboarding/OnBoardingState.kt | 24 +++ .../onboarding/OnBoardingStateProvider.kt | 11 +- .../onboarding/OnBoardingView.kt | 60 ++++++- .../impl/DefaultLoginIntentResolverTest.kt | 81 ++++++++++ .../onboarding/OnBoardingPresenterTest.kt | 68 -------- .../ConfirmAccountProviderPresenterTest.kt | 83 +++++----- .../onboarding/OnBoardingPresenterTest.kt | 149 ++++++++++++++++++ .../onboarding/OnboardingViewTest.kt | 44 +++++- features/login/test/build.gradle.kts | 19 +++ .../login/test/FakeLoginIntentResolver.kt | 20 +++ .../api/auth/MatrixAuthenticationService.kt | 5 +- .../auth/RustMatrixAuthenticationService.kt | 7 +- .../android/libraries/matrix/test/TestData.kt | 4 +- .../auth/FakeMatrixAuthenticationService.kt | 5 +- ...ns.onboarding_OnBoardingView_Day_0_en.png} | 0 ...ns.onboarding_OnBoardingView_Day_1_en.png} | 0 ...ns.onboarding_OnBoardingView_Day_2_en.png} | 0 ...ns.onboarding_OnBoardingView_Day_3_en.png} | 0 ...ns.onboarding_OnBoardingView_Day_4_en.png} | 0 ...ens.onboarding_OnBoardingView_Day_5_en.png | 3 + ....onboarding_OnBoardingView_Night_0_en.png} | 0 ....onboarding_OnBoardingView_Night_1_en.png} | 0 ....onboarding_OnBoardingView_Night_2_en.png} | 0 ....onboarding_OnBoardingView_Night_3_en.png} | 0 ....onboarding_OnBoardingView_Night_4_en.png} | 0 ...s.onboarding_OnBoardingView_Night_5_en.png | 3 + tools/adb/deeplink_mobile.sh | 12 ++ 52 files changed, 1092 insertions(+), 363 deletions(-) create mode 100644 features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginIntentResolver.kt create mode 100644 features/login/api/src/main/kotlin/io/element/android/features/login/api/LoginParams.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginMode.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginModeView.kt delete mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenter.kt delete mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingState.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingEvents.kt rename features/login/impl/src/main/kotlin/io/element/android/features/login/impl/{ => screens}/onboarding/OnBoardingNode.kt (55%) create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingState.kt rename features/login/impl/src/main/kotlin/io/element/android/features/login/impl/{ => screens}/onboarding/OnBoardingStateProvider.kt (67%) rename features/login/impl/src/main/kotlin/io/element/android/features/login/impl/{ => screens}/onboarding/OnBoardingView.kt (75%) create mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolverTest.kt delete mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/onboarding/OnBoardingPresenterTest.kt create mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenterTest.kt rename features/login/impl/src/test/kotlin/io/element/android/features/login/impl/{ => screens}/onboarding/OnboardingViewTest.kt (67%) create mode 100644 features/login/test/build.gradle.kts create mode 100644 features/login/test/src/main/kotlin/io/element/android/features/login/test/FakeLoginIntentResolver.kt rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Day_0_en.png => features.login.impl.screens.onboarding_OnBoardingView_Day_0_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Day_1_en.png => features.login.impl.screens.onboarding_OnBoardingView_Day_1_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Day_2_en.png => features.login.impl.screens.onboarding_OnBoardingView_Day_2_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Day_3_en.png => features.login.impl.screens.onboarding_OnBoardingView_Day_3_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Day_4_en.png => features.login.impl.screens.onboarding_OnBoardingView_Day_4_en.png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/features.login.impl.screens.onboarding_OnBoardingView_Day_5_en.png rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Night_0_en.png => features.login.impl.screens.onboarding_OnBoardingView_Night_0_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Night_1_en.png => features.login.impl.screens.onboarding_OnBoardingView_Night_1_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Night_2_en.png => features.login.impl.screens.onboarding_OnBoardingView_Night_2_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Night_3_en.png => features.login.impl.screens.onboarding_OnBoardingView_Night_3_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{features.login.impl.onboarding_OnBoardingView_Night_4_en.png => features.login.impl.screens.onboarding_OnBoardingView_Night_4_en.png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/features.login.impl.screens.onboarding_OnBoardingView_Night_5_en.png create mode 100755 tools/adb/deeplink_mobile.sh diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c26c9a5a51..6619603f93 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,11 +34,17 @@ android:value='androidx.startup' /> + @@ -54,6 +60,9 @@ android:host="open" android:scheme="elementx" /> + @@ -80,6 +89,21 @@ + + + + + + + + + + + +