diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index 6b6ac8243e3..5bfc0b6982a 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -20,7 +20,7 @@ jobs: - run: | npm install --save-dev @babel/plugin-transform-flow-strip-types - name: Danger - uses: danger/danger-js@12.3.3 + uses: danger/danger-js@12.3.4 with: args: "--dangerfile ./tools/danger/dangerfile.js" env: diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index b69c693f197..009d30e93b7 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -294,7 +294,7 @@ jobs: yarn add danger-plugin-lint-report --dev - name: Danger lint if: always() - uses: danger/danger-js@12.3.3 + uses: danger/danger-js@12.3.4 with: args: "--dangerfile ./tools/danger/dangerfile-lint.js" env: diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt index 2d2b645f3fb..2bdf0836837 100644 --- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt +++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt @@ -14,7 +14,6 @@ import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier @@ -26,6 +25,7 @@ import androidx.lifecycle.repeatOnLifecycle import com.bumble.appyx.core.integration.NodeHost import com.bumble.appyx.core.integrationpoint.NodeActivity import com.bumble.appyx.core.plugin.NodeReadyObserver +import io.element.android.compound.theme.ElementTheme import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService @@ -61,7 +61,10 @@ class MainActivity : NodeActivity() { @Composable private fun MainContent(appBindings: AppBindings) { val migrationState = appBindings.migrationEntryPoint().present() - ElementThemeApp(appBindings.preferencesStore()) { + ElementThemeApp( + appPreferencesStore = appBindings.preferencesStore(), + enterpriseService = appBindings.enterpriseService(), + ) { CompositionLocalProvider( LocalSnackbarDispatcher provides appBindings.snackbarDispatcher(), LocalUriHandler provides SafeUriHandler(this), @@ -69,8 +72,8 @@ class MainActivity : NodeActivity() { ) { Box( modifier = Modifier - .fillMaxSize() - .background(MaterialTheme.colorScheme.background), + .fillMaxSize() + .background(ElementTheme.colors.bgCanvasDefault), ) { if (migrationState.migrationAction.isSuccess()) { MainNodeHost() diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index e24fdbb9fb2..4aa5d2c267a 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -9,6 +9,7 @@ package io.element.android.x.di import com.squareup.anvil.annotations.ContributesTo import io.element.android.features.api.MigrationEntryPoint +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.rageshake.api.reporter.BugReporter @@ -35,4 +36,6 @@ interface AppBindings { fun lockScreenEntryPoint(): LockScreenEntryPoint fun analyticsService(): AnalyticsService + + fun enterpriseService(): EnterpriseService } diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml index a89ce28bfd3..8fbfba96a16 100644 --- a/app/src/main/res/xml/locales_config.xml +++ b/app/src/main/res/xml/locales_config.xml @@ -25,6 +25,7 @@ + diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml index b9f3d039863..96add8d148c 100644 --- a/app/src/main/res/xml/network_security_config.xml +++ b/app/src/main/res/xml/network_security_config.xml @@ -1,8 +1,15 @@ - + - + + + + + + @@ -24,12 +31,4 @@ lan localdomain - - - - - - - - diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index ced5d0033a7..1d3c78b88a3 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -14,9 +14,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle import com.bumble.appyx.core.composable.PermanentChild import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext @@ -52,8 +50,6 @@ import io.element.android.features.ftue.api.FtueEntryPoint import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.ftue.api.state.FtueState import io.element.android.features.logout.api.LogoutEntryPoint -import io.element.android.features.networkmonitor.api.NetworkMonitor -import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.preferences.api.PreferencesEntryPoint import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.features.roomdirectory.api.RoomDirectoryEntryPoint @@ -77,18 +73,13 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData -import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails import io.element.android.libraries.matrix.api.verification.SessionVerificationServiceListener import io.element.android.libraries.preferences.api.store.EnableNativeSlidingSyncUseCase import io.element.android.services.appnavstate.api.AppNavigationStateService import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import timber.log.Timber @@ -107,7 +98,6 @@ class LoggedInFlowNode @AssistedInject constructor( private val userProfileEntryPoint: UserProfileEntryPoint, private val ftueEntryPoint: FtueEntryPoint, private val coroutineScope: CoroutineScope, - private val networkMonitor: NetworkMonitor, private val ftueService: FtueService, private val roomDirectoryEntryPoint: RoomDirectoryEntryPoint, private val shareEntryPoint: ShareEntryPoint, @@ -133,7 +123,6 @@ class LoggedInFlowNode @AssistedInject constructor( fun onOpenBugReport() } - private val syncService = matrixClient.syncService() private val loggedInFlowProcessor = LoggedInEventProcessor( snackbarDispatcher, matrixClient.roomMembershipObserver(), @@ -147,6 +136,7 @@ class LoggedInFlowNode @AssistedInject constructor( override fun onBuilt() { super.onBuilt() + lifecycle.subscribe( onCreate = { appNavigationStateService.onNavigateToSession(id, matrixClient.sessionId) @@ -165,12 +155,6 @@ class LoggedInFlowNode @AssistedInject constructor( } .launchIn(lifecycleScope) }, - onStop = { - coroutineScope.launch { - // Counterpart startSync is done in observeSyncStateAndNetworkStatus method. - syncService.stopSync() - } - }, onDestroy = { appNavigationStateService.onLeavingSpace(id) appNavigationStateService.onLeavingSession(id) @@ -178,7 +162,6 @@ class LoggedInFlowNode @AssistedInject constructor( matrixClient.sessionVerificationService().setListener(null) } ) - observeSyncStateAndNetworkStatus() setupSendingQueue() } @@ -186,31 +169,6 @@ class LoggedInFlowNode @AssistedInject constructor( sendingQueue.launchIn(lifecycleScope) } - @OptIn(FlowPreview::class) - private fun observeSyncStateAndNetworkStatus() { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - combine( - // small debounce to avoid spamming startSync when the state is changing quickly in case of error. - syncService.syncState.debounce(100), - networkMonitor.connectivity - ) { syncState, networkStatus -> - Pair(syncState, networkStatus) - } - .onStart { - // Temporary fix to ensure that the sync is started even if the networkStatus is offline. - syncService.startSync() - } - .collect { (syncState, networkStatus) -> - Timber.d("Sync state: $syncState, network status: $networkStatus") - if (syncState != SyncState.Running && networkStatus == NetworkStatus.Online) { - syncService.startSync() - } - } - } - } - } - sealed interface NavTarget : Parcelable { @Parcelize data object Placeholder : NavTarget diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 5f5eb7566ed..c52ee9cb5d0 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -27,7 +27,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.anvilannotations.ContributesNode -import io.element.android.appnav.di.MatrixClientsHolder +import io.element.android.appnav.di.MatrixSessionCache import io.element.android.appnav.intent.IntentResolver import io.element.android.appnav.intent.ResolvedIntent import io.element.android.appnav.root.RootNavStateFlowFactory @@ -62,7 +62,7 @@ class RootFlowNode @AssistedInject constructor( @Assisted plugins: List, private val authenticationService: MatrixAuthenticationService, private val navStateFlowFactory: RootNavStateFlowFactory, - private val matrixClientsHolder: MatrixClientsHolder, + private val matrixSessionCache: MatrixSessionCache, private val presenter: RootPresenter, private val bugReportEntryPoint: BugReportEntryPoint, private val viewFolderEntryPoint: ViewFolderEntryPoint, @@ -78,14 +78,14 @@ class RootFlowNode @AssistedInject constructor( plugins = plugins ) { override fun onBuilt() { - matrixClientsHolder.restoreWithSavedState(buildContext.savedStateMap) + matrixSessionCache.restoreWithSavedState(buildContext.savedStateMap) super.onBuilt() observeNavState() } override fun onSaveInstanceState(state: MutableSavedStateMap) { super.onSaveInstanceState(state) - matrixClientsHolder.saveIntoSavedState(state) + matrixSessionCache.saveIntoSavedState(state) navStateFlowFactory.saveIntoSavedState(state) } @@ -118,7 +118,7 @@ class RootFlowNode @AssistedInject constructor( } private fun switchToNotLoggedInFlow() { - matrixClientsHolder.removeAll() + matrixSessionCache.removeAll() backstack.safeRoot(NavTarget.NotLoggedInFlow) } @@ -131,7 +131,7 @@ class RootFlowNode @AssistedInject constructor( onFailure: () -> Unit, onSuccess: (SessionId) -> Unit, ) { - matrixClientsHolder.getOrRestore(sessionId) + matrixSessionCache.getOrRestore(sessionId) .onSuccess { Timber.v("Succeed to restore session $sessionId") onSuccess(sessionId) @@ -200,7 +200,7 @@ class RootFlowNode @AssistedInject constructor( override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { is NavTarget.LoggedInFlow -> { - val matrixClient = matrixClientsHolder.getOrNull(navTarget.sessionId) ?: return splashNode(buildContext).also { + val matrixClient = matrixSessionCache.getOrNull(navTarget.sessionId) ?: return splashNode(buildContext).also { Timber.w("Couldn't find any session, go through SplashScreen") } val inputs = LoggedInAppScopeFlowNode.Inputs(matrixClient) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixClientsHolder.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt similarity index 61% rename from appnav/src/main/kotlin/io/element/android/appnav/di/MatrixClientsHolder.kt rename to appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt index 2871df28998..302a12d99b9 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixClientsHolder.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt @@ -7,6 +7,7 @@ package io.element.android.appnav.di +import androidx.annotation.VisibleForTesting import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.core.state.SavedStateMap import com.squareup.anvil.annotations.ContributesBinding @@ -25,45 +26,61 @@ import javax.inject.Inject private const val SAVE_INSTANCE_KEY = "io.element.android.x.di.MatrixClientsHolder.SaveInstanceKey" +/** + * In-memory cache for logged in Matrix sessions. + * + * This component contains both the [MatrixClient] and the [SyncOrchestrator] for each session. + */ @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class MatrixClientsHolder @Inject constructor( +class MatrixSessionCache @Inject constructor( private val authenticationService: MatrixAuthenticationService, + private val syncOrchestratorFactory: SyncOrchestrator.Factory, ) : MatrixClientProvider { - private val sessionIdsToMatrixClient = ConcurrentHashMap() + private val sessionIdsToMatrixSession = ConcurrentHashMap() private val restoreMutex = Mutex() init { authenticationService.listenToNewMatrixClients { matrixClient -> - sessionIdsToMatrixClient[matrixClient.sessionId] = matrixClient + val syncOrchestrator = syncOrchestratorFactory.create(matrixClient) + sessionIdsToMatrixSession[matrixClient.sessionId] = InMemoryMatrixSession( + matrixClient = matrixClient, + syncOrchestrator = syncOrchestrator, + ) + syncOrchestrator.start() } } fun removeAll() { - sessionIdsToMatrixClient.clear() + sessionIdsToMatrixSession.clear() } fun remove(sessionId: SessionId) { - sessionIdsToMatrixClient.remove(sessionId) + sessionIdsToMatrixSession.remove(sessionId) } override fun getOrNull(sessionId: SessionId): MatrixClient? { - return sessionIdsToMatrixClient[sessionId] + return sessionIdsToMatrixSession[sessionId]?.matrixClient } override suspend fun getOrRestore(sessionId: SessionId): Result { return restoreMutex.withLock { - when (val matrixClient = getOrNull(sessionId)) { + when (val cached = getOrNull(sessionId)) { null -> restore(sessionId) - else -> Result.success(matrixClient) + else -> Result.success(cached) } } } + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal fun getSyncOrchestrator(sessionId: SessionId): SyncOrchestrator? { + return sessionIdsToMatrixSession[sessionId]?.syncOrchestrator + } + @Suppress("UNCHECKED_CAST") fun restoreWithSavedState(state: SavedStateMap?) { Timber.d("Restore state") - if (state == null || sessionIdsToMatrixClient.isNotEmpty()) { + if (state == null || sessionIdsToMatrixSession.isNotEmpty()) { Timber.w("Restore with non-empty map") return } @@ -79,7 +96,7 @@ class MatrixClientsHolder @Inject constructor( } fun saveIntoSavedState(state: MutableSavedStateMap) { - val sessionKeys = sessionIdsToMatrixClient.keys.toTypedArray() + val sessionKeys = sessionIdsToMatrixSession.keys.toTypedArray() Timber.d("Save matrix session keys = ${sessionKeys.map { it.value }}") state[SAVE_INSTANCE_KEY] = sessionKeys } @@ -88,10 +105,20 @@ class MatrixClientsHolder @Inject constructor( Timber.d("Restore matrix session: $sessionId") return authenticationService.restoreSession(sessionId) .onSuccess { matrixClient -> - sessionIdsToMatrixClient[matrixClient.sessionId] = matrixClient + val syncOrchestrator = syncOrchestratorFactory.create(matrixClient) + sessionIdsToMatrixSession[matrixClient.sessionId] = InMemoryMatrixSession( + matrixClient = matrixClient, + syncOrchestrator = syncOrchestrator, + ) + syncOrchestrator.start() } .onFailure { Timber.e(it, "Fail to restore session") } } } + +private data class InMemoryMatrixSession( + val matrixClient: MatrixClient, + val syncOrchestrator: SyncOrchestrator, +) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt new file mode 100644 index 00000000000..95ef6e54a57 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt @@ -0,0 +1,127 @@ +/* + * 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.appnav.di + +import androidx.annotation.VisibleForTesting +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import io.element.android.features.networkmonitor.api.NetworkMonitor +import io.element.android.features.networkmonitor.api.NetworkStatus +import io.element.android.libraries.core.coroutine.CoroutineDispatchers +import io.element.android.libraries.core.coroutine.childScope +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.sync.SyncState +import io.element.android.services.appnavstate.api.AppForegroundStateService +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.launch +import timber.log.Timber +import java.util.concurrent.atomic.AtomicBoolean +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.seconds + +class SyncOrchestrator @AssistedInject constructor( + @Assisted matrixClient: MatrixClient, + private val appForegroundStateService: AppForegroundStateService, + private val networkMonitor: NetworkMonitor, + dispatchers: CoroutineDispatchers, +) { + @AssistedFactory + interface Factory { + fun create(matrixClient: MatrixClient): SyncOrchestrator + } + + private val syncService = matrixClient.syncService() + + private val tag = "SyncOrchestrator" + + private val coroutineScope = matrixClient.sessionCoroutineScope.childScope(dispatchers.io, tag) + + private val started = AtomicBoolean(false) + + /** + * Starting observing the app state and network state to start/stop the sync service. + * + * Before observing the state, a first attempt at starting the sync service will happen if it's not already running. + */ + fun start() { + if (!started.compareAndSet(false, true)) { + Timber.tag(tag).d("already started, exiting early") + return + } + + coroutineScope.launch { + // Perform an initial sync if the sync service is not running, to check whether the homeserver is accessible + // Otherwise, if the device is offline the sync service will never start and the SyncState will be Idle, not Offline + Timber.tag(tag).d("performing initial sync attempt") + syncService.startSync() + + // Wait until the sync service is not idle, either it will be running or in error/offline state + syncService.syncState.first { it != SyncState.Idle } + + observeStates() + } + } + + @OptIn(FlowPreview::class) + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal fun observeStates() = coroutineScope.launch { + Timber.tag(tag).d("start observing the app and network state") + + combine( + // small debounce to avoid spamming startSync when the state is changing quickly in case of error. + syncService.syncState.debounce(100.milliseconds), + networkMonitor.connectivity, + appForegroundStateService.isInForeground, + appForegroundStateService.isInCall, + appForegroundStateService.isSyncingNotificationEvent, + ) { syncState, networkState, isInForeground, isInCall, isSyncingNotificationEvent -> + val isAppActive = isInForeground || isInCall || isSyncingNotificationEvent + val isNetworkAvailable = networkState == NetworkStatus.Connected + + Timber.tag(tag).d("isAppActive=$isAppActive, isNetworkAvailable=$isNetworkAvailable") + if (syncState == SyncState.Running && !isAppActive) { + SyncStateAction.StopSync + } else if (syncState == SyncState.Idle && isAppActive && isNetworkAvailable) { + SyncStateAction.StartSync + } else { + SyncStateAction.NoOp + } + } + .distinctUntilChanged() + .debounce { action -> + // Don't stop the sync immediately, wait a bit to avoid starting/stopping the sync too often + if (action == SyncStateAction.StopSync) 3.seconds else 0.seconds + } + .onCompletion { + Timber.tag(tag).d("has been stopped") + } + .collect { action -> + when (action) { + SyncStateAction.StartSync -> { + syncService.startSync() + } + SyncStateAction.StopSync -> { + syncService.stopSync() + } + SyncStateAction.NoOp -> Unit + } + } + } +} + +private enum class SyncStateAction { + StartSync, + StopSync, + NoOp, +} diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt index 458e6e5c495..8e66baf8362 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt @@ -32,7 +32,7 @@ class SendQueues @Inject constructor( ) { /** * Launches the send queues retry mechanism in the given [coroutineScope]. - * Makes sure to re-enable all send queues when the network status is [NetworkStatus.Online]. + * Makes sure to re-enable all send queues when the network status is [NetworkStatus.Connected]. */ @OptIn(FlowPreview::class) fun launchIn(coroutineScope: CoroutineScope) { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt index 731072889dd..08e999245bf 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt @@ -9,7 +9,7 @@ package io.element.android.appnav.root import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.core.state.SavedStateMap -import io.element.android.appnav.di.MatrixClientsHolder +import io.element.android.appnav.di.MatrixSessionCache import io.element.android.features.login.api.LoginUserStory import io.element.android.features.preferences.api.CacheService import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -31,7 +31,7 @@ private const val SAVE_INSTANCE_KEY = "io.element.android.x.RootNavStateFlowFact class RootNavStateFlowFactory @Inject constructor( private val authenticationService: MatrixAuthenticationService, private val cacheService: CacheService, - private val matrixClientsHolder: MatrixClientsHolder, + private val matrixSessionCache: MatrixSessionCache, private val imageLoaderHolder: ImageLoaderHolder, private val loginUserStory: LoginUserStory, private val sessionPreferencesStoreFactory: SessionPreferencesStoreFactory, @@ -63,7 +63,7 @@ class RootNavStateFlowFactory @Inject constructor( val initialCacheIndex = savedStateMap.getCacheIndexOrDefault() return cacheService.clearedCacheEventFlow .onEach { sessionId -> - matrixClientsHolder.remove(sessionId) + matrixSessionCache.remove(sessionId) // Ensure image loader will be recreated with the new MatrixClient imageLoaderHolder.remove(sessionId) // Also remove cached value for SessionPreferencesStore diff --git a/appnav/src/main/res/values-tr/translations.xml b/appnav/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..c0a8ccd1361 --- /dev/null +++ b/appnav/src/main/res/values-tr/translations.xml @@ -0,0 +1,5 @@ + + + "Çıkış Yap ve Yükselt" + "Ana sunucunuz artık eski protokolü desteklemiyor. Lütfen oturumu kapatın ve uygulamayı kullanmaya devam etmek için tekrar oturum açın." + diff --git a/appnav/src/test/kotlin/io/element/android/appnav/SyncOrchestratorTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/SyncOrchestratorTest.kt new file mode 100644 index 00000000000..b06ea5ca212 --- /dev/null +++ b/appnav/src/test/kotlin/io/element/android/appnav/SyncOrchestratorTest.kt @@ -0,0 +1,349 @@ +/* + * 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.appnav + +import io.element.android.appnav.di.SyncOrchestrator +import io.element.android.features.networkmonitor.api.NetworkStatus +import io.element.android.features.networkmonitor.test.FakeNetworkMonitor +import io.element.android.libraries.matrix.api.sync.SyncState +import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.test.sync.FakeSyncService +import io.element.android.services.appnavstate.test.FakeAppForegroundStateService +import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.testCoroutineDispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.runTest +import org.junit.Rule +import org.junit.Test +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.seconds + +@OptIn(ExperimentalCoroutinesApi::class) +class SyncOrchestratorTest { + @get:Rule + val warmUpRule = WarmUpRule() + + @Test + fun `when the sync wasn't running before, an initial sync will take place, even with no network`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply { + startSyncLambda = startSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Disconnected) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + ) + + // We start observing with an initial sync + syncOrchestrator.start() + + // Advance the time just enough to make sure the initial sync has run + advanceTimeBy(1.milliseconds) + startSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the sync wasn't running before, an initial sync will take place`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply { + startSyncLambda = startSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + ) + + // We start observing with an initial sync + syncOrchestrator.start() + + // Advance the time just enough to make sure the initial sync has run + advanceTimeBy(1.milliseconds) + startSyncRecorder.assertions().isCalledOnce() + + // If we wait for a while, the sync will not be started again by the observer since it's already running + advanceTimeBy(10.seconds) + startSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the app goes to background and the sync was running, it will be stopped after a delay`() = runTest { + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Running).apply { + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService(initialForegroundValue = true) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // Stop sync was never called + stopSyncRecorder.assertions().isNeverCalled() + + // Now we send the app to background + appForegroundStateService.isInForeground.value = false + + // Stop sync will be called after some delay + stopSyncRecorder.assertions().isNeverCalled() + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the app state changes several times in a short while, stop sync is only called once`() = runTest { + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Running).apply { + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService(initialForegroundValue = true) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // Stop sync was never called + stopSyncRecorder.assertions().isNeverCalled() + + // Now we send the app to background + appForegroundStateService.isInForeground.value = false + + // Ensure the stop action wasn't called yet + stopSyncRecorder.assertions().isNeverCalled() + advanceTimeBy(1.seconds) + appForegroundStateService.isInForeground.value = true + advanceTimeBy(1.seconds) + + // Ensure the stop action wasn't called yet either, since we didn't give it enough time to emit after the expected delay + stopSyncRecorder.assertions().isNeverCalled() + + // Now change it again and wait for enough time + appForegroundStateService.isInForeground.value = false + advanceTimeBy(4.seconds) + + // And confirm it's now called + stopSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the app was in background and we receive a notification, a sync will be started then stopped`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply { + startSyncLambda = startSyncRecorder + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + initialIsSyncingNotificationEventValue = false, + ) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // Start sync was never called + startSyncRecorder.assertions().isNeverCalled() + + // Now we receive a notification and need to sync + appForegroundStateService.updateIsSyncingNotificationEvent(true) + + // Start sync will be called shortly after + advanceTimeBy(1.milliseconds) + startSyncRecorder.assertions().isCalledOnce() + + // If the sync is running and we mark the notification sync as no longer necessary, the sync stops after a delay + syncService.emitSyncState(SyncState.Running) + appForegroundStateService.updateIsSyncingNotificationEvent(false) + + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the app was in background and we join a call, a sync will be started`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply { + startSyncLambda = startSyncRecorder + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + initialIsSyncingNotificationEventValue = false, + ) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // Start sync was never called + startSyncRecorder.assertions().isNeverCalled() + + // Now we join a call + appForegroundStateService.updateIsInCallState(true) + + // Start sync will be called shortly after + advanceTimeBy(1.milliseconds) + startSyncRecorder.assertions().isCalledOnce() + + // If the sync is running and we mark the in-call state as false, the sync stops after a delay + syncService.emitSyncState(SyncState.Running) + appForegroundStateService.updateIsInCallState(false) + + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `when the app is in foreground, we sync for a notification and a call is ongoing, the sync will only stop when all conditions are false`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Running).apply { + startSyncLambda = startSyncRecorder + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = true, + initialIsSyncingNotificationEventValue = true, + initialIsInCallValue = true, + ) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // Start sync was never called + startSyncRecorder.assertions().isNeverCalled() + + // We send the app to background, it's still syncing + appForegroundStateService.givenIsInForeground(false) + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isNeverCalled() + + // We stop the notification sync, it's still syncing + appForegroundStateService.updateIsSyncingNotificationEvent(false) + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isNeverCalled() + + // We set the in-call state to false, now it stops syncing after a delay + appForegroundStateService.updateIsInCallState(false) + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isCalledOnce() + } + + @Test + fun `if the sync was running, it's set to be stopped but something triggers a sync again, the sync is not stopped`() = runTest { + val stopSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Running).apply { + stopSyncLambda = stopSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = true, + initialIsSyncingNotificationEventValue = false, + initialIsInCallValue = false, + ) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + ) + + // We start observing + syncOrchestrator.observeStates() + + // Advance the time to make sure the orchestrator has had time to start processing the inputs + advanceTimeBy(100.milliseconds) + + // This will set the sync to stop + appForegroundStateService.givenIsInForeground(false) + + // But if we reset it quickly before the stop sync takes place, the sync is not stopped + advanceTimeBy(2.seconds) + appForegroundStateService.givenIsInForeground(true) + + advanceTimeBy(10.seconds) + stopSyncRecorder.assertions().isNeverCalled() + } + + @Test + fun `when network is offline, sync service should not start`() = runTest { + val startSyncRecorder = lambdaRecorder> { Result.success(Unit) } + val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply { + startSyncLambda = startSyncRecorder + } + val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Disconnected) + val syncOrchestrator = createSyncOrchestrator( + syncService = syncService, + networkMonitor = networkMonitor, + ) + + // We start observing + syncOrchestrator.observeStates() + + // This should still not trigger a sync, since there is no network + advanceTimeBy(10.seconds) + startSyncRecorder.assertions().isNeverCalled() + } + + private fun TestScope.createSyncOrchestrator( + syncService: FakeSyncService = FakeSyncService(), + networkMonitor: FakeNetworkMonitor = FakeNetworkMonitor(), + appForegroundStateService: FakeAppForegroundStateService = FakeAppForegroundStateService(), + ) = SyncOrchestrator( + matrixClient = FakeMatrixClient(syncService = syncService, sessionCoroutineScope = backgroundScope), + networkMonitor = networkMonitor, + appForegroundStateService = appForegroundStateService, + dispatchers = testCoroutineDispatchers(), + ) +} diff --git a/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixClientsHolderTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixClientsHolderTest.kt deleted file mode 100644 index 23dfc9c5222..00000000000 --- a/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixClientsHolderTest.kt +++ /dev/null @@ -1,97 +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.appnav.di - -import com.bumble.appyx.core.state.MutableSavedStateMapImpl -import com.google.common.truth.Truth.assertThat -import io.element.android.libraries.matrix.test.A_SESSION_ID -import io.element.android.libraries.matrix.test.FakeMatrixClient -import io.element.android.libraries.matrix.test.auth.FakeMatrixAuthenticationService -import kotlinx.coroutines.test.runTest -import org.junit.Test - -class MatrixClientsHolderTest { - @Test - fun `test getOrNull`() { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - } - - @Test - fun `test getOrRestore`() = runTest { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - val fakeMatrixClient = FakeMatrixClient() - fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - assertThat(matrixClientsHolder.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) - // Do it again to hit the cache - assertThat(matrixClientsHolder.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) - } - - @Test - fun `test remove`() = runTest { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - val fakeMatrixClient = FakeMatrixClient() - fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) - // Remove - matrixClientsHolder.remove(A_SESSION_ID) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - } - - @Test - fun `test remove all`() = runTest { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - val fakeMatrixClient = FakeMatrixClient() - fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) - // Remove all - matrixClientsHolder.removeAll() - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - } - - @Test - fun `test save and restore`() = runTest { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - val fakeMatrixClient = FakeMatrixClient() - fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) - matrixClientsHolder.getOrRestore(A_SESSION_ID) - val savedStateMap = MutableSavedStateMapImpl { true } - matrixClientsHolder.saveIntoSavedState(savedStateMap) - assertThat(savedStateMap.size).isEqualTo(1) - // Test Restore with non-empty map - matrixClientsHolder.restoreWithSavedState(savedStateMap) - // Empty the map - matrixClientsHolder.removeAll() - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - // Restore again - matrixClientsHolder.restoreWithSavedState(savedStateMap) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) - } - - @Test - fun `test AuthenticationService listenToNewMatrixClients emits a Client value and we save it`() = runTest { - val fakeAuthenticationService = FakeMatrixAuthenticationService() - val matrixClientsHolder = MatrixClientsHolder(fakeAuthenticationService) - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNull() - - fakeAuthenticationService.givenMatrixClient(FakeMatrixClient(sessionId = A_SESSION_ID)) - val loginSucceeded = fakeAuthenticationService.login("user", "pass") - - assertThat(loginSucceeded.isSuccess).isTrue() - assertThat(matrixClientsHolder.getOrNull(A_SESSION_ID)).isNotNull() - } -} diff --git a/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixSessionCacheTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixSessionCacheTest.kt new file mode 100644 index 00000000000..52443fa4a1e --- /dev/null +++ b/appnav/src/test/kotlin/io/element/android/appnav/di/MatrixSessionCacheTest.kt @@ -0,0 +1,131 @@ +/* + * 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.appnav.di + +import com.bumble.appyx.core.state.MutableSavedStateMapImpl +import com.google.common.truth.Truth.assertThat +import io.element.android.features.networkmonitor.test.FakeNetworkMonitor +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.test.A_SESSION_ID +import io.element.android.libraries.matrix.test.FakeMatrixClient +import io.element.android.libraries.matrix.test.auth.FakeMatrixAuthenticationService +import io.element.android.services.appnavstate.test.FakeAppForegroundStateService +import io.element.android.tests.testutils.testCoroutineDispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class MatrixSessionCacheTest { + @Test + fun `test getOrNull`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + } + + @OptIn(ExperimentalCoroutinesApi::class) + @Test + fun `test getSyncOrchestratorOrNull`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + + // With no matrix client there is no sync orchestrator + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + assertThat(matrixSessionCache.getSyncOrchestrator(A_SESSION_ID)).isNull() + + // But as soon as we receive a client, we can get the sync orchestrator + val fakeMatrixClient = FakeMatrixClient(sessionCoroutineScope = backgroundScope) + fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) + assertThat(matrixSessionCache.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) + assertThat(matrixSessionCache.getSyncOrchestrator(A_SESSION_ID)).isNotNull() + } + + @Test + fun `test getOrRestore`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + val fakeMatrixClient = FakeMatrixClient(sessionCoroutineScope = backgroundScope) + fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + assertThat(matrixSessionCache.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) + // Do it again to hit the cache + assertThat(matrixSessionCache.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) + } + + @Test + fun `test remove`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + val fakeMatrixClient = FakeMatrixClient(sessionCoroutineScope = backgroundScope) + fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) + assertThat(matrixSessionCache.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) + // Remove + matrixSessionCache.remove(A_SESSION_ID) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + } + + @Test + fun `test remove all`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + val fakeMatrixClient = FakeMatrixClient(sessionCoroutineScope = backgroundScope) + fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) + assertThat(matrixSessionCache.getOrRestore(A_SESSION_ID).getOrNull()).isEqualTo(fakeMatrixClient) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) + // Remove all + matrixSessionCache.removeAll() + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + } + + @Test + fun `test save and restore`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + val fakeMatrixClient = FakeMatrixClient(sessionCoroutineScope = backgroundScope) + fakeAuthenticationService.givenMatrixClient(fakeMatrixClient) + matrixSessionCache.getOrRestore(A_SESSION_ID) + val savedStateMap = MutableSavedStateMapImpl { true } + matrixSessionCache.saveIntoSavedState(savedStateMap) + assertThat(savedStateMap.size).isEqualTo(1) + // Test Restore with non-empty map + matrixSessionCache.restoreWithSavedState(savedStateMap) + // Empty the map + matrixSessionCache.removeAll() + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + // Restore again + matrixSessionCache.restoreWithSavedState(savedStateMap) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isEqualTo(fakeMatrixClient) + } + + @Test + fun `test AuthenticationService listenToNewMatrixClients emits a Client value and we save it`() = runTest { + val fakeAuthenticationService = FakeMatrixAuthenticationService() + val matrixSessionCache = MatrixSessionCache(fakeAuthenticationService, createSyncOrchestratorFactory()) + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNull() + + fakeAuthenticationService.givenMatrixClient(FakeMatrixClient(sessionId = A_SESSION_ID, sessionCoroutineScope = backgroundScope)) + val loginSucceeded = fakeAuthenticationService.login("user", "pass") + + assertThat(loginSucceeded.isSuccess).isTrue() + assertThat(matrixSessionCache.getOrNull(A_SESSION_ID)).isNotNull() + } + + private fun TestScope.createSyncOrchestratorFactory() = object : SyncOrchestrator.Factory { + override fun create(matrixClient: MatrixClient): SyncOrchestrator { + return SyncOrchestrator( + matrixClient, + appForegroundStateService = FakeAppForegroundStateService(), + networkMonitor = FakeNetworkMonitor(), + dispatchers = testCoroutineDispatchers(), + ) + } + } +} diff --git a/enterprise b/enterprise index b4f0427e359..0c028db8a48 160000 --- a/enterprise +++ b/enterprise @@ -1 +1 @@ -Subproject commit b4f0427e3595049d39846aabcdc06e818f2e96ea +Subproject commit 0c028db8a48118433c7e11737080a6a01fb90f69 diff --git a/features/analytics/api/src/main/res/values-tr/translations.xml b/features/analytics/api/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..7229872f5ac --- /dev/null +++ b/features/analytics/api/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "Sorunları tanımlamamıza yardımcı olmak için anonim kullanım verilerini paylaşın." + "Tüm şartlarımızı okuyabilirsiniz %1$s." + "burada" + "Analitik verileri paylaşın" + diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt index 01ec23da385..ba1073d480c 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.analytics.impl import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -34,7 +34,7 @@ class AnalyticsOptInNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() val state = presenter.present() AnalyticsOptInView( diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt index f1781f1b08e..3e8b9d98f93 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.BiasAlignment @@ -111,7 +110,7 @@ private fun AnalyticsOptInHeader( .padding(8.dp), style = ElementTheme.typography.fontBodyMdRegular .copy( - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, textAlign = TextAlign.Center, ) ) diff --git a/features/analytics/impl/src/main/res/values-tr/translations.xml b/features/analytics/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..238e53b8982 --- /dev/null +++ b/features/analytics/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,10 @@ + + + "Hiçbir kişisel veriyi kaydetmeyeceğiz veya profillemeyeceğiz" + "Sorunları tanımlamamıza yardımcı olmak için anonim kullanım verilerini paylaşın." + "Tüm şartlarımızı okuyabilirsiniz %1$s." + "burada" + "Bu özelliği istediğiniz zaman kapatabilirsiniz" + "Verilerinizi üçüncü taraflarla paylaşmayacağız" + "%1$s geliştirilmesine yardımcı olun" + diff --git a/features/call/impl/build.gradle.kts b/features/call/impl/build.gradle.kts index 7852b5f53c0..7a291a74232 100644 --- a/features/call/impl/build.gradle.kts +++ b/features/call/impl/build.gradle.kts @@ -29,6 +29,7 @@ setupAnvil() dependencies { implementation(projects.appconfig) + implementation(projects.features.enterprise.api) implementation(projects.libraries.architecture) implementation(projects.libraries.core) implementation(projects.libraries.designsystem) @@ -40,6 +41,7 @@ dependencies { implementation(projects.libraries.push.api) implementation(projects.libraries.uiStrings) implementation(projects.services.analytics.api) + implementation(projects.services.appnavstate.api) implementation(projects.services.toolbox.api) implementation(libs.androidx.webkit) implementation(libs.coil.compose) @@ -59,6 +61,7 @@ dependencies { testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.push.test) testImplementation(projects.services.analytics.test) + testImplementation(projects.services.appnavstate.test) testImplementation(projects.tests.testutils) testImplementation(libs.androidx.compose.ui.test.junit) testReleaseImplementation(libs.androidx.compose.ui.test.manifest) diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt index 048e361ac10..ac0c89f0fd4 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt @@ -39,6 +39,7 @@ import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver import io.element.android.libraries.network.useragent.UserAgentProvider import io.element.android.services.analytics.api.ScreenTracker +import io.element.android.services.appnavstate.api.AppForegroundStateService import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn @@ -58,9 +59,9 @@ class CallScreenPresenter @AssistedInject constructor( private val dispatchers: CoroutineDispatchers, private val matrixClientsProvider: MatrixClientProvider, private val screenTracker: ScreenTracker, - private val appCoroutineScope: CoroutineScope, private val activeCallManager: ActiveCallManager, private val languageTagProvider: LanguageTagProvider, + private val appForegroundStateService: AppForegroundStateService, ) : Presenter { @AssistedFactory interface Factory { @@ -226,19 +227,13 @@ class CallScreenPresenter @AssistedInject constructor( if (state == SyncState.Running) { client.notifyCallStartIfNeeded(callType.roomId) } else { - client.syncService().startSync() + appForegroundStateService.updateIsInCallState(true) } } } onDispose { - // We can't use the local coroutine scope here because it will be disposed before this effect - appCoroutineScope.launch { - client.syncService().run { - if (syncState.value == SyncState.Running) { - stopSync() - } - } - } + // Make sure we mark the call as ended in the app state + appForegroundStateService.updateIsInCallState(false) } } } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt index 65859da60e1..af7323eea46 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt @@ -44,6 +44,7 @@ import io.element.android.features.call.impl.pip.PictureInPictureState import io.element.android.features.call.impl.pip.PipView import io.element.android.features.call.impl.services.CallForegroundService import io.element.android.features.call.impl.utils.CallIntentDataParser +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.bindings import io.element.android.libraries.core.log.logger.LoggerTag @@ -61,6 +62,7 @@ class ElementCallActivity : @Inject lateinit var callIntentDataParser: CallIntentDataParser @Inject lateinit var presenterFactory: CallScreenPresenter.Factory @Inject lateinit var appPreferencesStore: AppPreferencesStore + @Inject lateinit var enterpriseService: EnterpriseService @Inject lateinit var pictureInPicturePresenter: PictureInPicturePresenter private lateinit var presenter: Presenter @@ -109,7 +111,10 @@ class ElementCallActivity : setContent { val pipState = pictureInPicturePresenter.present() ListenToAndroidEvents(pipState) - ElementThemeApp(appPreferencesStore) { + ElementThemeApp( + appPreferencesStore = appPreferencesStore, + enterpriseService = enterpriseService, + ) { val state = presenter.present() eventSink = state.eventSink LaunchedEffect(state.isCallActive, state.isInWidgetMode) { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt index 7dd4b560577..445e3c4f9a5 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt @@ -19,6 +19,7 @@ import io.element.android.features.call.impl.di.CallBindings import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.features.call.impl.utils.ActiveCallManager import io.element.android.features.call.impl.utils.CallState +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.architecture.bindings import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore @@ -47,6 +48,9 @@ class IncomingCallActivity : AppCompatActivity() { @Inject lateinit var appPreferencesStore: AppPreferencesStore + @Inject + lateinit var enterpriseService: EnterpriseService + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -64,7 +68,10 @@ class IncomingCallActivity : AppCompatActivity() { val notificationData = intent?.let { IntentCompat.getParcelableExtra(it, EXTRA_NOTIFICATION_DATA, CallNotificationData::class.java) } if (notificationData != null) { setContent { - ElementThemeApp(appPreferencesStore) { + ElementThemeApp( + appPreferencesStore = appPreferencesStore, + enterpriseService = enterpriseService, + ) { IncomingCallScreen( notificationData = notificationData, onAnswer = ::onAnswer, diff --git a/features/call/impl/src/main/res/values-tr/translations.xml b/features/call/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..37607db690e --- /dev/null +++ b/features/call/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "Devam eden çağrı" + "Aramaya geri dönmek için dokunun" + "☎️ Çağrı devam ediyor" + "Gelen Element Call" + diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt index 2ab7156878b..fb894ac9de3 100644 --- a/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt +++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt @@ -32,10 +32,9 @@ import io.element.android.libraries.matrix.test.widget.FakeMatrixWidgetDriver import io.element.android.libraries.network.useragent.UserAgentProvider import io.element.android.services.analytics.api.ScreenTracker import io.element.android.services.analytics.test.FakeScreenTracker +import io.element.android.services.appnavstate.test.FakeAppForegroundStateService import io.element.android.services.toolbox.api.systemclock.SystemClock import io.element.android.tests.testutils.WarmUpRule -import io.element.android.tests.testutils.consumeItemsUntilTimeout -import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.testCoroutineDispatchers @@ -243,7 +242,7 @@ class CallScreenPresenterTest { } @Test - fun `present - automatically starts the Matrix client sync when on RoomCall`() = runTest { + fun `present - automatically sets the isInCall state when starting the call and disposing the screen`() = runTest { val navigator = FakeCallScreenNavigator() val widgetDriver = FakeMatrixWidgetDriver() val startSyncLambda = lambdaRecorder> { Result.success(Unit) } @@ -251,6 +250,7 @@ class CallScreenPresenterTest { this.startSyncLambda = startSyncLambda } val matrixClient = FakeMatrixClient(syncService = syncService) + val appForegroundStateService = FakeAppForegroundStateService() val presenter = createCallScreenPresenter( callType = CallType.RoomCall(A_SESSION_ID, A_ROOM_ID), widgetDriver = widgetDriver, @@ -258,34 +258,7 @@ class CallScreenPresenterTest { dispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true), matrixClientsProvider = FakeMatrixClientProvider(getClient = { Result.success(matrixClient) }), screenTracker = FakeScreenTracker {}, - ) - moleculeFlow(RecompositionMode.Immediate) { - presenter.present() - }.test { - consumeItemsUntilTimeout() - - assert(startSyncLambda).isCalledOnce() - - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun `present - automatically stops the Matrix client sync on dispose`() = runTest { - val navigator = FakeCallScreenNavigator() - val widgetDriver = FakeMatrixWidgetDriver() - val stopSyncLambda = lambdaRecorder> { Result.success(Unit) } - val syncService = FakeSyncService(SyncState.Running).apply { - this.stopSyncLambda = stopSyncLambda - } - val matrixClient = FakeMatrixClient(syncService = syncService) - val presenter = createCallScreenPresenter( - callType = CallType.RoomCall(A_SESSION_ID, A_ROOM_ID), - widgetDriver = widgetDriver, - navigator = navigator, - dispatchers = testCoroutineDispatchers(useUnconfinedTestDispatcher = true), - matrixClientsProvider = FakeMatrixClientProvider(getClient = { Result.success(matrixClient) }), - screenTracker = FakeScreenTracker {}, + appForegroundStateService = appForegroundStateService, ) val hasRun = Mutex(true) val job = launch { @@ -296,11 +269,25 @@ class CallScreenPresenterTest { } } - hasRun.lock() + appForegroundStateService.isInCall.test { + // The initial isInCall state will always be false + assertThat(awaitItem()).isFalse() + + // Wait until the call starts + hasRun.lock() - job.cancelAndJoin() + // Then it'll be true once the call is active + assertThat(awaitItem()).isTrue() - assert(stopSyncLambda).isCalledOnce() + // If we dispose the screen + job.cancelAndJoin() + + // The isInCall state is now false + assertThat(awaitItem()).isFalse() + + // And there are no more events + ensureAllEventsConsumed() + } } @Test @@ -354,6 +341,7 @@ class CallScreenPresenterTest { matrixClientsProvider: FakeMatrixClientProvider = FakeMatrixClientProvider(), activeCallManager: FakeActiveCallManager = FakeActiveCallManager(), screenTracker: ScreenTracker = FakeScreenTracker(), + appForegroundStateService: FakeAppForegroundStateService = FakeAppForegroundStateService(), ): CallScreenPresenter { val userAgentProvider = object : UserAgentProvider { override fun provide(): String { @@ -369,10 +357,10 @@ class CallScreenPresenterTest { clock = clock, dispatchers = dispatchers, matrixClientsProvider = matrixClientsProvider, - appCoroutineScope = this, activeCallManager = activeCallManager, screenTracker = screenTracker, languageTagProvider = FakeLanguageTagProvider("en-US"), + appForegroundStateService = appForegroundStateService, ) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt index aef27b94dbf..f3a836f4412 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.createroom.impl.root import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node @@ -55,7 +55,7 @@ class CreateRoomRootNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) CreateRoomRootView( state = state, modifier = modifier, diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt index af3aa3b9fb7..7eb2f495110 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootView.kt @@ -19,7 +19,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -211,7 +210,7 @@ private fun CreateRoomActionButton( ) { Icon( modifier = Modifier.size(24.dp), - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, resourceId = iconRes, contentDescription = null, ) diff --git a/features/createroom/impl/src/main/res/values-be/translations.xml b/features/createroom/impl/src/main/res/values-be/translations.xml index 861fca4d057..01c0fea1bd4 100644 --- a/features/createroom/impl/src/main/res/values-be/translations.xml +++ b/features/createroom/impl/src/main/res/values-be/translations.xml @@ -6,7 +6,7 @@ "Паведамленні ў гэтым пакоі зашыфраваны. Гэта шыфраванне нельга адключыць." "Прыватны пакой (толькі па запрашэнні)" "Паведамленні не зашыфраваны, і кожны можа іх прачытаць. Вы можаце ўключыць шыфраванне пазней." - "Публічны пакой (для ўсіх)" + "Публічны пакой" "Хто заўгодна" "Доступ у пакой" "Папрасіце далучыцца" diff --git a/features/createroom/impl/src/main/res/values-bg/translations.xml b/features/createroom/impl/src/main/res/values-bg/translations.xml index 28f42b4156a..1de1db624ad 100644 --- a/features/createroom/impl/src/main/res/values-bg/translations.xml +++ b/features/createroom/impl/src/main/res/values-bg/translations.xml @@ -6,7 +6,6 @@ "Съобщенията в тази стая са шифровани. Шифроването не може да бъде изключено впоследствие." "Частна стая (само с покана)" "Съобщенията не са шифровани и всеки може да ги прочете. Можете да активирате шифроването на по-късна дата." - "Публична стая (всеки)" "Име на стаята" "Създаване на стая" "Тема за разговор (незадължително)" diff --git a/features/createroom/impl/src/main/res/values-de/translations.xml b/features/createroom/impl/src/main/res/values-de/translations.xml index 10cda04d9ed..aec32766a22 100644 --- a/features/createroom/impl/src/main/res/values-de/translations.xml +++ b/features/createroom/impl/src/main/res/values-de/translations.xml @@ -7,14 +7,14 @@ "Privater Chatroom" "Jeder kann diesen Chatroom finden. Sie können dies aber jederzeit in den Chatroomeinstellungen ändern." - "Öffentlicher Chatroom" + "Öffentlicher Raum" "Jeder kann diesem Chatroom beitreten" "Jemand" "Chatroom Zugang" "Jeder kann darum bitten, dem Chatroom beizutreten, aber ein Administrator oder ein Moderator muss die Anfrage akzeptieren." "Beitritt beantragen" "Damit dieser Chatroom im öffentlichen Chatroomverzeichnis sichtbar ist, benötigen Sie eine Chatroomadresse." - "Chatroom Adresse" + "Chatroomadresse" "Raumname" " Sichtbarkeit des Chatrooms" "Raum erstellen" diff --git a/features/createroom/impl/src/main/res/values-el/translations.xml b/features/createroom/impl/src/main/res/values-el/translations.xml index 4dc3acaaa32..4c414a6b5b1 100644 --- a/features/createroom/impl/src/main/res/values-el/translations.xml +++ b/features/createroom/impl/src/main/res/values-el/translations.xml @@ -14,7 +14,6 @@ "Οποιοσδήποτε μπορεί να ζητήσει να συμμετάσχει στο δωμάτιο, αλλά ένας διαχειριστής ή συντονιστής θα πρέπει να αποδεχθεί το αίτημα" "Αίτημα συμμετοχής" "Για να είναι ορατό αυτό το δωμάτιο στον κατάλογο των δημόσιων δωματίων, θα χρειαστείς μια διεύθυνση δωματίου." - "Διεύθυνση δωματίου" "Όνομα δωματίου" "Ορατότητα δωματίου" "Δημιούργησε ένα δωμάτιο" diff --git a/features/createroom/impl/src/main/res/values-es/translations.xml b/features/createroom/impl/src/main/res/values-es/translations.xml index 5946dab1024..2e36d3022ba 100644 --- a/features/createroom/impl/src/main/res/values-es/translations.xml +++ b/features/createroom/impl/src/main/res/values-es/translations.xml @@ -6,7 +6,6 @@ "Los mensajes de esta sala están cifrados. La encriptación no se puede desactivar después." "Sala privada (sólo con invitación)" "Los mensajes no están cifrados y cualquiera puede leerlos. Puedes activar la encriptación más adelante." - "Sala pública (cualquiera)" "Nombre de la sala" "Crear una sala" "Tema (opcional)" diff --git a/features/createroom/impl/src/main/res/values-fa/translations.xml b/features/createroom/impl/src/main/res/values-fa/translations.xml index 467fae53271..d7f05a770cd 100644 --- a/features/createroom/impl/src/main/res/values-fa/translations.xml +++ b/features/createroom/impl/src/main/res/values-fa/translations.xml @@ -6,7 +6,7 @@ "پیام‌های این اتاق رمز شده‌اند. رمزنگاری نمی‌تواند از این پس تغییر کند." "اتاق خصوصی (فقط دعوت)" "پیام‌ها رمزنگاری نشده و هرکسی می‌تواند بخواندشان. می‌توانید بعداً رمزنگاری را به کار بیندازید." - "اتاق عمومی (هرکسی)" + "اتاق عمومی" "نام اتاق" "ایجاد اتاق" "موضوع (اختیاری)" diff --git a/features/createroom/impl/src/main/res/values-hu/translations.xml b/features/createroom/impl/src/main/res/values-hu/translations.xml index ee935c8c60e..244d936eefa 100644 --- a/features/createroom/impl/src/main/res/values-hu/translations.xml +++ b/features/createroom/impl/src/main/res/values-hu/translations.xml @@ -14,7 +14,7 @@ Ezt bármikor módosíthatja a szobabeállításokban." "Bárki kérheti, hogy csatlakozzon a szobához, de egy adminisztrátornak vagy moderátornak el kell fogadnia a kérést" "Csatlakozás kérése" "Ahhoz, hogy ez a szoba látható legyen a nyilvános szobák címtárában, meg kell adnia a szoba címét." - "Szoba címe" + "A szoba címe" "Szoba neve" "Szoba láthatósága" "Szoba létrehozása" diff --git a/features/createroom/impl/src/main/res/values-in/translations.xml b/features/createroom/impl/src/main/res/values-in/translations.xml index b1c7aeef1cf..32a5a0b25ac 100644 --- a/features/createroom/impl/src/main/res/values-in/translations.xml +++ b/features/createroom/impl/src/main/res/values-in/translations.xml @@ -14,7 +14,6 @@ Anda dapat mengubah ini kapan pun dalam pengaturan ruangan." "Siapa pun dapat meminta untuk bergabung dengan ruangan tetapi administrator atau moderator harus menerima permintaan tersebut" "Minta untuk bergabung" "Supaya ruangan ini terlihat di direktori ruangan publik, Anda memerlukan alamat ruangan." - "Alamat ruangan" "Nama ruangan" "Keterlihatan ruangan" "Buat ruangan" diff --git a/features/createroom/impl/src/main/res/values-ka/translations.xml b/features/createroom/impl/src/main/res/values-ka/translations.xml index 45e87809b25..58b02cbe963 100644 --- a/features/createroom/impl/src/main/res/values-ka/translations.xml +++ b/features/createroom/impl/src/main/res/values-ka/translations.xml @@ -7,7 +7,6 @@ "კერძო ოთახი" "ყველას ამ ოთახის მოძებნა შეუძლია. თქვენ ნებისმიერ დროს შეგიძლიათ ამის შეცვლა ოთახის პარამეტრებში." - "საჯარო ოთახი" "ოთახის სახელი" "ოთახის შექმნა" "თემა (სურვილისამებრ)" diff --git a/features/createroom/impl/src/main/res/values-pt-rBR/translations.xml b/features/createroom/impl/src/main/res/values-pt-rBR/translations.xml index b10b86f5a07..9308007154b 100644 --- a/features/createroom/impl/src/main/res/values-pt-rBR/translations.xml +++ b/features/createroom/impl/src/main/res/values-pt-rBR/translations.xml @@ -7,7 +7,6 @@ "Sala privativa (somente por convite)" "Qualquer um pode encontrar esta sala. Você pode mudar isso a qualquer momento nas configurações da sala." - "Sala pública (qualquer pessoa)" "Nome da sala" "Criar uma sala" "Tópico (opcional)" diff --git a/features/createroom/impl/src/main/res/values-pt/translations.xml b/features/createroom/impl/src/main/res/values-pt/translations.xml index 60ee753b133..fcff2929e07 100644 --- a/features/createroom/impl/src/main/res/values-pt/translations.xml +++ b/features/createroom/impl/src/main/res/values-pt/translations.xml @@ -3,7 +3,7 @@ "Nova sala" "Convidar pessoas" "Ocorreu um erro ao criar a sala" - "Apenas as pessoas convidadas podem aceder a esta sala. Todas as mensagens são encriptadas ponta a ponta." + "Apenas as pessoas convidadas podem aceder a esta sala. Todas as mensagens são cifradas ponta-a-ponta." "Sala privada" "Qualquer um pode encontrar esta sala. Pode alterar esta opção nas definições da sala." diff --git a/features/createroom/impl/src/main/res/values-ro/translations.xml b/features/createroom/impl/src/main/res/values-ro/translations.xml index 329ca6de1c9..7257a07aff7 100644 --- a/features/createroom/impl/src/main/res/values-ro/translations.xml +++ b/features/createroom/impl/src/main/res/values-ro/translations.xml @@ -14,7 +14,6 @@ Puteți modifica acest lucru oricând în setări." "Oricine poate cere să se alăture camerei, dar un administrator sau un moderator va trebui să accepte solicitarea" "Cereți să vă alăturați" "Pentru ca această cameră să fie vizibilă în directorul de camere publice, veți avea nevoie de o adresă de cameră." - "Adresa camerei" "Numele camerei" "Creați o cameră" "Subiect (opțional)" diff --git a/features/createroom/impl/src/main/res/values-sv/translations.xml b/features/createroom/impl/src/main/res/values-sv/translations.xml index 980d6ae6435..6de56d8f666 100644 --- a/features/createroom/impl/src/main/res/values-sv/translations.xml +++ b/features/createroom/impl/src/main/res/values-sv/translations.xml @@ -13,7 +13,9 @@ Du kan ändra detta när som helst i rumsinställningarna." "Rumsåtkomst" "Vem som helst kan be om att gå med i rummet men en administratör eller en moderator måste acceptera begäran" "Be om att gå med" + "För att detta rum ska vara synligt i den allmänna rumskatalogen behöver du en rumsadress." "Rumsnamn" + "Rumssynlighet" "Skapa ett rum" "Ämne (valfritt)" "Ett fel uppstod när du försökte starta en chatt" diff --git a/features/createroom/impl/src/main/res/values-tr/translations.xml b/features/createroom/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..6b5ce93e92f --- /dev/null +++ b/features/createroom/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,23 @@ + + + "Yeni oda" + "İnsanları davet et" + "Oda oluşturulurken bir hata oluştu" + "Bu odaya yalnızca davet edilen kişiler erişebilir. Tüm mesajlar uçtan uca şifrelenir." + "Özel oda" + "Bu odayı herkes bulabilir. +Bunu istediğiniz zaman oda ayarlarından değiştirebilirsiniz." + "Herkese açık oda" + "Bu odaya herkes katılabilir" + "Herkes" + "Oda Erişimi" + "Herkes odaya katılmayı isteyebilir ancak bir yönetici veya moderatörün isteği kabul etmesi gerekecektir" + "Katılmak için sor" + "Bu odanın genel oda dizininde görünür olması için bir oda adresine ihtiyacınız olacaktır." + "Oda adresi" + "Oda adı" + "Oda görünürlüğü" + "Bir oda oluştur" + "Konu (isteğe bağlı)" + "Sohbet başlatmaya çalışırken bir hata oluştu" + diff --git a/features/createroom/impl/src/main/res/values-uk/translations.xml b/features/createroom/impl/src/main/res/values-uk/translations.xml index a6ad600672f..7c73a67640f 100644 --- a/features/createroom/impl/src/main/res/values-uk/translations.xml +++ b/features/createroom/impl/src/main/res/values-uk/translations.xml @@ -7,7 +7,7 @@ "Приватна кімната (тільки за запрошенням)" "Будь-хто може знайти цю кімнату. Ви можете змінити це в будь-який час у налаштуваннях кімнати." - "Публічна кімната" + "Загальнодоступна кімната" "Будь-хто може приєднатися до цієї кімнати" "Кожний" "Доступ до кімнати" diff --git a/features/createroom/impl/src/main/res/values-uz/translations.xml b/features/createroom/impl/src/main/res/values-uz/translations.xml index 649bdf86132..e3bc9de5288 100644 --- a/features/createroom/impl/src/main/res/values-uz/translations.xml +++ b/features/createroom/impl/src/main/res/values-uz/translations.xml @@ -6,7 +6,6 @@ "Bu xonadagi xabarlar shifrlangan. Keyinchalik shifrlashni o‘chirib bo‘lmaydi." "Shaxsiy xona (faqat taklif)" "Xabarlar shifrlanmagan va har kim ularni o\'qiy oladi. Keyinchalik shifrlashni yoqishingiz mumkin." - "Jamoat xonasi (har kim)" "Xona nomi" "Xonani yaratish" "Mavzu (ixtiyoriy)" diff --git a/features/createroom/impl/src/main/res/values-zh-rTW/translations.xml b/features/createroom/impl/src/main/res/values-zh-rTW/translations.xml index c94c35ad5b3..399e5bf1c89 100644 --- a/features/createroom/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/createroom/impl/src/main/res/values-zh-rTW/translations.xml @@ -7,7 +7,7 @@ "私密聊天室" "任何人都可以找到此聊天室。 您隨時都可以在聊天室設定中變更此設定。" - "公開聊天室" + "公開的聊天室" "任何人都可以加入此聊天室" "任何人" "聊天室存取權" diff --git a/features/createroom/impl/src/main/res/values-zh/translations.xml b/features/createroom/impl/src/main/res/values-zh/translations.xml index 0049da0bbbf..24741fdc5ba 100644 --- a/features/createroom/impl/src/main/res/values-zh/translations.xml +++ b/features/createroom/impl/src/main/res/values-zh/translations.xml @@ -7,7 +7,7 @@ "私有聊天室" "任何人都能找到此聊天室。 你可以随时在聊天室设置中更改。" - "公开聊天室" + "公共聊天室" "任何人都可以加入此房间" "任何人" "房间访问权限" diff --git a/features/deactivation/impl/src/main/res/values-fr/translations.xml b/features/deactivation/impl/src/main/res/values-fr/translations.xml index 875142bc019..675ac1e1e0b 100644 --- a/features/deactivation/impl/src/main/res/values-fr/translations.xml +++ b/features/deactivation/impl/src/main/res/values-fr/translations.xml @@ -10,5 +10,5 @@ "Vous retirer de tous les salons et toutes les discussions." "Supprimer les informations de votre compte du serveur d’identité." "Rendre vos messages invisibles aux futurs membres des salons si vous choisissez de les supprimer. Vos messages seront toujours visibles pour les utilisateurs qui les ont déjà récupérés." - "Désactiver votre compte" + "Désactiver le compte" diff --git a/features/deactivation/impl/src/main/res/values-it/translations.xml b/features/deactivation/impl/src/main/res/values-it/translations.xml index 7cd484d0e4e..3fbc9d536b7 100644 --- a/features/deactivation/impl/src/main/res/values-it/translations.xml +++ b/features/deactivation/impl/src/main/res/values-it/translations.xml @@ -10,5 +10,5 @@ "Ti rimuove da tutte le stanze di chat." "Elimina le informazioni del tuo account dal nostro server di identità." "I tuoi messaggi saranno ancora visibili agli utenti registrati, ma non saranno disponibili per gli utenti nuovi o non registrati se decidi di eliminarli." - "Disattivazione dell\'account" + "Disattiva account" diff --git a/features/deactivation/impl/src/main/res/values-tr/translations.xml b/features/deactivation/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..cc61b80c540 --- /dev/null +++ b/features/deactivation/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,14 @@ + + + "Lütfen hesabınızı devre dışı bırakmak istediğinizi onaylayın. Bu işlem geri alınamaz." + "Tüm mesajlarımı sil" + "Uyarı: Gelecekteki kullanıcılar eksik konuşmalar görebilir." + "Hesabınızı devre dışı bırakmak %1$s, şunları yapacaktır:" + "geri alınamaz" + "%1$s (tekrar giriş yapamazsınız ve kimliğiniz yeniden kullanılamaz)." + "Kalıcı olarak devre dışı bırak" + "Sizi tüm sohbet odalarından çıkarmak." + "Hesap bilgileriniz kimlik sunucumuzdan silinecek." + "Mesajlarınız kayıtlı kullanıcılar tarafından görülmeye devam eder, ancak silmeyi seçerseniz yeni veya kayıtlı olmayan kullanıcılar tarafından görüntülenemeyecek." + "Hesabı devre dışı bırak" + diff --git a/features/deactivation/impl/src/main/res/values-uk/translations.xml b/features/deactivation/impl/src/main/res/values-uk/translations.xml index 62cf66cec1d..04b32df8b2c 100644 --- a/features/deactivation/impl/src/main/res/values-uk/translations.xml +++ b/features/deactivation/impl/src/main/res/values-uk/translations.xml @@ -10,5 +10,5 @@ "Видалити вас з усіх чатів." "Видаліть інформацію свого облікового запису з нашого сервера ідентифікації." "Ваші повідомлення залишатимуться видимими для зареєстрованих користувачів, але недоступними для нових або незареєстрованих користувачів, якщо ви вирішите їх видалити." - "Відключити обліковий запис" + "Деактивувати обліковий запис" diff --git a/features/enterprise/api/build.gradle.kts b/features/enterprise/api/build.gradle.kts index 91c54bc42c5..9f63ab2cf1f 100644 --- a/features/enterprise/api/build.gradle.kts +++ b/features/enterprise/api/build.gradle.kts @@ -13,6 +13,7 @@ android { } dependencies { + implementation(libs.compound) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) } 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 2ac334653ed..305aae22434 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 @@ -7,9 +7,13 @@ package io.element.android.features.enterprise.api +import io.element.android.compound.tokens.generated.SemanticColors import io.element.android.libraries.matrix.api.core.SessionId interface EnterpriseService { val isEnterpriseBuild: Boolean suspend fun isEnterpriseUser(sessionId: SessionId): Boolean + + fun semanticColorsLight(): SemanticColors + fun semanticColorsDark(): SemanticColors } diff --git a/features/enterprise/impl/build.gradle.kts b/features/enterprise/impl/build.gradle.kts index 6beea5b83a6..642b2fef40f 100644 --- a/features/enterprise/impl/build.gradle.kts +++ b/features/enterprise/impl/build.gradle.kts @@ -17,6 +17,7 @@ android { setupAnvil() dependencies { + implementation(libs.compound) implementation(projects.anvilannotations) api(projects.features.enterprise.api) implementation(projects.libraries.architecture) 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 c77c7377d88..1a18ddbee3a 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 @@ -8,6 +8,9 @@ package io.element.android.features.enterprise.impl import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.compound.tokens.generated.SemanticColors +import io.element.android.compound.tokens.generated.compoundColorsDark +import io.element.android.compound.tokens.generated.compoundColorsLight import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.core.SessionId @@ -18,4 +21,8 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService { override val isEnterpriseBuild = false override suspend fun isEnterpriseUser(sessionId: SessionId) = false + + override fun semanticColorsLight(): SemanticColors = compoundColorsLight + + override fun semanticColorsDark(): SemanticColors = compoundColorsDark } diff --git a/features/ftue/impl/src/main/res/values-tr/translations.xml b/features/ftue/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..a653e93624d --- /dev/null +++ b/features/ftue/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,11 @@ + + + "Ayarlarınızı daha sonra değiştirebilirsiniz." + "Bildirimlere izin verin ve hiçbir mesajı kaçırmayın" + "Çağrılar, anketler, arama ve daha fazlası bu yıl içinde eklenecek." + "Şifrelenmiş odalar için mesaj geçmişi henüz mevcut değil." + "Düşüncelerinizi bizimle paylaşmanızı çok isteriz. Ayarlar sayfasından düşüncelerinizi bize iletin." + "Hadi başlayalım!" + "İşte bilmeniz gerekenler:" + "%1$s hoş geldiniz!" + diff --git a/features/invite/impl/src/main/res/values-tr/translations.xml b/features/invite/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..09beb1f56a8 --- /dev/null +++ b/features/invite/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,9 @@ + + + "%1$s katılma davetini reddetmek istediğinizden emin misiniz?" + "Daveti reddet" + "%1$s ile bu özel sohbeti reddetmek istediğinizden emin misiniz?" + "Sohbeti reddet" + "Davet Yok" + "%1$s (%2$s) sizi davet etti" + diff --git a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt index 4b064e01084..589a7ec97b1 100644 --- a/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt +++ b/features/invite/impl/src/test/kotlin/io/element/android/features/invite/impl/response/AcceptDeclineInvitePresenterTest.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.A_SESSION_ID import io.element.android.libraries.matrix.test.FakeMatrixClient -import io.element.android.libraries.matrix.test.room.FakePendingRoom +import io.element.android.libraries.matrix.test.room.FakeRoomPreview import io.element.android.libraries.matrix.test.room.join.FakeJoinRoom import io.element.android.libraries.push.api.notifications.NotificationCleaner import io.element.android.libraries.push.test.notifications.FakeNotificationCleaner @@ -77,9 +77,11 @@ class AcceptDeclineInvitePresenterTest { val declineInviteFailure = lambdaRecorder { -> Result.failure(RuntimeException("Failed to leave room")) } - val client = FakeMatrixClient().apply { - getPendingRoomResults[A_ROOM_ID] = FakePendingRoom(declineInviteResult = declineInviteFailure) - } + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success(FakeRoomPreview(declineInviteResult = declineInviteFailure)) + } + ) val presenter = createAcceptDeclineInvitePresenter(client = client) presenter.test { val inviteData = anInviteData() @@ -120,9 +122,11 @@ class AcceptDeclineInvitePresenterTest { val declineInviteSuccess = lambdaRecorder { -> Result.success(Unit) } - val client = FakeMatrixClient().apply { - getPendingRoomResults[A_ROOM_ID] = FakePendingRoom(declineInviteResult = declineInviteSuccess) - } + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success(FakeRoomPreview(declineInviteResult = declineInviteSuccess)) + } + ) val presenter = createAcceptDeclineInvitePresenter( client = client, notificationCleaner = fakeNotificationCleaner, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt index 5550d06bac9..055ce113cf4 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomEvents.kt @@ -9,8 +9,10 @@ package io.element.android.features.joinroom.impl sealed interface JoinRoomEvents { data object RetryFetchingContent : JoinRoomEvents + data object DismissErrorAndHideContent : JoinRoomEvents data object JoinRoom : JoinRoomEvents data object KnockRoom : JoinRoomEvents + data object ForgetRoom : JoinRoomEvents data class CancelKnock(val requiresConfirmation: Boolean) : JoinRoomEvents data class UpdateKnockMessage(val message: String) : JoinRoomEvents data object ClearActionStates : JoinRoomEvents diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt index ec910ee29d4..dbf741f2d8b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomNode.kt @@ -43,6 +43,7 @@ class JoinRoomNode @AssistedInject constructor( state = state, onBackClick = ::navigateUp, onJoinSuccess = ::navigateUp, + onForgetSuccess = ::navigateUp, onCancelKnockSuccess = {}, onKnockSuccess = {}, modifier = modifier 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 3cb7b5f82a1..f9f4edd8a9e 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 @@ -26,22 +26,28 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.InviteData import io.element.android.features.joinroom.impl.di.CancelKnockRoom +import io.element.android.features.joinroom.impl.di.ForgetRoom import io.element.android.features.joinroom.impl.di.KnockRoom import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState +import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.exception.ClientException +import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.getRoomInfoFlow import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo +import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.isDm import io.element.android.libraries.matrix.api.room.join.JoinRoom +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.coroutines.CoroutineScope @@ -58,6 +64,7 @@ class JoinRoomPresenter @AssistedInject constructor( private val joinRoom: JoinRoom, private val knockRoom: KnockRoom, private val cancelKnockRoom: CancelKnockRoom, + private val forgetRoom: ForgetRoom, private val acceptDeclineInvitePresenter: Presenter, private val buildMeta: BuildMeta, ) : Presenter { @@ -79,31 +86,59 @@ class JoinRoomPresenter @AssistedInject constructor( val joinAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val knockAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } val cancelKnockAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } + val forgetRoomAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } var knockMessage by rememberSaveable { mutableStateOf("") } + var isDismissingContent by remember { mutableStateOf(false) } val contentState by produceState( - initialValue = ContentState.Loading(roomIdOrAlias), + initialValue = ContentState.Loading, key1 = roomInfo, key2 = retryCount, + key3 = isDismissingContent, ) { when { + isDismissingContent -> value = ContentState.Dismissing roomInfo.isPresent -> { - value = roomInfo.get().toContentState() + val (sender, reason) = when (roomInfo.get().currentUserMembership) { + CurrentUserMembership.BANNED -> { + // Workaround to get info about the sender for banned rooms + // TODO re-do this once we have a better API in the SDK + val preview = matrixClient.getRoomPreview(roomIdOrAlias, serverNames) + val membershipDetalis = preview.getOrNull()?.membershipDetails()?.getOrNull() + membershipDetalis?.senderMember to membershipDetalis?.currentUserMember?.membershipChangeReason + } + CurrentUserMembership.INVITED -> { + roomInfo.get().inviter to null + } + else -> null to null + } + value = roomInfo.get().toContentState(sender, reason) } roomDescription.isPresent -> { value = roomDescription.get().toContentState() } else -> { - value = ContentState.Loading(roomIdOrAlias) - val result = matrixClient.getRoomPreviewInfo(roomIdOrAlias, serverNames) + value = ContentState.Loading + val result = matrixClient.getRoomPreview(roomIdOrAlias, serverNames) value = result.fold( - onSuccess = { previewInfo -> - previewInfo.toContentState() + onSuccess = { preview -> + val membershipInfo = when (preview.info.membership) { + CurrentUserMembership.INVITED, + CurrentUserMembership.BANNED, + CurrentUserMembership.KNOCKED -> { + preview.membershipDetails().getOrNull() + } + else -> null + } + preview.info.toContentState( + senderMember = membershipInfo?.senderMember, + reason = membershipInfo?.currentUserMember?.membershipChangeReason, + ) }, onFailure = { throwable -> - if (throwable.message?.contains("403") == true) { - ContentState.UnknownRoom(roomIdOrAlias) + if (throwable is ClientException.MatrixApi && (throwable.kind == ErrorKind.NotFound || throwable.kind == ErrorKind.Forbidden)) { + ContentState.UnknownRoom } else { - ContentState.Failure(roomIdOrAlias, throwable) + ContentState.Failure(throwable) } } ) @@ -136,18 +171,25 @@ class JoinRoomPresenter @AssistedInject constructor( knockAction.value = AsyncAction.Uninitialized joinAction.value = AsyncAction.Uninitialized cancelKnockAction.value = AsyncAction.Uninitialized + forgetRoomAction.value = AsyncAction.Uninitialized } is JoinRoomEvents.UpdateKnockMessage -> { knockMessage = event.message.take(MAX_KNOCK_MESSAGE_LENGTH) } + JoinRoomEvents.DismissErrorAndHideContent -> { + isDismissingContent = true + } + JoinRoomEvents.ForgetRoom -> coroutineScope.forgetRoom(forgetRoomAction) } } return JoinRoomState( + roomIdOrAlias = roomIdOrAlias, contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, joinAction = joinAction.value, knockAction = knockAction.value, + forgetAction = forgetRoomAction.value, cancelKnockAction = cancelKnockAction.value, applicationName = buildMeta.applicationName, knockMessage = knockMessage, @@ -161,7 +203,13 @@ class JoinRoomPresenter @AssistedInject constructor( roomIdOrAlias = roomIdOrAlias, serverNames = serverNames, trigger = trigger - ) + ).mapFailure { + if (it is ClientException.MatrixApi && it.kind == ErrorKind.Forbidden) { + JoinRoomFailures.UnauthorizedJoin + } else { + it + } + } } } @@ -180,9 +228,15 @@ class JoinRoomPresenter @AssistedInject constructor( } } } + + private fun CoroutineScope.forgetRoom(forgetAction: MutableState>) = launch { + forgetAction.runUpdatingState { + forgetRoom.invoke(roomId) + } + } } -private fun RoomPreviewInfo.toContentState(): ContentState { +private fun RoomPreviewInfo.toContentState(senderMember: RoomMember?, reason: String?): ContentState { return ContentState.Loaded( roomId = roomId, name = name, @@ -192,12 +246,11 @@ private fun RoomPreviewInfo.toContentState(): ContentState { isDm = false, roomType = roomType, roomAvatarUrl = avatarUrl, - joinAuthorisationStatus = when { - // Note when isInvited, roomInfo will be used, so if this happen, it will be temporary. - isInvited -> JoinAuthorisationStatus.IsInvited(null) - canKnock -> JoinAuthorisationStatus.CanKnock - isPublic -> JoinAuthorisationStatus.CanJoin - else -> JoinAuthorisationStatus.Unknown + joinAuthorisationStatus = when (membership) { + CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited(senderMember?.toInviteSender()) + CurrentUserMembership.BANNED -> JoinAuthorisationStatus.IsBanned(senderMember?.toInviteSender(), reason) + CurrentUserMembership.KNOCKED -> JoinAuthorisationStatus.IsKnocked + else -> joinRule.toJoinAuthorisationStatus() } ) } @@ -222,27 +275,42 @@ internal fun RoomDescription.toContentState(): ContentState { } @VisibleForTesting -internal fun MatrixRoomInfo.toContentState(): ContentState { +internal fun MatrixRoomInfo.toContentState(membershipSender: RoomMember?, reason: String?): ContentState { return ContentState.Loaded( roomId = id, name = name, topic = topic, alias = canonicalAlias, - numberOfMembers = activeMembersCount, + numberOfMembers = joinedMembersCount, isDm = isDm, roomType = if (isSpace) RoomType.Space else RoomType.Room, roomAvatarUrl = avatarUrl, - joinAuthorisationStatus = when { - currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited( - inviteSender = inviter?.toInviteSender() + joinAuthorisationStatus = when (currentUserMembership) { + CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited( + inviteSender = membershipSender?.toInviteSender() ) - currentUserMembership == CurrentUserMembership.KNOCKED -> JoinAuthorisationStatus.IsKnocked - isPublic -> JoinAuthorisationStatus.CanJoin - else -> JoinAuthorisationStatus.Unknown + CurrentUserMembership.BANNED -> JoinAuthorisationStatus.IsBanned( + banSender = membershipSender?.toInviteSender(), + reason = reason, + ) + CurrentUserMembership.KNOCKED -> JoinAuthorisationStatus.IsKnocked + else -> joinRule.toJoinAuthorisationStatus() } ) } +private fun JoinRule?.toJoinAuthorisationStatus(): JoinAuthorisationStatus { + return when (this) { + JoinRule.Knock, + is JoinRule.KnockRestricted -> JoinAuthorisationStatus.CanKnock + JoinRule.Invite, + JoinRule.Private -> JoinAuthorisationStatus.NeedInvite + is JoinRule.Restricted -> JoinAuthorisationStatus.Restricted + JoinRule.Public -> JoinAuthorisationStatus.CanJoin + else -> JoinAuthorisationStatus.Unknown + } +} + @VisibleForTesting internal fun ContentState.toInviteData(): InviteData? { return when (this) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 85538d6d88e..7162aea414f 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -22,30 +22,49 @@ internal const val MAX_KNOCK_MESSAGE_LENGTH = 500 @Immutable data class JoinRoomState( + val roomIdOrAlias: RoomIdOrAlias, val contentState: ContentState, val acceptDeclineInviteState: AcceptDeclineInviteState, val joinAction: AsyncAction, val knockAction: AsyncAction, + val forgetAction: AsyncAction, val cancelKnockAction: AsyncAction, - val applicationName: String, + private val applicationName: String, val knockMessage: String, val eventSink: (JoinRoomEvents) -> Unit ) { + val isJoinActionUnauthorized = joinAction is AsyncAction.Failure && joinAction.error is JoinRoomFailures.UnauthorizedJoin val joinAuthorisationStatus = when (contentState) { - // Use the join authorisation status from the loaded content state - is ContentState.Loaded -> contentState.joinAuthorisationStatus - // Assume that if the room is unknown, the user can join it - is ContentState.UnknownRoom -> JoinAuthorisationStatus.CanJoin - // Otherwise assume that the user can't join the room - else -> JoinAuthorisationStatus.Unknown + is ContentState.Loaded -> { + when { + contentState.roomType == RoomType.Space -> { + JoinAuthorisationStatus.IsSpace(applicationName) + } + isJoinActionUnauthorized -> { + JoinAuthorisationStatus.Unauthorized + } + else -> { + contentState.joinAuthorisationStatus + } + } + } + is ContentState.UnknownRoom -> { + if (isJoinActionUnauthorized) { + JoinAuthorisationStatus.Unauthorized + } else { + JoinAuthorisationStatus.Unknown + } + } + else -> JoinAuthorisationStatus.None } } @Immutable sealed interface ContentState { - data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState - data class Failure(val roomIdOrAlias: RoomIdOrAlias, val error: Throwable) : ContentState - data class UnknownRoom(val roomIdOrAlias: RoomIdOrAlias) : ContentState + data object Dismissing : ContentState + data object Loading : ContentState + data class Failure(val error: Throwable) : ContentState + data object UnknownRoom : ContentState data class Loaded( val roomId: RoomId, val name: String?, @@ -71,9 +90,19 @@ sealed interface ContentState { } sealed interface JoinAuthorisationStatus { + data object None : JoinAuthorisationStatus + data class IsSpace(val applicationName: String) : JoinAuthorisationStatus data class IsInvited(val inviteSender: InviteSender?) : JoinAuthorisationStatus + data class IsBanned(val banSender: InviteSender?, val reason: String?) : JoinAuthorisationStatus data object IsKnocked : JoinAuthorisationStatus data object CanKnock : JoinAuthorisationStatus data object CanJoin : JoinAuthorisationStatus + data object NeedInvite : JoinAuthorisationStatus + data object Restricted : JoinAuthorisationStatus data object Unknown : JoinAuthorisationStatus + data object Unauthorized : JoinAuthorisationStatus +} + +sealed class JoinRoomFailures : Exception() { + data object UnauthorizedJoin : JoinRoomFailures() } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index d34d3773944..3ebf021cc17 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -18,6 +18,7 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.exception.ClientException import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.ui.model.InviteSender @@ -25,10 +26,10 @@ open class JoinRoomStateProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aJoinRoomState( - contentState = aLoadingContentState() + contentState = ContentState.Loading ), aJoinRoomState( - contentState = anUnknownContentState() + contentState = ContentState.UnknownRoom ), aJoinRoomState( contentState = aLoadedContentState( @@ -40,6 +41,14 @@ open class JoinRoomStateProvider : PreviewParameterProvider { aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin) ), + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), + joinAction = AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin) + ), + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), + joinAction = AsyncAction.Failure(ClientException.Generic("Something went wrong")) + ), aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)) ), @@ -52,9 +61,6 @@ open class JoinRoomStateProvider : PreviewParameterProvider { aJoinRoomState( contentState = aFailureContentState() ), - aJoinRoomState( - contentState = aFailureContentState(roomIdOrAlias = A_ROOM_ALIAS.toRoomIdOrAlias()) - ), aJoinRoomState( contentState = aLoadedContentState( roomId = RoomId("!aSpaceId:domain"), @@ -98,23 +104,42 @@ open class JoinRoomStateProvider : PreviewParameterProvider { name = "A knocked Room", joinAuthorisationStatus = JoinAuthorisationStatus.IsKnocked ) - ) + ), + aJoinRoomState( + contentState = aLoadedContentState( + name = "A private room", + joinAuthorisationStatus = JoinAuthorisationStatus.NeedInvite + ) + ), + aJoinRoomState( + contentState = aLoadedContentState( + name = "A banned room", + joinAuthorisationStatus = JoinAuthorisationStatus.IsBanned( + banSender = InviteSender( + userId = UserId("@alice:domain"), + displayName = "Alice", + avatarData = AvatarData("alice", "Alice", size = AvatarSize.InviteSender), + membershipChangeReason = "spamming" + ), + reason = "spamming", + ), + ) + ), + aJoinRoomState( + contentState = aLoadedContentState( + name = "A restricted room", + joinAuthorisationStatus = JoinAuthorisationStatus.Restricted, + ) + ), ) } -fun aFailureContentState( - roomIdOrAlias: RoomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias() -): ContentState { +fun aFailureContentState(): ContentState { return ContentState.Failure( - roomIdOrAlias = roomIdOrAlias, error = Exception("Error"), ) } -fun anUnknownContentState(roomId: RoomId = A_ROOM_ID) = ContentState.UnknownRoom(roomId.toRoomIdOrAlias()) - -fun aLoadingContentState(roomId: RoomId = A_ROOM_ID) = ContentState.Loading(roomId.toRoomIdOrAlias()) - fun aLoadedContentState( roomId: RoomId = A_ROOM_ID, name: String? = "Element X android", @@ -138,19 +163,23 @@ fun aLoadedContentState( ) fun aJoinRoomState( + roomIdOrAlias: RoomIdOrAlias = A_ROOM_ALIAS.toRoomIdOrAlias(), contentState: ContentState = aLoadedContentState(), acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(), joinAction: AsyncAction = AsyncAction.Uninitialized, knockAction: AsyncAction = AsyncAction.Uninitialized, + forgetAction: AsyncAction = AsyncAction.Uninitialized, cancelKnockAction: AsyncAction = AsyncAction.Uninitialized, knockMessage: String = "", eventSink: (JoinRoomEvents) -> Unit = {} ) = JoinRoomState( + roomIdOrAlias = roomIdOrAlias, contentState = contentState, acceptDeclineInviteState = acceptDeclineInviteState, joinAction = joinAction, knockAction = knockAction, cancelKnockAction = cancelKnockAction, + forgetAction = forgetAction, applicationName = "AppName", knockMessage = knockMessage, eventSink = eventSink @@ -160,10 +189,12 @@ internal fun anInviteSender( userId: UserId = UserId("@bob:domain"), displayName: String = "Bob", avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), + membershipChangeReason: String? = null, ) = InviteSender( userId = userId, displayName = displayName, avatarData = avatarData, + membershipChangeReason = membershipChangeReason, ) private val A_ROOM_ID = RoomId("!exa:matrix.org") diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 49c7b5742b8..690f57629cd 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -19,12 +19,12 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -32,7 +32,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp @@ -47,7 +46,8 @@ import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubti import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage -import io.element.android.libraries.designsystem.background.LightGradientBackground +import io.element.android.libraries.designsystem.components.Announcement +import io.element.android.libraries.designsystem.components.AnnouncementType import io.element.android.libraries.designsystem.components.BigIcon import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -55,16 +55,17 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.SuperButton import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog +import io.element.android.libraries.designsystem.components.dialogs.RetryDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.ButtonSize +import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.core.RoomIdOrAlias -import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.ui.components.InviteSenderView import io.element.android.libraries.ui.strings.CommonStrings @@ -74,30 +75,33 @@ fun JoinRoomView( onBackClick: () -> Unit, onJoinSuccess: () -> Unit, onKnockSuccess: () -> Unit, + onForgetSuccess: () -> Unit, onCancelKnockSuccess: () -> Unit, modifier: Modifier = Modifier, ) { Box( modifier = modifier.fillMaxSize(), ) { - LightGradientBackground() HeaderFooterPage( containerColor = Color.Transparent, - paddingValues = PaddingValues(16.dp), + paddingValues = PaddingValues( + horizontal = 16.dp, + vertical = 32.dp + ), topBar = { JoinRoomTopBar(contentState = state.contentState, onBackClick = onBackClick) }, content = { JoinRoomContent( + roomIdOrAlias = state.roomIdOrAlias, contentState = state.contentState, - applicationName = state.applicationName, knockMessage = state.knockMessage, onKnockMessageUpdate = { state.eventSink(JoinRoomEvents.UpdateKnockMessage(it)) }, ) }, footer = { JoinRoomFooter( - state = state, + joinAuthorisationStatus = state.joinAuthorisationStatus, onAcceptInvite = { state.eventSink(JoinRoomEvents.AcceptInvite) }, @@ -113,31 +117,55 @@ fun JoinRoomView( onCancelKnock = { state.eventSink(JoinRoomEvents.CancelKnock(requiresConfirmation = true)) }, - onRetry = { - state.eventSink(JoinRoomEvents.RetryFetchingContent) + onForgetRoom = { + state.eventSink(JoinRoomEvents.ForgetRoom) }, onGoBack = onBackClick, ) } ) } + if (state.contentState is ContentState.Failure) { + RetryDialog( + title = stringResource(R.string.screen_join_room_loading_alert_title), + content = stringResource(CommonStrings.error_network_or_server_issue), + onRetry = { state.eventSink(JoinRoomEvents.RetryFetchingContent) }, + onDismiss = { + state.eventSink(JoinRoomEvents.DismissErrorAndHideContent) + onBackClick() + } + ) + } + // This particular error is shown directly in the footer + if (!state.isJoinActionUnauthorized) { + AsyncActionView( + async = state.joinAction, + errorTitle = { stringResource(CommonStrings.common_something_went_wrong) }, + errorMessage = { stringResource(CommonStrings.error_network_or_server_issue) }, + onSuccess = { onJoinSuccess() }, + onErrorDismiss = { state.eventSink(JoinRoomEvents.ClearActionStates) }, + ) + } AsyncActionView( - async = state.joinAction, - onSuccess = { onJoinSuccess() }, + async = state.knockAction, + errorTitle = { stringResource(CommonStrings.common_something_went_wrong) }, + errorMessage = { stringResource(CommonStrings.error_network_or_server_issue) }, + onSuccess = { onKnockSuccess() }, onErrorDismiss = { state.eventSink(JoinRoomEvents.ClearActionStates) }, ) AsyncActionView( - async = state.knockAction, - onSuccess = { onKnockSuccess() }, + async = state.forgetAction, + errorTitle = { stringResource(CommonStrings.common_something_went_wrong) }, + errorMessage = { stringResource(CommonStrings.error_network_or_server_issue) }, + onSuccess = { onForgetSuccess() }, onErrorDismiss = { state.eventSink(JoinRoomEvents.ClearActionStates) }, ) AsyncActionView( async = state.cancelKnockAction, onSuccess = { onCancelKnockSuccess() }, onErrorDismiss = { state.eventSink(JoinRoomEvents.ClearActionStates) }, - errorMessage = { - stringResource(CommonStrings.error_unknown) - }, + errorTitle = { stringResource(CommonStrings.common_something_went_wrong) }, + errorMessage = { stringResource(CommonStrings.error_network_or_server_issue) }, confirmationDialog = { ConfirmationDialog( content = stringResource(R.string.screen_join_room_cancel_knock_alert_description), @@ -153,13 +181,13 @@ fun JoinRoomView( @Composable private fun JoinRoomFooter( - state: JoinRoomState, + joinAuthorisationStatus: JoinAuthorisationStatus, onAcceptInvite: () -> Unit, onDeclineInvite: () -> Unit, onJoinRoom: () -> Unit, onKnockRoom: () -> Unit, onCancelKnock: () -> Unit, - onRetry: () -> Unit, + onForgetRoom: () -> Unit, onGoBack: () -> Unit, modifier: Modifier = Modifier, ) { @@ -168,79 +196,170 @@ private fun JoinRoomFooter( .fillMaxWidth() .padding(top = 8.dp) ) { - if (state.contentState is ContentState.Failure) { - Button( - text = stringResource(CommonStrings.action_retry), - onClick = onRetry, - modifier = Modifier.fillMaxWidth(), - size = ButtonSize.Large, - ) - } else if (state.contentState is ContentState.Loaded && state.contentState.roomType == RoomType.Space) { - Button( - text = stringResource(CommonStrings.action_go_back), - onClick = onGoBack, - modifier = Modifier.fillMaxWidth(), - size = ButtonSize.Large, - ) - } else { - val joinAuthorisationStatus = state.joinAuthorisationStatus - when (joinAuthorisationStatus) { - is JoinAuthorisationStatus.IsInvited -> { - ButtonRowMolecule(horizontalArrangement = Arrangement.spacedBy(20.dp)) { - OutlinedButton( - text = stringResource(CommonStrings.action_decline), - onClick = onDeclineInvite, - modifier = Modifier.weight(1f), - size = ButtonSize.LargeLowPadding, - ) - Button( - text = stringResource(CommonStrings.action_accept), - onClick = onAcceptInvite, - modifier = Modifier.weight(1f), - size = ButtonSize.LargeLowPadding, - ) - } - } - JoinAuthorisationStatus.CanJoin -> { - SuperButton( - onClick = onJoinRoom, - modifier = Modifier.fillMaxWidth(), - buttonSize = ButtonSize.Large, - ) { - Text( - text = stringResource(R.string.screen_join_room_join_action), - ) - } + when (joinAuthorisationStatus) { + is JoinAuthorisationStatus.IsInvited -> { + ButtonRowMolecule(horizontalArrangement = Arrangement.spacedBy(20.dp)) { + OutlinedButton( + text = stringResource(CommonStrings.action_decline), + onClick = onDeclineInvite, + modifier = Modifier.weight(1f), + size = ButtonSize.LargeLowPadding, + ) + Button( + text = stringResource(CommonStrings.action_accept), + onClick = onAcceptInvite, + modifier = Modifier.weight(1f), + size = ButtonSize.LargeLowPadding, + ) } - JoinAuthorisationStatus.CanKnock -> { - SuperButton( - onClick = onKnockRoom, - modifier = Modifier.fillMaxWidth(), - buttonSize = ButtonSize.Large, - ) { - Text( - text = stringResource(R.string.screen_join_room_knock_action), - ) - } + } + JoinAuthorisationStatus.CanJoin -> { + SuperButton( + onClick = onJoinRoom, + modifier = Modifier.fillMaxWidth(), + buttonSize = ButtonSize.Large, + ) { + Text( + text = stringResource(R.string.screen_join_room_join_action), + ) } - JoinAuthorisationStatus.IsKnocked -> { - OutlinedButton( - text = stringResource(R.string.screen_join_room_cancel_knock_action), - onClick = onCancelKnock, - modifier = Modifier.fillMaxWidth(), - size = ButtonSize.Large, + } + JoinAuthorisationStatus.CanKnock -> { + SuperButton( + onClick = onKnockRoom, + modifier = Modifier.fillMaxWidth(), + buttonSize = ButtonSize.Large, + ) { + Text( + text = stringResource(R.string.screen_join_room_knock_action), ) } - JoinAuthorisationStatus.Unknown -> Unit } + JoinAuthorisationStatus.IsKnocked -> { + OutlinedButton( + text = stringResource(R.string.screen_join_room_cancel_knock_action), + onClick = onCancelKnock, + modifier = Modifier.fillMaxWidth(), + size = ButtonSize.Large, + ) + } + JoinAuthorisationStatus.NeedInvite -> { + Announcement( + title = stringResource(R.string.screen_join_room_invite_required_message), + description = null, + type = AnnouncementType.Informative(isCritical = false), + ) + } + is JoinAuthorisationStatus.IsBanned -> JoinBannedFooter(joinAuthorisationStatus, onForgetRoom) + JoinAuthorisationStatus.Unknown -> JoinRestrictedFooter(onJoinRoom) + JoinAuthorisationStatus.Restricted -> JoinRestrictedFooter(onJoinRoom) + JoinAuthorisationStatus.Unauthorized -> JoinUnauthorizedFooter(onGoBack) + is JoinAuthorisationStatus.IsSpace -> UnsupportedSpaceFooter(joinAuthorisationStatus.applicationName, onGoBack) + JoinAuthorisationStatus.None -> Unit + } + } +} + +@Composable +private fun JoinUnauthorizedFooter( + onOkClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + Announcement( + title = stringResource(R.string.screen_join_room_fail_message), + description = stringResource(R.string.screen_join_room_fail_reason), + type = AnnouncementType.Informative(isCritical = true), + ) + Spacer(Modifier.height(24.dp)) + Button( + text = stringResource(CommonStrings.action_ok), + onClick = onOkClick, + modifier = Modifier.fillMaxWidth(), + ) + } +} + +@Composable +private fun JoinBannedFooter( + status: JoinAuthorisationStatus.IsBanned, + onForgetRoom: () -> Unit, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + val banReason = status.reason?.let { + stringResource(R.string.screen_join_room_ban_reason, it.removeSuffix(".")) + } + val title = if (status.banSender != null) { + stringResource(R.string.screen_join_room_ban_by_message, status.banSender.displayName) + } else { + stringResource(R.string.screen_join_room_ban_message) } + Announcement( + title = title, + description = banReason, + type = AnnouncementType.Informative(isCritical = true), + ) + Spacer(Modifier.height(24.dp)) + Button( + text = stringResource(R.string.screen_join_room_forget_action), + onClick = onForgetRoom, + modifier = Modifier.fillMaxWidth(), + size = ButtonSize.Large, + ) + } +} + +@Composable +private fun JoinRestrictedFooter( + onJoinRoom: () -> Unit, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + Announcement( + title = stringResource(R.string.screen_join_room_join_restricted_message), + description = null, + type = AnnouncementType.Informative(), + ) + Spacer(Modifier.height(24.dp)) + SuperButton( + onClick = onJoinRoom, + modifier = Modifier.fillMaxWidth(), + buttonSize = ButtonSize.Large, + ) { + Text( + text = stringResource(R.string.screen_join_room_join_action), + ) + } + } +} + +@Composable +private fun UnsupportedSpaceFooter( + applicationName: String, + onGoBack: () -> Unit, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + Announcement( + title = stringResource(R.string.screen_join_room_space_not_supported_title), + description = stringResource(R.string.screen_join_room_space_not_supported_description, applicationName), + type = AnnouncementType.Informative(), + ) + Spacer(Modifier.height(24.dp)) + Button( + text = stringResource(CommonStrings.action_ok), + onClick = onGoBack, + modifier = Modifier.fillMaxWidth(), + size = ButtonSize.Large, + ) } } @Composable private fun JoinRoomContent( + roomIdOrAlias: RoomIdOrAlias, contentState: ContentState, - applicationName: String, knockMessage: String, onKnockMessageUpdate: (String) -> Unit, modifier: Modifier = Modifier, @@ -256,67 +375,67 @@ private fun JoinRoomContent( DefaultLoadedContent( modifier = Modifier.verticalScroll(rememberScrollState()), contentState = contentState, - applicationName = applicationName, knockMessage = knockMessage, onKnockMessageUpdate = onKnockMessageUpdate ) } } } - is ContentState.UnknownRoom -> { - RoomPreviewOrganism( - avatar = { - PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) - }, - title = { - RoomPreviewTitleAtom(stringResource(R.string.screen_join_room_title_no_preview)) - }, - subtitle = { - RoomPreviewSubtitleAtom(stringResource(R.string.screen_join_room_subtitle_no_preview)) - }, - ) - } - is ContentState.Loading -> { - RoomPreviewOrganism( - avatar = { - PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) - }, - title = { - PlaceholderAtom(width = 200.dp, height = 22.dp) - }, - subtitle = { - PlaceholderAtom(width = 140.dp, height = 20.dp) - }, - ) - } - is ContentState.Failure -> { - RoomPreviewOrganism( - avatar = { - PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) - }, - title = { - when (contentState.roomIdOrAlias) { - is RoomIdOrAlias.Alias -> { - RoomPreviewTitleAtom(contentState.roomIdOrAlias.identifier) - } - is RoomIdOrAlias.Id -> { - PlaceholderAtom(width = 200.dp, height = 22.dp) - } - } - }, - subtitle = { - Text( - text = stringResource(id = CommonStrings.error_unknown), - textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.error, - ) - }, - ) - } + is ContentState.UnknownRoom -> UnknownRoomContent() + is ContentState.Loading -> IncompleteContent(roomIdOrAlias, isLoading = true) + is ContentState.Dismissing -> IncompleteContent(roomIdOrAlias, isLoading = false) + is ContentState.Failure -> IncompleteContent(roomIdOrAlias, isLoading = false) } } } +@Composable +private fun UnknownRoomContent( + modifier: Modifier = Modifier +) { + RoomPreviewOrganism( + modifier = modifier, + avatar = { + Spacer(modifier = Modifier.size(AvatarSize.RoomHeader.dp)) + }, + title = { + RoomPreviewTitleAtom(stringResource(R.string.screen_join_room_title_no_preview)) + }, + subtitle = { + }, + ) +} + +@Composable +private fun IncompleteContent( + roomIdOrAlias: RoomIdOrAlias, + isLoading: Boolean, + modifier: Modifier = Modifier +) { + RoomPreviewOrganism( + modifier = modifier, + avatar = { + PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) + }, + title = { + when (roomIdOrAlias) { + is RoomIdOrAlias.Alias -> { + RoomPreviewSubtitleAtom(roomIdOrAlias.identifier) + } + is RoomIdOrAlias.Id -> { + PlaceholderAtom(width = 200.dp, height = 22.dp) + } + } + }, + subtitle = { + if (isLoading) { + Spacer(Modifier.height(8.dp)) + CircularProgressIndicator() + } + }, + ) +} + @Composable private fun IsKnockedLoadedContent(modifier: Modifier = Modifier) { BoxWithConstraints( @@ -337,7 +456,6 @@ private fun IsKnockedLoadedContent(modifier: Modifier = Modifier) { @Composable private fun DefaultLoadedContent( contentState: ContentState.Loaded, - applicationName: String, knockMessage: String, onKnockMessageUpdate: (String) -> Unit, modifier: Modifier = Modifier, @@ -374,21 +492,7 @@ private fun DefaultLoadedContent( InviteSenderView(inviteSender = inviteSender) } RoomPreviewDescriptionAtom(contentState.topic ?: "") - if (contentState.roomType == RoomType.Space) { - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(R.string.screen_join_room_space_not_supported_title), - textAlign = TextAlign.Center, - style = ElementTheme.typography.fontBodyLgMedium, - color = MaterialTheme.colorScheme.primary, - ) - Text( - text = stringResource(R.string.screen_join_room_space_not_supported_description, applicationName), - textAlign = TextAlign.Center, - style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, - ) - } else if (contentState.joinAuthorisationStatus is JoinAuthorisationStatus.CanKnock) { + if (contentState.joinAuthorisationStatus is JoinAuthorisationStatus.CanKnock) { Spacer(modifier = Modifier.height(24.dp)) val supportingText = if (knockMessage.isNotEmpty()) { "${knockMessage.length}/$MAX_KNOCK_MESSAGE_LENGTH" @@ -462,6 +566,7 @@ internal fun JoinRoomViewPreview(@PreviewParameter(JoinRoomStateProvider::class) onBackClick = { }, onJoinSuccess = { }, onKnockSuccess = { }, + onForgetSuccess = { }, onCancelKnockSuccess = { }, ) } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt new file mode 100644 index 00000000000..496a911b1b6 --- /dev/null +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt @@ -0,0 +1,28 @@ +/* + * 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.features.joinroom.impl.di + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.RoomId +import javax.inject.Inject + +interface ForgetRoom { + suspend operator fun invoke(roomId: RoomId): Result +} + +@ContributesBinding(SessionScope::class) +class DefaultForgetRoom @Inject constructor(private val client: MatrixClient) : ForgetRoom { + override suspend fun invoke(roomId: RoomId): Result { + return client + .getPendingRoom(roomId) + ?.forget() + ?: Result.failure(IllegalStateException("No pending room found")) + } +} diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt index d906edbba94..ff4cbbbc80c 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt @@ -32,6 +32,7 @@ object JoinRoomModule { joinRoom: JoinRoom, knockRoom: KnockRoom, cancelKnockRoom: CancelKnockRoom, + forgetRoom: ForgetRoom, acceptDeclineInvitePresenter: Presenter, buildMeta: BuildMeta, ): JoinRoomPresenter.Factory { @@ -52,6 +53,7 @@ object JoinRoomModule { matrixClient = client, joinRoom = joinRoom, knockRoom = knockRoom, + forgetRoom = forgetRoom, cancelKnockRoom = cancelKnockRoom, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter, buildMeta = buildMeta, diff --git a/features/joinroom/impl/src/main/res/values-cs/translations.xml b/features/joinroom/impl/src/main/res/values-cs/translations.xml index 37c537bdce5..bab8e1f01e3 100644 --- a/features/joinroom/impl/src/main/res/values-cs/translations.xml +++ b/features/joinroom/impl/src/main/res/values-cs/translations.xml @@ -7,6 +7,10 @@ "Ano, zrušit" "Opravdu chcete zrušit svou žádost o vstup do této místnosti?" "Zrušit žádost o vstup" + "Ano, odmítnout a zablokovat" + "Opravdu chcete odmítnout pozvánku do této místnosti? Tím také zabráníte tomu, aby vás %1$s kontaktoval(a) nebo pozval(a) do místností." + "Odmítnout pozvání a zablokovat" + "Odmítnout a zablokovat" "Vstup do místnosti se nezdařil." "Tato místnost je buď určena pouze pro zvané, nebo do ní může být omezen přístup na úrovni prostoru." "Zapomenout na tuto místnost" @@ -17,6 +21,8 @@ "Zpráva (nepovinné)" "Pokud bude váš požadavek přijat, obdržíte pozvánku na vstup do místnosti." "Žádost o vstup odeslána" + "Náhled místnosti se nám nepodařilo zobrazit. To může být způsobeno problémy se sítí nebo serverem." + "Náhled této místnosti jsme nemohli zobrazit" "%1$s zatím nepodporuje prostory. Prostory můžete používat na webu." "Prostory zatím nejsou podporovány" "Klikněte na tlačítko níže a správce místnosti bude informován. Po schválení se budete moci připojit ke konverzaci." diff --git a/features/joinroom/impl/src/main/res/values-de/translations.xml b/features/joinroom/impl/src/main/res/values-de/translations.xml index 5a6d901a3dd..980125bb64c 100644 --- a/features/joinroom/impl/src/main/res/values-de/translations.xml +++ b/features/joinroom/impl/src/main/res/values-de/translations.xml @@ -7,6 +7,10 @@ "Ja, abbrechen" "Möchten Sie Ihre Beitrittsanfrage für diesen Chatroom wirklich stornieren?" "Beitrittsanfrage stornieren" + "Ja, ablehnen und blockieren" + "Sind Sie sicher, dass Sie die Einladung zu diesem Raum ablehnen möchten? Dadurch wird auch verhindert, dass %1$s Sie kontaktiert oder in Räume einlädt." + "Einladung ablehnen und blockieren" + "Ablehnen und blockieren" "Der Beitritt zum Chatroom schlug fehl." "Dieser Chatroom ist entweder nur auf Einladung zugänglich oder es kann zu Zugangsbeschränkungen auf Spaceebene kommen." "Vergessen Sie diesen Raum" @@ -17,6 +21,8 @@ "Nachricht (optional)" "Falls Ihre Anfrage, dem Raum beizutreten, akzeptiert wird, werden Sie eine Einladung erhalten." "Beitrittsanfrage geschickt" + "Wir konnten die Chatroomvorschau nicht anzeigen. Dies kann an Netzwerk- oder Serverproblemen liegen." + "Wir konnten diese Chatroomvorschau nicht anzeigen" "%1$s unterstützt noch keine Spaces. Du kannst auf Spaces im Web zugreifen." "Spaces werden noch nicht unterstützt" "Klopfe an um einen Administrator zu benachrichtigen. Nach der Freigabe kannst du dich an der Unterhaltung beteiligen." diff --git a/features/joinroom/impl/src/main/res/values-et/translations.xml b/features/joinroom/impl/src/main/res/values-et/translations.xml index 5efaa23a1d9..00ae5f18bbc 100644 --- a/features/joinroom/impl/src/main/res/values-et/translations.xml +++ b/features/joinroom/impl/src/main/res/values-et/translations.xml @@ -7,6 +7,10 @@ "Jah, tühista" "Kas sa oled kindel, et soovid tühistada oma palve jututoaga liitumiseks?" "Tühista liitumispalve" + "Jah, keeldu ja blokeeri" + "Kas sa oled kindel, et soovid keelduda kutsest sellesse jututuppa? Samaga kaob kasutajal %1$s võimalus sinuga suhelda ja saata sulle jututubade kutseid." + "Keeldu kutsest ja blokeeri" + "Keeldu ja blokeeri" "Jututoaga liitumine ei õnnestunud." "Ligipääs siia jututuppa on võimalik vaid kutse alusel või kehtivad siin kogukonnakohased piirangud." "Unusta see jututuba" @@ -17,6 +21,8 @@ "Selgitus (kui soovid lisada)" "Kui sinu liitumispalvega ollakse nõus, siis saad kutse jututoaga liitumiseks." "Liitumispalve on saadetud" + "Me ei saanud jututoa eelvaadet näidata. See võib olla põhjustatud võrguühenduse või serveri vigadest." + "Meil ei õnnestunud selle jututoa eelvaadet kuvada" "%1$s veel ei toeta kogukondadega liitumise ja kasutamise võimalust. Vajadusel saad seda teha veebiliidese vahendusel." "Kogukonnad pole veel toetatud" "Klõpsi allolevat nuppu ja jututoa haldaja saab asjakohase teate. Sa saad liituda, kui haldaja sinu soovi heaks kiidab." diff --git a/features/joinroom/impl/src/main/res/values-fr/translations.xml b/features/joinroom/impl/src/main/res/values-fr/translations.xml index e8ca43e13b2..5d63e8f7a1d 100644 --- a/features/joinroom/impl/src/main/res/values-fr/translations.xml +++ b/features/joinroom/impl/src/main/res/values-fr/translations.xml @@ -7,6 +7,10 @@ "Oui, annuler" "Êtes-vous sûr de vouloir annuler votre demande d’accès à ce salon ?" "Annuler la demande d’adhésion" + "Oui, refuser et bloquer" + "Êtes-vous sûr de vouloir refuser l’invitation à rejoindre ce salon ? Cela empêchera également %1$s de vous contacter ou de vous inviter dans les salons." + "Refuser l’invitation et bloquer" + "Refuser et bloquer" "Rejoindre le salon a échoué." "Ce salon est accessible uniquement sur invitation ou il peut y avoir des restrictions d’accès au niveau du Space." "Oublier ce salon" @@ -17,6 +21,8 @@ "Message (facultatif)" "Vous recevrez une invitation à rejoindre le salon si votre demande est acceptée." "Demande de rejoindre le salon envoyée" + "Impossible d’afficher l’aperçu du salon. Cela peut être dû à des problèmes de réseau ou de serveur." + "Impossible d’afficher l’aperçu de ce salon" "Les Spaces ne sont pas encore pris en charge par %1$s . Vous pouvez voir les Spaces sur le Web." "Les Spaces ne sont pas encore pris en charge" "Cliquez ci-dessous et un administrateur sera prévenu. Une fois votre demande approuvée, pour pourrez rejoindre la discussion." diff --git a/features/joinroom/impl/src/main/res/values-hu/translations.xml b/features/joinroom/impl/src/main/res/values-hu/translations.xml index 5073b034fce..e6b461abee6 100644 --- a/features/joinroom/impl/src/main/res/values-hu/translations.xml +++ b/features/joinroom/impl/src/main/res/values-hu/translations.xml @@ -7,6 +7,10 @@ "Igen, visszavonás" "Biztos, hogy visszavonja a szobához való csatlakozási kérését?" "Csatlakozási kérés visszavonása" + "Igen, elutasítás és blokkolás" + "Biztos, hogy elutasítja a meghívást, hogy csatlakozzon ehhez a szobához? Ez azt is megakadályozza, hogy %1$s kapcsolatba lépjen Önnel, vagy szobákba hívja." + "Meghívó elutasítása és blokkolás" + "Elutasítás és blokkolás" "A szobához való csatlakozás sikertelen." "Ebbe a szobába csak meghívóval vagy tértagsággal lehet belépni." "Szoba elfelejtése" @@ -17,6 +21,8 @@ "Üzenet (nem kötelező)" "Ha a kérését elfogadják, meghívót kap a szobához való csatlakozáshoz." "Csatlakozási kérés elküldve" + "Nem tudtuk megjeleníteni a szoba előnézetét. Ennek az oka hálózati vagy kiszolgálóprobléma is lehet." + "Nem tudtuk megjeleníteni a szoba előnézetét" "Az %1$s még nem támogatja a tereket. A tereket a weben érheti el." "A terek még nem támogatottak" "Kattintson az alábbi gombra, és a szoba adminisztrátora értesítést kap. A jóváhagyást követően csatlakozhat a beszélgetéshez." diff --git a/features/joinroom/impl/src/main/res/values-pl/translations.xml b/features/joinroom/impl/src/main/res/values-pl/translations.xml index 758d8d56153..56f16fc4757 100644 --- a/features/joinroom/impl/src/main/res/values-pl/translations.xml +++ b/features/joinroom/impl/src/main/res/values-pl/translations.xml @@ -1,14 +1,28 @@ + "Zostałeś zbanowany z tego pokoju przez %1$s." + "Zostałeś zbanowany z tego pokoju" + "Powód: %1$s." "Anuluj prośbę" "Tak, anuluj" "Czy na pewno chcesz anulować prośbę o dołączenie do tego pokoju?" "Anuluj prośbę o dołączenie" + "Tak, odrzuć i zablokuj" + "Czy na pewno chcesz odrzucić zaproszenie dołączenia do tego pokoju? %1$s nie będzie mógł się również z Tobą skontaktować, ani zaprosić Cię do pokoju." + "Odrzuć zaproszenie i zablokuj" + "Odrzuć i zablokuj" + "Nie udało się dołączyć do pokoju." + "Ten pokój wymaga zaproszenia lub jest ograniczony z poziomu przestrzeni." + "Zapomnij o tym pokoju" + "Potrzebujesz zaproszenia, aby dołączyć do tego pokoju" "Dołącz do pokoju" + "Aby dołączyć, musisz uzyskać zaproszenie lub być członkiem danej przestrzeni." "Wyślij prośbę o dołączenie" "Wiadomość (opcjonalne)" "Otrzymasz zaproszenie dołączenia do pokoju, jeśli prośba zostanie zaakceptowana." "Wysłano prośbę o dołączenie" + "Nie udało się wyświetlić podglądu pokoju. Może to być spowodowane problemami z siecią lub serwerem." + "Nie udało nam się wyświetlić podglądu tego pokoju" "%1$s jeszcze nie obsługuje przestrzeni. Uzyskaj dostęp do przestrzeni w wersji web." "Przestrzenie nie są jeszcze obsługiwane" "Kliknij przycisk poniżej, aby powiadomić administratora pokoju. Po zatwierdzeniu będziesz mógł dołączyć do rozmowy." diff --git a/features/joinroom/impl/src/main/res/values-pt/translations.xml b/features/joinroom/impl/src/main/res/values-pt/translations.xml index 93eeaf3bca2..ffca14b009d 100644 --- a/features/joinroom/impl/src/main/res/values-pt/translations.xml +++ b/features/joinroom/impl/src/main/res/values-pt/translations.xml @@ -1,14 +1,28 @@ + "Foste banido desta sala por %1$s." + "Foste banido desta sala." + "Razão: %1$s." "Cancelar pedido" "Sim, cancelar" "Tens a certeza de que queres cancelar o teu pedido de entrada nesta sala?" "Cancela o pedido de adesão" + "Sim, recusar & bloquear" + "Tens a certeza de que queres recusar o convite para entrar nesta sala? Isto também evitará que %1$s te contacte ou te convide para salas." + "Recusar convite & bloquear" + "Recusar e bloquear" + "Falha ao entrar na sala." + "A entrada nesta sala ou está limitada a convites ou a alguma configuração de espaço." + "Esquecer esta sala" + "Precisas de um convite para entrares nesta sala" "Entrar na sala" + "Podes ter que ser convidado ou pertenceres a um espaço para poderes entrar." "Bater à porta" "Mensagem (opcional)" "Irá receber um convite para participar na sala se seu pedido for aceite." "Pedido de adesão enviado" + "Não conseguimos exibir a pré-visualização da sala. Isso pode ser devido a problemas de rede ou servidor." + "Não foi possível exibir a pré-visualização desta sala" "A %1$s ainda não funciona com espaços. Podes usá-los na aplicação web." "Os espaços ainda não estão implementados" "Carrega no botão abaixo para notificar um administrador da sala. Poderás entrar quando te aprovarem." diff --git a/features/joinroom/impl/src/main/res/values-ru/translations.xml b/features/joinroom/impl/src/main/res/values-ru/translations.xml index b26afac1338..bf35a89aa0f 100644 --- a/features/joinroom/impl/src/main/res/values-ru/translations.xml +++ b/features/joinroom/impl/src/main/res/values-ru/translations.xml @@ -17,6 +17,7 @@ "Сообщение (опционально)" "Вы получите приглашение присоединиться к комнате, как только ваш запрос будет принят." "Запрос на присоединение отправлен" + "Не удалось отобразить предварительный просмотр комнаты. Это может быть связано с проблемами сети или сервера." "%1$s еще не поддерживает пространства. Вы можете получить к ним доступ в веб-версии." "Пространства пока не поддерживаются" "Нажмите кнопку ниже и администратор комнаты получит уведомление. После одобрения вы сможете присоединиться к обсуждению." diff --git a/features/joinroom/impl/src/main/res/values-sk/translations.xml b/features/joinroom/impl/src/main/res/values-sk/translations.xml index 4eeab053dd7..645c523c618 100644 --- a/features/joinroom/impl/src/main/res/values-sk/translations.xml +++ b/features/joinroom/impl/src/main/res/values-sk/translations.xml @@ -7,6 +7,10 @@ "Áno, zrušiť" "Ste si istí, že chcete zrušiť svoju žiadosť o vstup do tejto miestnosti?" "Zrušiť žiadosť o pripojenie" + "Áno, odmietnuť a zablokovať" + "Ste si istí, že chcete odmietnuť pozvanie na vstup do tejto miestnosti? To tiež zabráni tomu, aby vás %1$s kontaktoval/a alebo vás pozval/a do miestností." + "Odmietnuť pozvánku a zablokovať" + "Odmietnuť a zablokovať" "Pripojenie do miestnosti zlyhalo." "Táto miestnosť je buď len pre pozvaných, alebo môžu existovať obmedzenia na prístup na úrovni priestoru." "Zabudnúť túto miestnosť" @@ -17,6 +21,8 @@ "Správa (voliteľné)" "Ak bude vaša žiadosť prijatá, dostanete pozvánku na vstup do miestnosti." "Žiadosť o pripojenie bola odoslaná" + "Nepodarilo sa zobraziť ukážku miestnosti. Môže to byť spôsobené problémami so sieťou alebo serverom." + "Ukážku tejto miestnosti sa nepodarilo zobraziť" "%1$s zatiaľ nepodporuje priestory. K priestorom môžete pristupovať na webe." "Priestory zatiaľ nie sú podporované" "Kliknite na tlačidlo nižšie a správca miestnosti bude informovaný. Po schválení sa budete môcť pripojiť ku konverzácii." diff --git a/features/joinroom/impl/src/main/res/values-sv/translations.xml b/features/joinroom/impl/src/main/res/values-sv/translations.xml index a61bce02a4c..b44672871de 100644 --- a/features/joinroom/impl/src/main/res/values-sv/translations.xml +++ b/features/joinroom/impl/src/main/res/values-sv/translations.xml @@ -1,6 +1,9 @@ "Avbryt begäran" + "Ja, avbryt" + "Är du säker på att du vill avbryta din begäran om att gå med i det här rummet?" + "Avbryt begäran om att gå med" "Gå med i rummet" "Knacka för att gå med" "Meddelande (valfritt)" diff --git a/features/joinroom/impl/src/main/res/values-tr/translations.xml b/features/joinroom/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..fb3edc84b2c --- /dev/null +++ b/features/joinroom/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,32 @@ + + + "%1$s tarafından bu odadan yasaklandınız." + "Bu odadan yasaklandın" + "Neden: %1$s." + "İsteği iptal et" + "Evet, iptal et" + "Bu odaya katılma isteğinizi iptal etmek istediğinizden emin misiniz?" + "Katılma isteğini iptal et" + "Evet, reddet ve engelle" + "Bu odaya katılma davetini reddetmek istediğinizden emin misiniz? Bu aynı zamanda %1$s sizinle iletişim kurmasını veya sizi odalara davet etmesini de engeller." + "Daveti reddet ve engelle" + "Reddet ve engelle" + "Odaya katılım başarısız oldu." + "Bu odaya yalnızca davetle girilebilir veya alan düzeyinde erişim kısıtlamaları olabilir." + "Bu odayı unut" + "Bu odaya katılmak için bir davete ihtiyacınız var" + "Odaya katıl" + "Katılmak için davet edilmeniz veya bir alana üye olmanız gerekebilir." + "Katılma isteği gönder" + "Mesaj (isteğe bağlı)" + "Talebiniz kabul edilirse odaya katılmanız için bir davet alacaksınız." + "Katılma isteği gönderildi" + "Oda önizlemesini görüntüleyemedik. Bunun nedeni ağ veya sunucu sorunları olabilir." + "Bu oda önizlemesini görüntüleyemedik" + "%1$s henüz alanları desteklemiyor. Alanlara web üzerinden erişebilirsiniz." + "Alanlar henüz desteklenmiyor" + "Aşağıdaki düğmeyi tıkladığınızda bir oda yöneticisi bilgilendirilecektir. Onaylandıktan sonra görüşmeye katılabilirsiniz." + "Mesaj geçmişini görüntülemek için bu odaya üye olmanız gerekmektedir." + "Bu odaya katılmak ister misiniz?" + "Önizleme mevcut değil" + diff --git a/features/joinroom/impl/src/main/res/values-uk/translations.xml b/features/joinroom/impl/src/main/res/values-uk/translations.xml index 371ed60c94a..72a085042f0 100644 --- a/features/joinroom/impl/src/main/res/values-uk/translations.xml +++ b/features/joinroom/impl/src/main/res/values-uk/translations.xml @@ -1,14 +1,28 @@ + "%1$s забороняє вам відвідувати цю кімнату." + "Вам заборонили відвідувати цю кімнату" + "Причина: %1$s." "Скасувати запит" "Так, скасувати" "Ви впевнені, що бажаєте скасувати свій запит на приєднання до цієї кімнати?" "Скасувати запит на приєднання" + "Так, відхилити та заблокувати" + "Ви впевнені, що хочете відхилити запрошення приєднатися до цієї кімнати? Це також завадить %1$s зв\'язатися з вами або запрошувати вас в кімнати." + "Відхилити запрошення та заблокувати" + "Відхилити та заблокувати" + "Не вдалося приєднатися до кімнати." + "Ця кімната доступна лише за запрошенням або на рівні простору можуть бути обмеження доступу." + "Забути цю кімнату" + "Вам потрібне запрошення, щоб приєднатися до цієї кімнати" "Приєднатися до кімнати" + "Можливо, вам знадобиться отримати запрошення або стати учасником простору, щоб приєднатися." "Постукати, щоб приєднатися" "Повідомлення (необов\'язково)" "Ви отримаєте запрошення приєднатися до кімнати, якщо ваш запит буде прийнятий." "Запит на приєднання надіслано" + "Ми не змогли показати попередній перегляд кімнати. Це може бути пов\'язано з проблемами мережі або сервера." + "Ми не можемо показати попередній перегляд цієї кімнати" "%1$s ще не підтримує простори. Ви можете отримати доступ до них у вебверсії." "Простори поки що не підтримуються" "Натисніть кнопку нижче, і адміністратор кімнати отримає сповіщення. Ви зможете приєднатися до розмови після схвалення." diff --git a/features/joinroom/impl/src/main/res/values/localazy.xml b/features/joinroom/impl/src/main/res/values/localazy.xml index 391d63eb2fd..a3e91c542c6 100644 --- a/features/joinroom/impl/src/main/res/values/localazy.xml +++ b/features/joinroom/impl/src/main/res/values/localazy.xml @@ -7,6 +7,10 @@ "Yes, cancel" "Are you sure that you want to cancel your request to join this room?" "Cancel request to join" + "Yes, decline & block" + "Are you sure you want to decline the invite to join this room? This will also prevent %1$s from contacting you or inviting you to rooms." + "Decline invite & block" + "Decline and block" "Joining the room failed." "This room is either invite-only or there might be restrictions to access at space level." "Forget this room" @@ -17,6 +21,8 @@ "Message (optional)" "You will receive an invite to join the room if your request is accepted." "Request to join sent" + "We could not display the room preview. This may be due to network or server issues." + "We couldn’t display this room preview" "%1$s does not support spaces yet. You can access spaces on web." "Spaces are not supported yet" "Click the button below and a room administrator will be notified. You’ll be able to join the conversation once approved." diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeForgetRoom.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeForgetRoom.kt new file mode 100644 index 00000000000..48d3eec0776 --- /dev/null +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/FakeForgetRoom.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.features.joinroom.impl + +import io.element.android.features.joinroom.impl.di.ForgetRoom +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.tests.testutils.simulateLongTask + +class FakeForgetRoom( + var lambda: (RoomId) -> Result = { Result.success(Unit) } +) : ForgetRoom { + override suspend fun invoke(roomId: RoomId) = simulateLongTask { + lambda(roomId) + } +} diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 82c4d4f637f..5febed1b701 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -13,6 +13,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState import io.element.android.features.joinroom.impl.di.CancelKnockRoom +import io.element.android.features.joinroom.impl.di.ForgetRoom import io.element.android.features.joinroom.impl.di.KnockRoom import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction @@ -24,16 +25,23 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.exception.ClientException +import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.RoomMembershipDetails import io.element.android.libraries.matrix.api.room.RoomType -import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.A_SERVER_LIST +import io.element.android.libraries.matrix.test.A_USER_ID +import io.element.android.libraries.matrix.test.A_USER_ID_2 import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.room.aRoomMember +import io.element.android.libraries.matrix.test.room.aRoomPreview +import io.element.android.libraries.matrix.test.room.aRoomPreviewInfo import io.element.android.libraries.matrix.test.room.aRoomSummary import io.element.android.libraries.matrix.test.room.join.FakeJoinRoom import io.element.android.libraries.matrix.ui.model.toInviteSender @@ -43,12 +51,14 @@ import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.test +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test import java.util.Optional +@Suppress("LargeClass") class JoinRoomPresenterTest { @get:Rule val warmUpRule = WarmUpRule() @@ -58,12 +68,10 @@ class JoinRoomPresenterTest { val presenter = createJoinRoomPresenter() presenter.test { awaitItem().also { state -> - assertThat(state.contentState).isEqualTo(ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias())) - assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) + assertThat(state.contentState).isEqualTo(ContentState.Loading) assertThat(state.acceptDeclineInviteState).isEqualTo(anAcceptDeclineInviteState()) assertThat(state.cancelKnockAction).isEqualTo(AsyncAction.Uninitialized) assertThat(state.knockAction).isEqualTo(AsyncAction.Uninitialized) - assertThat(state.applicationName).isEqualTo("AppName") cancelAndIgnoreRemainingEvents() } } @@ -88,7 +96,7 @@ class JoinRoomPresenterTest { assertThat(contentState.name).isEqualTo(roomSummary.info.name) assertThat(contentState.topic).isEqualTo(roomSummary.info.topic) assertThat(contentState.alias).isEqualTo(roomSummary.info.canonicalAlias) - assertThat(contentState.numberOfMembers).isEqualTo(roomSummary.info.activeMembersCount) + assertThat(contentState.numberOfMembers).isEqualTo(roomSummary.info.joinedMembersCount) assertThat(contentState.isDm).isEqualTo(roomSummary.info.isDirect) assertThat(contentState.roomAvatarUrl).isEqualTo(roomSummary.info.avatarUrl) } @@ -226,9 +234,79 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is joined with unauthorized error, then the authorisation status is unauthorized`() = runTest { + val roomDescription = aRoomDescription() + val presenter = createJoinRoomPresenter( + roomDescription = Optional.of(roomDescription), + joinRoomLambda = { _, _, _ -> + Result.failure(ClientException.MatrixApi(ErrorKind.Forbidden, "403", "Forbidden")) + }, + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + state.eventSink(JoinRoomEvents.JoinRoom) + } + awaitItem().also { state -> + assertThat(state.joinAction).isEqualTo(AsyncAction.Loading) + } + awaitItem().also { state -> + assertThat(state.joinAction).isEqualTo(AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin)) + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unauthorized) + } + } + } + + @OptIn(ExperimentalCoroutinesApi::class) + @Test + fun `present - when room is banned, then join authorization is equal to IsBanned`() = runTest { + val roomSummary = aRoomSummary(currentUserMembership = CurrentUserMembership.BANNED, joinRule = JoinRule.Public) + val matrixClient = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview( + info = aRoomPreviewInfo( + roomId = A_ROOM_ID, + joinRule = JoinRule.Public, + currentUserMembership = CurrentUserMembership.BANNED, + ), + roomMembershipDetails = { + Result.success( + RoomMembershipDetails( + currentUserMember = aRoomMember(userId = A_USER_ID, displayName = "Alice"), + senderMember = aRoomMember(userId = A_USER_ID_2, displayName = "Bob"), + ) + ) + } + ) + ) + } + ).apply { + getRoomSummaryFlowLambda = { _ -> + flowOf(Optional.of(roomSummary)) + } + } + val presenter = createJoinRoomPresenter( + matrixClient = matrixClient + ) + presenter.test { + // Skip initial state + skipItems(1) + + // Advance until the room info is loaded and the presenter recomposes. The room preview info still needs to be loaded async. + skipItems(1) + + // Now we should have the room info + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isInstanceOf(JoinAuthorisationStatus.IsBanned::class.java) + } + } + } + @Test fun `present - when room is left and public then join authorization is equal to canJoin`() = runTest { - val roomSummary = aRoomSummary(currentUserMembership = CurrentUserMembership.LEFT, isPublic = true) + val roomSummary = aRoomSummary(currentUserMembership = CurrentUserMembership.LEFT, joinRule = JoinRule.Public) val matrixClient = FakeMatrixClient().apply { getRoomSummaryFlowLambda = { _ -> flowOf(Optional.of(roomSummary)) @@ -246,8 +324,8 @@ class JoinRoomPresenterTest { } @Test - fun `present - when room is left and not public then join authorization is equal to unknown`() = runTest { - val roomSummary = aRoomSummary(currentUserMembership = CurrentUserMembership.LEFT, isPublic = false) + fun `present - when room is left and join rule null then join authorization is equal to Unknown`() = runTest { + val roomSummary = aRoomSummary(currentUserMembership = CurrentUserMembership.LEFT, joinRule = null) val matrixClient = FakeMatrixClient().apply { getRoomSummaryFlowLambda = { _ -> flowOf(Optional.of(roomSummary)) @@ -327,6 +405,20 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room preview join rule is Private then join authorization is equal to NeedInvite`() = runTest { + val roomDescription = aRoomDescription(joinRule = RoomDescription.JoinRule.UNKNOWN) + val presenter = createJoinRoomPresenter( + roomDescription = Optional.of(roomDescription) + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) + } + } + } + @Test fun `present - emit knock room event`() = runTest { val knockMessage = "Knock message" @@ -405,24 +497,60 @@ class JoinRoomPresenterTest { .with(value(A_ROOM_ID)) } + @Test + fun `present - emit forget room event`() = runTest { + val forgetRoomSuccess = lambdaRecorder { _: RoomId -> + Result.success(Unit) + } + val forgetRoomFailure = lambdaRecorder { _: RoomId -> + Result.failure(RuntimeException("Failed to forget room")) + } + val fakeForgetRoom = FakeForgetRoom(forgetRoomSuccess) + val presenter = createJoinRoomPresenter(forgetRoom = fakeForgetRoom) + presenter.test { + skipItems(1) + awaitItem().also { state -> + state.eventSink(JoinRoomEvents.ForgetRoom) + } + + assertThat(awaitItem().forgetAction).isEqualTo(AsyncAction.Loading) + awaitItem().also { state -> + assertThat(state.forgetAction).isEqualTo(AsyncAction.Success(Unit)) + fakeForgetRoom.lambda = forgetRoomFailure + state.eventSink(JoinRoomEvents.ForgetRoom) + } + + assertThat(awaitItem().forgetAction).isEqualTo(AsyncAction.Loading) + awaitItem().also { state -> + assertThat(state.forgetAction).isInstanceOf(AsyncAction.Failure::class.java) + } + } + assert(forgetRoomFailure) + .isCalledOnce() + .with(value(A_ROOM_ID)) + assert(forgetRoomSuccess) + .isCalledOnce() + .with(value(A_ROOM_ID)) + } + @Test fun `present - when room is not known RoomPreview is loaded`() = runTest { val client = FakeMatrixClient( - getRoomPreviewInfoResult = { _, _ -> + getRoomPreviewResult = { _, _ -> Result.success( - RoomPreviewInfo( - roomId = A_ROOM_ID, - canonicalAlias = RoomAlias("#alias:matrix.org"), - name = "Room name", - topic = "Room topic", - avatarUrl = "avatarUrl", - numberOfJoinedMembers = 2, - roomType = RoomType.Room, - isHistoryWorldReadable = false, - isJoined = false, - isInvited = false, - isPublic = true, - canKnock = false, + aRoomPreview( + info = aRoomPreviewInfo( + roomId = A_ROOM_ID, + canonicalAlias = RoomAlias("#alias:matrix.org"), + name = "Room name", + topic = "Room topic", + avatarUrl = "avatarUrl", + numberOfJoinedMembers = 2, + isSpace = false, + isHistoryWorldReadable = false, + joinRule = JoinRule.Public, + currentUserMembership = null, + ) ) ) } @@ -450,10 +578,130 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is not known RoomPreview is loaded as Private`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(joinRule = JoinRule.Private)) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.NeedInvite) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded as Custom`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(joinRule = JoinRule.Custom("custom"))) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unknown) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded as Invite`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(joinRule = JoinRule.Invite)) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.NeedInvite) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded as KnockRestricted`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(joinRule = JoinRule.KnockRestricted(emptyList()))) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.CanKnock) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded as Restricted`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(joinRule = JoinRule.Restricted(emptyList()))) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Restricted) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded as Space`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { _, _ -> + Result.success( + aRoomPreview(info = aRoomPreviewInfo(isSpace = true)) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsSpace("AppName")) + } + } + } + @Test fun `present - when room is not known RoomPreview is loaded with error`() = runTest { val client = FakeMatrixClient( - getRoomPreviewInfoResult = { _, _ -> + getRoomPreviewResult = { _, _ -> Result.failure(AN_EXCEPTION) } ) @@ -464,35 +712,27 @@ class JoinRoomPresenterTest { skipItems(1) awaitItem().also { state -> assertThat(state.contentState).isEqualTo( - ContentState.Failure( - roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), - error = AN_EXCEPTION - ) + ContentState.Failure(error = AN_EXCEPTION) ) state.eventSink(JoinRoomEvents.RetryFetchingContent) } skipItems(1) awaitItem().also { state -> - assertThat(state.contentState).isEqualTo( - ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias()) - ) + assertThat(state.contentState).isEqualTo(ContentState.Loading) } awaitItem().also { state -> assertThat(state.contentState).isEqualTo( - ContentState.Failure( - roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), - error = AN_EXCEPTION - ) + ContentState.Failure(error = AN_EXCEPTION) ) } } } @Test - fun `present - when room is not known RoomPreview is loaded with error 403`() = runTest { + fun `present - when room is not known RoomPreview is loaded with error Forbidden`() = runTest { val client = FakeMatrixClient( - getRoomPreviewInfoResult = { _, _ -> - Result.failure(Exception("403")) + getRoomPreviewResult = { _, _ -> + Result.failure(ClientException.MatrixApi(ErrorKind.Forbidden, "403", "Forbidden")) } ) val presenter = createJoinRoomPresenter( @@ -501,11 +741,7 @@ class JoinRoomPresenterTest { presenter.test { skipItems(1) awaitItem().also { state -> - assertThat(state.contentState).isEqualTo( - ContentState.UnknownRoom( - roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), - ) - ) + assertThat(state.contentState).isEqualTo(ContentState.UnknownRoom) } } } @@ -521,6 +757,7 @@ class JoinRoomPresenterTest { }, knockRoom: KnockRoom = FakeKnockRoom(), cancelKnockRoom: CancelKnockRoom = FakeCancelKnockRoom(), + forgetRoom: ForgetRoom = FakeForgetRoom(), buildMeta: BuildMeta = aBuildMeta(applicationName = "AppName"), acceptDeclineInvitePresenter: Presenter = Presenter { anAcceptDeclineInviteState() } ): JoinRoomPresenter { @@ -534,6 +771,7 @@ class JoinRoomPresenterTest { joinRoom = FakeJoinRoom(joinRoomLambda), knockRoom = knockRoom, cancelKnockRoom = cancelKnockRoom, + forgetRoom = forgetRoom, buildMeta = buildMeta, acceptDeclineInvitePresenter = acceptDeclineInvitePresenter ) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index d756cdbb8cb..b654bc7c4b6 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -178,7 +178,7 @@ class JoinRoomViewTest { } @Test - fun `clicking on Go back when a space is displayed invokes the expected callback`() { + fun `clicking on ok when a space is displayed invokes the expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false) ensureCalledOnce { rule.setJoinRoomView( @@ -188,9 +188,38 @@ class JoinRoomViewTest { ), onBackClick = it ) - rule.clickOn(CommonStrings.action_go_back) + rule.clickOn(CommonStrings.action_ok) } } + + @Test + fun `clicking on ok when user is unauthorized the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(), + joinAction = AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin), + eventSink = eventsRecorder, + ), + onBackClick = it + ) + rule.clickOn(CommonStrings.action_ok) + } + } + + @Test + fun `clicking on forget when user is banned invokes the expected callback`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsBanned(null, null)), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_join_room_forget_action) + eventsRecorder.assertSingle(JoinRoomEvents.ForgetRoom) + } } private fun AndroidComposeTestRule.setJoinRoomView( @@ -199,6 +228,7 @@ private fun AndroidComposeTestRule.setJoinR onJoinSuccess: () -> Unit = EnsureNeverCalled(), onKnockSuccess: () -> Unit = EnsureNeverCalled(), onCancelKnockSuccess: () -> Unit = EnsureNeverCalled(), + onForgetSuccess: () -> Unit = EnsureNeverCalled(), ) { setContent { JoinRoomView( @@ -206,7 +236,8 @@ private fun AndroidComposeTestRule.setJoinR onBackClick = onBackClick, onJoinSuccess = onJoinSuccess, onKnockSuccess = onKnockSuccess, - onCancelKnockSuccess = onCancelKnockSuccess + onForgetSuccess = onForgetSuccess, + onCancelKnockSuccess = onCancelKnockSuccess, ) } } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerView.kt index b62b886afa6..09ac8bff592 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerView.kt @@ -128,14 +128,14 @@ private fun KnockRequestsBannerContent( Text( text = state.formattedTitle(), style = ElementTheme.typography.fontBodyMdMedium, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, textAlign = TextAlign.Start, ) if (state.subtitle != null) { Text( text = state.subtitle, style = ElementTheme.typography.fontBodySmRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, textAlign = TextAlign.Start, ) } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt index 800d68c273d..3b90fe7e117 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt @@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf @@ -331,7 +330,7 @@ private fun KnockRequestItem( text = knockRequest.getBestName(), maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyLgMedium, ) val formattedDate = knockRequest.formattedDate @@ -339,7 +338,7 @@ private fun KnockRequestItem( Spacer(modifier = Modifier.width(8.dp)) Text( text = formattedDate, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmRegular, ) } @@ -348,7 +347,7 @@ private fun KnockRequestItem( if (!knockRequest.displayName.isNullOrEmpty()) { Text( text = knockRequest.userId.value, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodyMdRegular, diff --git a/features/knockrequests/impl/src/main/res/values-be/translations.xml b/features/knockrequests/impl/src/main/res/values-be/translations.xml new file mode 100644 index 00000000000..e6f08bc3203 --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-be/translations.xml @@ -0,0 +1,4 @@ + + + "Прыняць" + diff --git a/features/knockrequests/impl/src/main/res/values-bg/translations.xml b/features/knockrequests/impl/src/main/res/values-bg/translations.xml new file mode 100644 index 00000000000..108ffb122ea --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-bg/translations.xml @@ -0,0 +1,4 @@ + + + "Приемане" + diff --git a/features/knockrequests/impl/src/main/res/values-es/translations.xml b/features/knockrequests/impl/src/main/res/values-es/translations.xml new file mode 100644 index 00000000000..66914c9c896 --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-es/translations.xml @@ -0,0 +1,4 @@ + + + "Aceptar" + diff --git a/features/knockrequests/impl/src/main/res/values-fa/translations.xml b/features/knockrequests/impl/src/main/res/values-fa/translations.xml new file mode 100644 index 00000000000..33e231cb85c --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-fa/translations.xml @@ -0,0 +1,4 @@ + + + "پذیرش" + diff --git a/features/knockrequests/impl/src/main/res/values-hu/translations.xml b/features/knockrequests/impl/src/main/res/values-hu/translations.xml index 2ae4a79857d..c01121ae83d 100644 --- a/features/knockrequests/impl/src/main/res/values-hu/translations.xml +++ b/features/knockrequests/impl/src/main/res/values-hu/translations.xml @@ -24,7 +24,7 @@ "Ha valaki csatlakozni kíván a szobához, itt láthatja a kérését." "Nincs függőben lévő csatlakozási kérelem" "Csatlakozási kérések betöltése…" - "Csatlakozási kérelmek" + "Csatlakozási kérelem" "%1$s és még %2$d felhasználó szeretne csatlakozni ehhez a szobához" "%1$s és még %2$d felhasználó szeretne csatlakozni ehhez a szobához" diff --git a/features/knockrequests/impl/src/main/res/values-ka/translations.xml b/features/knockrequests/impl/src/main/res/values-ka/translations.xml new file mode 100644 index 00000000000..ce6628b264f --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-ka/translations.xml @@ -0,0 +1,4 @@ + + + "მიღება" + diff --git a/features/knockrequests/impl/src/main/res/values-nb/translations.xml b/features/knockrequests/impl/src/main/res/values-nb/translations.xml new file mode 100644 index 00000000000..33afe86da78 --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-nb/translations.xml @@ -0,0 +1,4 @@ + + + "Godta" + diff --git a/features/knockrequests/impl/src/main/res/values-nl/translations.xml b/features/knockrequests/impl/src/main/res/values-nl/translations.xml new file mode 100644 index 00000000000..46787d05e0c --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-nl/translations.xml @@ -0,0 +1,4 @@ + + + "Accepteren" + diff --git a/features/knockrequests/impl/src/main/res/values-pt-rBR/translations.xml b/features/knockrequests/impl/src/main/res/values-pt-rBR/translations.xml new file mode 100644 index 00000000000..ebece87661d --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-pt-rBR/translations.xml @@ -0,0 +1,4 @@ + + + "Aceitar" + diff --git a/features/knockrequests/impl/src/main/res/values-pt/translations.xml b/features/knockrequests/impl/src/main/res/values-pt/translations.xml index 1ba0fe34d33..255c9d52020 100644 --- a/features/knockrequests/impl/src/main/res/values-pt/translations.xml +++ b/features/knockrequests/impl/src/main/res/values-pt/translations.xml @@ -4,15 +4,26 @@ "Tens a certeza de que queres aceitar todos os pedidos de entrada?" "Aceitar todos os pedidos" "Aceitar todos" + "Não foi possível aceitar todos os pedidos. Queres tentar novamente?" + "Falha ao aceitar todos os pedidos" + "A aceitar todos os pedidos de entrada" + "Não foi possível aceitar este pedido. Queres tentar novamente?" + "Falha ao aceitar pedido" + "A aceitar pedido de entrada" "Sim, recusar e proibir" "Tens a certeza de que queres recusar e banir %1$s? Este utilizador não poderá voltar a pedir para entrar nesta sala." "Recusar e banir" - "Sim, recusar" + "A rejeitar pedido e a banir o utilizador" + "Sim, rejeitar" "Tens a certeza que queres recusar o pedido de entrada de %1$s?" - "Recusar entrada" + "Rejeitar entrada" "Recusar e banir" + "Não foi possível rejeitar este pedido. Queres tentar novamente?" + "Falha ao rejeitar pedido" + "A rejeitar pedido de entrada" "Quando alguém pedir para entrar na sala, irás poder rever o pedido aqui." "Sem pedidos de entrada" + "A carregar pedidos de entrada…" "Pedidos de entrada" "%1$s +%2$d outro querem entrar nesta sala" diff --git a/features/knockrequests/impl/src/main/res/values-ro/translations.xml b/features/knockrequests/impl/src/main/res/values-ro/translations.xml new file mode 100644 index 00000000000..2a75681c5d0 --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-ro/translations.xml @@ -0,0 +1,4 @@ + + + "Acceptați" + diff --git a/features/knockrequests/impl/src/main/res/values-ru/translations.xml b/features/knockrequests/impl/src/main/res/values-ru/translations.xml index 3447cd0bc73..f5e91a469a5 100644 --- a/features/knockrequests/impl/src/main/res/values-ru/translations.xml +++ b/features/knockrequests/impl/src/main/res/values-ru/translations.xml @@ -24,14 +24,14 @@ "Вы сможете увидеть запрос, когда кто-то попросит присоединиться к комнате." "Нет ожидающих запросов на присоединение" "Загрузка запросов на присоединение…" - "Запросы на присоединение" + "Запросы на вступление" "%1$s +%2$d хочет присоединиться к этой комнате" "%1$s +%2$d хотят присоединиться к этой комнате" "%1$s +%2$d хотят присоединиться к этой комнате" "Показать все" - "Принять" + "Разрешить" "%1$s хочет присоединиться к этой комнате" "Просмотр" diff --git a/features/knockrequests/impl/src/main/res/values-sk/translations.xml b/features/knockrequests/impl/src/main/res/values-sk/translations.xml index e8df24e46b4..12cc86d327c 100644 --- a/features/knockrequests/impl/src/main/res/values-sk/translations.xml +++ b/features/knockrequests/impl/src/main/res/values-sk/translations.xml @@ -24,7 +24,7 @@ "Keď niekto požiada, aby sa pripojil k miestnosti, jeho žiadosť si môžete pozrieť tu." "Žiadna čakajúca žiadosť o pripojenie" "Načítavajú sa žiadosti o pripojenie…" - "Žiadosti o pripojenie" + "Žiadosti o vstup" "%1$s +%2$d ďalší chcú vstúpiť do tejto miestnosti" "%1$s +%2$d ďalší chcú vstúpiť do tejto miestnosti" diff --git a/features/knockrequests/impl/src/main/res/values-sv/translations.xml b/features/knockrequests/impl/src/main/res/values-sv/translations.xml new file mode 100644 index 00000000000..a51c9794276 --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-sv/translations.xml @@ -0,0 +1,31 @@ + + + "Ja, acceptera alla" + "Är du säker på att du vill acceptera alla förfrågningar om att gå med?" + "Acceptera alla förfrågningar" + "Acceptera alla" + "Misslyckades att acceptera alla förfrågningar" + "Accepterar alla förfrågningar om att gå med" + "Accepterar begäran om att gå med" + "Ja, avslå och förbjud" + "Är du säker på att du vill avvisa och förbjuda%1$s? Den här användaren kommer inte att kunna begära åtkomst för att gå med i det här rummet igen." + "Avvisa och förbjud åtkomst" + "Avvisar och bannar åtkomst" + "Ja, avböj" + "Är du säker på att du vill avslå %1$s begäran om att gå med i det här rummet?" + "Avvisa åtkomst" + "Avvisa och förbjud" + "Avvisa begäran om att gå med" + "När någon begär om att gå med i rummet, kan du se deras förfrågan här." + "Ingen väntande begäran om att gå med" + "Laddar förfrågningar om att gå med …" + "Begäran om att gå med" + + "%1$s+ %2$d annan vill gå med i detta rum" + "%1$s+ %2$d andra vill gå med i detta rum" + + "Visa alla" + "Godkänn" + "%1$s vill gå med i det här rummet" + "Visa" + diff --git a/features/knockrequests/impl/src/main/res/values-tr/translations.xml b/features/knockrequests/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..b6a070ee08b --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,36 @@ + + + "Evet, tümünü kabul et" + "Tüm katılma isteklerini kabul etmek istediğinizden emin misiniz?" + "Tüm istekleri kabul et" + "Tümünü kabul et" + "Tüm istekleri kabul edemedik. Tekrar denemek ister misiniz?" + "Tüm istekler kabul edilemedi" + "Tüm katılım istekleri kabul ediliyor" + "Bu isteği kabul edemedik. Tekrar denemek ister misiniz?" + "İstek kabul edilemedi" + "Katılma isteği kabul ediliyor" + "Evet, reddet ve yasakla" + "%1$s reddetmek ve yasaklamak istediğinizden emin misiniz? Bu kullanıcı, bu odaya tekrar katılmak için erişim isteğinde bulunamaz." + "Reddet ve erişimi yasakla" + "Reddediliyor ve erişim yasaklanıyor" + "Evet, reddet" + "Bu odaya katılma isteğini reddetmek istediğinizden emin misiniz %1$s?" + "Erişimi reddet" + "Reddet ve yasakla" + "Bu isteği reddedemedik. Tekrar denemek ister misiniz?" + "İsteği reddetme başarısız oldu" + "Katılma isteği reddediliyor" + "Birisi odaya katılmak istediğinde, isteklerini burada görebileceksiniz." + "Bekleyen katılım isteği yok" + "Katılma istekleri yükleniyor…" + "Katılma istekleri" + + "%1$s +%2$d kişi daha bu odaya katılmak istiyor" + "%1$s +%2$d kişi daha bu odaya katılmak istiyor" + + "Tümünü görüntüle" + "Kabul et" + "%1$s bu odaya katılmak istiyor" + "Görüntüle" + diff --git a/features/knockrequests/impl/src/main/res/values-uz/translations.xml b/features/knockrequests/impl/src/main/res/values-uz/translations.xml new file mode 100644 index 00000000000..d7e6705e67c --- /dev/null +++ b/features/knockrequests/impl/src/main/res/values-uz/translations.xml @@ -0,0 +1,4 @@ + + + "Qabul qiling" + diff --git a/features/leaveroom/api/src/main/res/values-tr/translations.xml b/features/leaveroom/api/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..39ba596628f --- /dev/null +++ b/features/leaveroom/api/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "Bu sohbetten ayrılmak istediğinizden emin misiniz? Bu sohbet herkese açık değil ve davet olmadan tekrar katılamayacaksınız." + "Bu odadan ayrılmak istediğinizden emin misiniz? Burada tek kişi sizsiniz. Ayrılırsanız, siz de dahil olmak üzere gelecekte kimse katılamayacak." + "Bu odadan ayrılmak istediğinizden emin misiniz? Bu oda herkese açık değildir ve davet olmadan tekrar katılamazsınız." + "Odadan çıkmak istediğinden emin misin?" + diff --git a/features/lockscreen/impl/build.gradle.kts b/features/lockscreen/impl/build.gradle.kts index 6e8784b72cb..808abf91505 100644 --- a/features/lockscreen/impl/build.gradle.kts +++ b/features/lockscreen/impl/build.gradle.kts @@ -21,6 +21,7 @@ setupAnvil() dependencies { api(projects.features.lockscreen.api) implementation(projects.appconfig) + implementation(projects.features.enterprise.api) implementation(projects.libraries.core) implementation(projects.libraries.architecture) implementation(projects.libraries.matrix.api) diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt index fa2a5b493e3..681375357b8 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt @@ -94,7 +94,7 @@ class DefaultLockScreenService @Inject constructor( */ private fun observeAppForegroundState() { coroutineScope.launch { - appForegroundStateService.start() + appForegroundStateService.startObservingForeground() appForegroundStateService.isInForeground.collect { isInForeground -> if (isInForeground) { lockJob?.cancel() diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt index 9f7baed365a..f62df0a55d4 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt @@ -7,11 +7,10 @@ package io.element.android.features.lockscreen.impl.unlock -import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -42,7 +41,7 @@ class PinUnlockNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() LaunchedEffect(state.isUnlocked) { if (state.isUnlocked) { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateProvider.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateProvider.kt index 51c05820dd8..77d20585d1b 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateProvider.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateProvider.kt @@ -23,17 +23,19 @@ open class PinUnlockStateProvider : PreviewParameterProvider { aPinUnlockState(showWrongPinTitle = true), aPinUnlockState(showSignOutPrompt = true), aPinUnlockState(showBiometricUnlock = false), - aPinUnlockState(showSignOutPrompt = true, remainingAttempts = 0), + aPinUnlockState(showSignOutPrompt = true, remainingAttempts = AsyncData.Success(0)), aPinUnlockState(signOutAction = AsyncAction.Loading), - aPinUnlockState(biometricUnlockResult = BiometricAuthenticator.AuthenticationResult.Failure( - BiometricUnlockError(BiometricPrompt.ERROR_LOCKOUT, "Biometric auth disabled") - )), + aPinUnlockState( + biometricUnlockResult = BiometricAuthenticator.AuthenticationResult.Failure( + BiometricUnlockError(BiometricPrompt.ERROR_LOCKOUT, "Biometric auth disabled") + ) + ), ) } fun aPinUnlockState( pinEntry: PinEntry = PinEntry.createEmpty(4), - remainingAttempts: Int = 3, + remainingAttempts: AsyncData = AsyncData.Success(3), showWrongPinTitle: Boolean = false, showSignOutPrompt: Boolean = false, showBiometricUnlock: Boolean = true, @@ -43,7 +45,7 @@ fun aPinUnlockState( ) = PinUnlockState( pinEntry = AsyncData.Success(pinEntry), showWrongPinTitle = showWrongPinTitle, - remainingAttempts = AsyncData.Success(remainingAttempts), + remainingAttempts = remainingAttempts, showSignOutPrompt = showSignOutPrompt, showBiometricUnlock = showBiometricUnlock, signOutAction = signOutAction, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt index 3923ced61dc..f9665b52dde 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockView.kt @@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Lock -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -316,7 +315,7 @@ private fun PinUnlockHeader( .fillMaxWidth(), textAlign = TextAlign.Center, style = ElementTheme.typography.fontHeadingMdBold, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) Spacer(Modifier.height(8.dp)) val remainingAttempts = state.remainingAttempts.dataOrNull() @@ -330,9 +329,9 @@ private fun PinUnlockHeader( "" } val subtitleColor = if (state.showWrongPinTitle) { - MaterialTheme.colorScheme.error + ElementTheme.colors.textCriticalPrimary } else { - MaterialTheme.colorScheme.secondary + ElementTheme.colors.textSecondary } Text( text = subtitle, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt index e308865315e..f89d25dd760 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt @@ -16,6 +16,7 @@ import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import io.element.android.compound.theme.ElementTheme +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.lockscreen.impl.unlock.PinUnlockPresenter @@ -38,13 +39,17 @@ class PinUnlockActivity : AppCompatActivity() { @Inject lateinit var presenter: PinUnlockPresenter @Inject lateinit var lockScreenService: LockScreenService @Inject lateinit var appPreferencesStore: AppPreferencesStore + @Inject lateinit var enterpriseService: EnterpriseService override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() super.onCreate(savedInstanceState) bindings().inject(this) setContent { - ElementThemeApp(appPreferencesStore) { + ElementThemeApp( + appPreferencesStore = appPreferencesStore, + enterpriseService = enterpriseService, + ) { val state = presenter.present() val isDark = ElementTheme.isLightTheme.not() PinUnlockView( diff --git a/features/lockscreen/impl/src/main/res/values-sv/translations.xml b/features/lockscreen/impl/src/main/res/values-sv/translations.xml index d022e6b9531..a559e4c909c 100644 --- a/features/lockscreen/impl/src/main/res/values-sv/translations.xml +++ b/features/lockscreen/impl/src/main/res/values-sv/translations.xml @@ -3,6 +3,7 @@ "biometrisk autentisering" "biometrisk upplåsning" "Lås upp med biometri" + "Bekräfta biometriskt" "Glömt PIN-kod?" "Byt PIN-kod" "Tillåt biometrisk upplåsning" diff --git a/features/lockscreen/impl/src/main/res/values-tr/translations.xml b/features/lockscreen/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..5a9b94af112 --- /dev/null +++ b/features/lockscreen/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,38 @@ + + + "biyometrik kimlik doğrulama" + "biyometrik kilit açma" + "Biyometrik ile kilit aç" + "Biyometrik doğrulama" + "PIN\'i unuttum" + "PIN kodunu değiştir" + "Biyometrik kilit açmaya izin ver" + "PIN kodunu kaldır" + "PIN\'i kaldırmak istediğinizden emin misiniz?" + "PIN\'i kaldır?" + "İzin ver %1$s" + "PIN kullanmayı tercih ederim" + "%1$s kullanarak oturum açarken kendinize zaman kazandırın" + "PIN Seç" + "PIN\'i onayla" + "Sohbetlerinize ekstra güvenlik eklemek için %1$s kilitleyin. + +Hatırlanabilir bir şey seçin. Bu PIN\'i unutursanız, uygulamadan çıkış yaparsınız." + "Güvenlik nedeniyle bunu PIN kodunuz olarak seçemezsiniz" + "Farklı bir PIN seçin" + "Lütfen aynı PIN\'i iki kez girin" + "PIN\'ler eşleşmiyor" + "Devam etmek için yeniden oturum açmanız ve yeni bir PIN oluşturmanız gerekir" + "Oturumunuz kapatılıyor" + + "Kilidi açmak için %1$d deneme hakkınız var" + "Kilidi açmak için %1$d deneme hakkınız var" + + + "Yanlış PIN. %1$d kere daha şansınız var" + "Yanlış PIN. %1$d kere daha şansınız var" + + "Biyometrik kullan" + "PIN kullan" + "Oturum kapatılıyor…" + diff --git a/features/lockscreen/impl/src/test/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateTest.kt b/features/lockscreen/impl/src/test/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateTest.kt new file mode 100644 index 00000000000..389ebf83c73 --- /dev/null +++ b/features/lockscreen/impl/src/test/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockStateTest.kt @@ -0,0 +1,76 @@ +/* + * 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.features.lockscreen.impl.unlock + +import androidx.biometric.BiometricPrompt +import com.google.common.truth.Truth.assertThat +import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticator +import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockError +import io.element.android.libraries.architecture.AsyncData +import org.junit.Test + +class PinUnlockStateTest { + @Test + fun `isSignOutPromptCancellable should have expected values`() { + assertThat(aPinUnlockState(remainingAttempts = AsyncData.Uninitialized).isSignOutPromptCancellable).isTrue() + assertThat(aPinUnlockState(remainingAttempts = AsyncData.Success(1)).isSignOutPromptCancellable).isTrue() + assertThat(aPinUnlockState(remainingAttempts = AsyncData.Success(0)).isSignOutPromptCancellable).isFalse() + } + + @Test + fun `biometricUnlockErrorMessage and showBiometricUnlockError should have expected values`() { + listOf( + null, + BiometricAuthenticator.AuthenticationResult.Failure(), + BiometricAuthenticator.AuthenticationResult.Success, + ).forEach { biometricUnlockResult -> + aPinUnlockState( + biometricUnlockResult = biometricUnlockResult, + ).let { + assertThat(it.biometricUnlockErrorMessage).isNull() + assertThat(it.showBiometricUnlockError).isFalse() + } + } + listOf( + BiometricPrompt.ERROR_HW_UNAVAILABLE, + BiometricPrompt.ERROR_UNABLE_TO_PROCESS, + BiometricPrompt.ERROR_TIMEOUT, + BiometricPrompt.ERROR_NO_SPACE, + BiometricPrompt.ERROR_CANCELED, + BiometricPrompt.ERROR_VENDOR, + BiometricPrompt.ERROR_USER_CANCELED, + BiometricPrompt.ERROR_NO_BIOMETRICS, + BiometricPrompt.ERROR_HW_NOT_PRESENT, + BiometricPrompt.ERROR_NEGATIVE_BUTTON, + BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL, + BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED, + ).forEach { code -> + aPinUnlockState( + biometricUnlockResult = BiometricAuthenticator.AuthenticationResult.Failure( + error = BiometricUnlockError(code, "Error message") + ), + ).let { + assertThat(it.biometricUnlockErrorMessage).isNull() + assertThat(it.showBiometricUnlockError).isFalse() + } + } + listOf( + BiometricPrompt.ERROR_LOCKOUT, + BiometricPrompt.ERROR_LOCKOUT_PERMANENT, + ).forEach { code -> + aPinUnlockState( + biometricUnlockResult = BiometricAuthenticator.AuthenticationResult.Failure( + error = BiometricUnlockError(code, "Error message") + ), + ).let { + assertThat(it.biometricUnlockErrorMessage).isEqualTo("Error message") + assertThat(it.showBiometricUnlockError).isTrue() + } + } + } +} 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 c49ba828095..0f2328656e7 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 @@ -9,10 +9,10 @@ package io.element.android.features.login.impl import android.app.Activity import android.os.Parcelable +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.lifecycleScope import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext @@ -199,7 +199,7 @@ class LoginFlowNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - activity = LocalContext.current as? Activity + activity = requireNotNull(LocalActivity.current) darkTheme = !ElementTheme.isLightTheme DisposableEffect(Unit) { onDispose { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderView.kt index fc2f518873e..e8b931ffe9a 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderView.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderView.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -68,7 +67,7 @@ fun AccountProviderView( RoundedIconAtom( size = RoundedIconAtomSize.Medium, imageVector = CompoundIcons.Search(), - tint = MaterialTheme.colorScheme.primary, + tint = ElementTheme.colors.iconPrimary, ) } Text( @@ -77,7 +76,7 @@ fun AccountProviderView( .weight(1f), text = item.title, style = ElementTheme.typography.fontBodyLgMedium, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) if (item.isPublic) { Icon( @@ -96,7 +95,7 @@ fun AccountProviderView( .padding(start = 46.dp, bottom = 12.dp, end = 26.dp), text = item.subtitle, style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) } } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt index 6cd039a2c75..128a4c03e87 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.login.impl.screens.createaccount import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -41,7 +41,7 @@ class CreateAccountNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() val state = presenter.present() CreateAccountView( 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 7f7df3e3b25..b319781962f 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 @@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.progressSemantics -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -138,7 +137,7 @@ private fun ColumnScope.Buttons( ) { Icon( imageVector = CompoundIcons.Error(), - tint = MaterialTheme.colorScheme.error, + tint = ElementTheme.colors.iconCriticalPrimary, contentDescription = null, modifier = Modifier.size(24.dp) ) @@ -151,7 +150,7 @@ private fun ColumnScope.Buttons( else -> stringResource(R.string.screen_qr_code_login_invalid_scan_state_subtitle) }, textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.error, + color = ElementTheme.colors.textCriticalPrimary, style = ElementTheme.typography.fontBodySmMedium, ) } 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 eced3ef8280..fc512422e9a 100644 --- a/features/login/impl/src/main/res/values-bg/translations.xml +++ b/features/login/impl/src/main/res/values-bg/translations.xml @@ -12,6 +12,7 @@ "Използвайте друг доставчик на акаунт, като например собствен частен сървър или работен акаунт." "Промяна на доставчика на акаунт" "Какъв е адресът на вашия сървър?" + "Създаване на акаунт" "Този акаунт бе деактивиран." "Неправилно потребителско име и/или парола" "Въведете своите данни" 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 60324ae89d1..68851e411cf 100644 --- a/features/login/impl/src/main/res/values-es/translations.xml +++ b/features/login/impl/src/main/res/values-es/translations.xml @@ -21,6 +21,7 @@ "Solo puedes conectarte a un servidor que soporte sliding sync. El administrador de tu servidor tendrá que configurarlo. %1$s" "¿Cuál es la dirección de tu servidor?" "Selecciona tu servidor" + "Crear cuenta" "Esta cuenta ha sido desactivada." "Usuario y/o contraseña incorrectos" "Este no es un id de usuario válido. Formato esperado: \'@user:homeserver.org\'" 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 6c0ce2adab2..0b5c5ec6b51 100644 --- a/features/login/impl/src/main/res/values-ka/translations.xml +++ b/features/login/impl/src/main/res/values-ka/translations.xml @@ -19,6 +19,7 @@ "თქვენ შეგიძლიათ დაუკავშირდეთ მხოლოდ იმ სერვერს, რომელიც მხარს უჭერს \"sliding sync\"-ს. თქვენი სახლის სერვერის ადმინისტრატორს დასჭირდება მისი კონფიგურაცია.%1$s" "რა არის თქვენი სერვერის მისამართი?" "აირჩიეთ თქვენი სერვერი" + "ანგარიშის შექმნა" "ეს ანგარიში დეაქტივირებულია." "არასწორი მომხმარებლის სახელი და/ან პაროლი" "მოცემული მომხმარებლის იდენტიფიკატორი არასწორია. დასაშვები ფორმატი: ‘@user:homeserver.org’" 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 c901908fa59..1637040c4c9 100644 --- a/features/login/impl/src/main/res/values-nb/translations.xml +++ b/features/login/impl/src/main/res/values-nb/translations.xml @@ -1,5 +1,6 @@ + "Bytt kontotilbyder" "Hjemmeserveradresse" "Søk etter et selskap, fellesskap eller privat server." "Finn en kontoleverandør" @@ -7,10 +8,15 @@ "Du er i ferd med å logge inn på %s" "Det er her samtalene dine vil ligge - akkurat som du ville brukt en e-postleverandør til å oppbevare e-postene dine." "Du er i ferd med å opprette en konto på %s" + "Annet" + "Bruk en annen kontotilbyder, for eksempel din egen private server eller en arbeidskonto." + "Bytt kontotilbyder" "Vi kunne ikke nå denne hjemmeserveren. Kontroller at du har skrevet inn hjemmeserverens URL riktig. Hvis URL-en er riktig, kontakt administratoren for hjemmeserveren din for å få mer hjelp." "Denne serveren støtter for øyeblikket ikke sliding sync." "URL til hjemmeserver" + "Du kan bare koble til en eksisterende server som støtter sliding sync. Administrator for din hjemmeserver må konfigurere det. %1$s" "Hva er adressen til serveren din?" + "Opprett konto" "Denne kontoen er deaktivert." "Feil brukernavn og/eller passord" "Dette er ikke en gyldig brukeridentifikator. Forventet format: \'@bruker:homeserver.org\'" @@ -18,6 +24,8 @@ "Skriv inn opplysningene dine" "Matrix er et åpent nettverk for sikker, desentralisert kommunikasjon." "Velkommen tilbake!" + "Logg inn på %1$s" + "Bytt kontotilbyder" "En privat server for Element-ansatte." "Matrix er et åpent nettverk for sikker, desentralisert kommunikasjon." "Det er her samtalene dine vil ligge - akkurat som du ville brukt en e-postleverandør til å oppbevare e-postene dine." 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 5ceebd308e0..ec80fa9cdb7 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 @@ -19,6 +19,7 @@ "Você só pode se conectar a um servidor existente que ofereça suporte à tecnologia sliding sync. O administrador do seu servidor precisará configurá-lo. %1$s" "Qual é o endereço do seu servidor?" "Selecione seu servidor" + "Criar conta" "Essa conta foi desativada." "Nome de usuário e/ou senha incorretos" "Esse não é um identificador de usuário válido. Formato esperado: \'@usuário:servidor.org\'" 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 d5489c90f7c..de067472324 100644 --- a/features/login/impl/src/main/res/values-pt/translations.xml +++ b/features/login/impl/src/main/res/values-pt/translations.xml @@ -44,8 +44,8 @@ "O outro dispositivo não tem a sessão iniciada" "O início de sessão foi cancelado no outro dispositivo." "Pedido de início de sessão cancelado" - "O início de sessão foi recusado no outro dispositivo." - "Início de sessão cancelado" + "O início de sessão foi rejeitado no outro dispositivo." + "Início de sessão rejeitado" "O início de sessão expirou. Por favor, tenta novamente." "O início de sessão não foi concluído a tempo" "O teu outro dispositivo não suporta o início de sessão na %s com um código QR. diff --git a/features/login/impl/src/main/res/values-tr/translations.xml b/features/login/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..746163a0e7d --- /dev/null +++ b/features/login/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,83 @@ + + + "Hesap sağlayıcısını değiştir" + "Ana sunucu adresi" + "Bir arama terimi veya alan adı adresi girin." + "Bir şirket, topluluk veya özel sunucu arayın." + "Bir hesap sağlayıcısı bulun" + "Konuşmalarınızın saklanacağı yer burasıdır - tıpkı e-postalarınızı saklamak için bir e-posta sağlayıcısı kullandığınız gibi." + "Oturum açmak üzeresiniz %s" + "Konuşmalarınızın saklanacağı yer burasıdır - tıpkı e-postalarınızı saklamak için bir e-posta sağlayıcısı kullandığınız gibi." + "%s üzerinde bir hesap oluşturmak üzeresiniz" + "Matrix.org, Matrix.org Vakfı tarafından yönetilen, güvenli, merkezi olmayan iletişim için halka açık Matrix ağında büyük, ücretsiz bir sunucudur." + "Diğer" + "Kendi özel sunucunuz veya iş hesabınız gibi farklı bir hesap sağlayıcı kullanın." + "Hesap sağlayıcısını değiştir" + "Bu ana sunucuya ulaşamadık. Lütfen ana sunucu URL\'sini doğru girip girmediğinizi kontrol edin. URL doğruysa, daha fazla yardım için ana sunucu yöneticinize başvurun." + "Sliding sync, iyi bilinen dosyadaki bir sorun nedeniyle kullanılamıyor: +%1$s" + "Bu sunucu şu anda sliding sync desteklemiyor." + "Ana sunucu URL\'si" + "Yalnızca sliding sync destekleyen mevcut bir sunucuya bağlanabilirsiniz. Ana sunucu yöneticinizin bunu yapılandırması gerekecektir. %1$s" + "Sunucunuzun adresi nedir?" + "Sunucunuzu seçin" + "Hesap oluştur" + "Hesap devre dışı bırakıldı." + "Yanlış kullanıcı adı ve/veya şifre" + "Bu geçerli bir kullanıcı tanımlayıcısı değil. Kullanılması gereken biçim: \'@user:homeserver.org\'" + "Bu sunucu, yenileme belirteçlerini kullanacak şekilde yapılandırılmıştır. Parola tabanlı oturum açma kullanılırken bunlar desteklenmez." + "Seçilen ana sunucu parola veya OIDC oturum açmayı desteklemiyor. Lütfen yöneticinizle iletişime geçin veya başka bir ana sunucu seçin." + "Bilgilerinizi girin" + "Matrix, güvenli, merkezi olmayan iletişim için açık bir ağdır." + "Tekrar hoş geldiniz!" + "%1$s adresinde oturum aç" + "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?" + "Bunun bir ağ sorunu olması ihtimaline karşı bir QR koduyla tekrar oturum açmayı deneyin" + "Aynı sorunla karşılaşırsanız, farklı bir wifi ağı deneyin veya wifi yerine mobil verinizi kullanın" + "Bu işe yaramazsa, manuel olarak oturum açın" + "Bağlantı güvenli değil" + "Bu cihazda gösterilen iki haneyi girmeniz istenecektir." + "Aşağıdaki numarayı diğer cihazınıza girin" + "Diğer cihazınızda oturum açın ve ardından tekrar deneyin veya zaten oturum açmış başka bir cihaz kullanın." + "Diğer cihaz oturum açmamış" + "Oturum açma işlemi diğer cihazda iptal edildi." + "Oturum açma isteği iptal edildi" + "Diğer cihazda oturum açma işlemi reddedildi." + "Oturum açma reddedildi" + "Oturum açma süresi doldu. Lütfen tekrar deneyin." + "Oturum açma işlemi zamanında tamamlanmadı" + "Diğer cihazınız %s QR koduyla oturum açmayı desteklemiyor. + +Manuel olarak oturum açmayı deneyin veya QR kodunu başka bir cihazla tarayın." + "QR kodu desteklenmiyor" + "Hesap sağlayıcınız %1$s desteklemiyor." + "%1$s desteklenmiyor" + "Taramaya hazır" + "Bir masaüstü cihazda %1$s açın" + "Avatarınıza tıklayın" + "Seç %1$s" + "\"Yeni cihaz bağla\"" + "QR kodunu bu cihazla tarayın" + "Yalnızca hesap sağlayıcınız destekliyorsa kullanılabilir." + "QR kodunu almak için %1$s uygulamasını başka bir cihazda açın" + "Diğer cihazda gösterilen QR kodunu kullan." + "Tekrar deneyin" + "Yanlış QR kodu" + "Kamera ayarlarına git" + "Devam etmek için %1$s cihazınızın kamerasını kullanmasına izin vermeniz gerekir." + "QR kodunu taramak için kamera erişimine izin verin" + "QR kodunu tara" + "Yeniden Başla" + "Beklenmeyen bir hata oluştu. Lütfen tekrar deneyin." + "Diğer cihazınız bekleniyor" + "Hesap sağlayıcınız, oturum açmayı doğrulamak için aşağıdaki kodu isteyebilir." + "Doğrulama kodunuz" + "Hesap sağlayıcısını değiştir" + "Element çalışanları için özel bir sunucu." + "Matrix, güvenli, merkezi olmayan iletişim için açık bir ağdır." + "Konuşmalarınızın saklanacağı yer burasıdır - tıpkı e-postalarınızı saklamak için bir e-posta sağlayıcısı kullandığınız gibi." + "%1$s sunucusunda oturum açmak üzeresiniz" + "%1$s sunucusunda bir hesap oluşturmak üzeresiniz" + 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 db16e17b093..d3f1af3ea73 100644 --- a/features/login/impl/src/main/res/values-uz/translations.xml +++ b/features/login/impl/src/main/res/values-uz/translations.xml @@ -19,6 +19,7 @@ "Siz faqat siljish sinxronlashni qo\'llab-quvvatlaydigan mavjud serverga ulanishingiz mumkin. Uy serveringiz administratori uni sozlashi kerak.%1$s" "Serveringizning manzili nima?" "Serveringizni tanlang" + "Hisob yaratish" "Bu hisob o‘chirilgan." "Notog\'ri foydalanuvchi nomi va/yoki parol" "Bu haqiqiy foydalanuvchi identifikatori emas. Kutilayotgan format: \'@user:homeserver.org\'" diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt index 140982f0e8c..2ecc027fba3 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt @@ -7,10 +7,9 @@ package io.element.android.features.logout.impl -import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -42,7 +41,7 @@ class LogoutNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() LogoutView( state = state, diff --git a/features/logout/impl/src/main/res/values-tr/translations.xml b/features/logout/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..6e1ac9cb609 --- /dev/null +++ b/features/logout/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,18 @@ + + + "Çıkış yapmak istediğinize emin misiniz?" + "Oturumu kapat" + "Oturumu kapat" + "Oturum kapatılıyor…" + "Son oturumunuzdan çıkmak üzeresiniz. Şimdi çıkış yaparsanız, şifrelenmiş mesajlarınıza erişiminizi kaybedersiniz." + "Yedeklemeyi kapattınız" + "Çevrimdışı olduğunuzda anahtarlarınız hala yedekleniyordu. Oturumu kapatmadan önce anahtarlarınızın yedeklenebilmesi için yeniden bağlanın." + "Anahtarlarınız hala yedekleniyor" + "Lütfen oturumu kapatmadan önce bunun tamamlanmasını bekleyin." + "Anahtarlarınız hala yedekleniyor" + "Oturumu kapat" + "Son oturumunuzdan çıkmak üzeresiniz. Şimdi çıkış yaparsanız şifrelenmiş mesajlarınıza erişiminizi kaybedersiniz." + "Kurtarma ayarlanmadı" + "Son oturumunuzdan çıkmak üzeresiniz. Şimdi oturumu kapatırsanız şifrelenmiş mesajlarınıza erişiminizi kaybedebilirsiniz." + "Kurtarma anahtarınızı kaydettiniz mi?" + diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index 4f7cd1b2cb0..551b362e1ae 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -9,6 +9,7 @@ package io.element.android.features.messages.impl import android.app.Activity import android.content.Context +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect @@ -17,7 +18,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.Lifecycle import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext @@ -223,7 +223,7 @@ class MessagesNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() CompositionLocalProvider( LocalTimelineItemPresenterFactories provides timelineItemPresenterFactories, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index 1a31ddd9a01..09c92071c4c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -522,14 +522,14 @@ private fun CantSendMessageBanner() { Row( modifier = Modifier .fillMaxWidth() - .background(MaterialTheme.colorScheme.secondary) + .background(ElementTheme.colors.bgSubtleSecondary) .padding(16.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center ) { Text( text = stringResource(id = R.string.screen_room_timeline_no_permission_to_post), - color = MaterialTheme.colorScheme.onSecondary, + color = ElementTheme.colors.textSecondary, style = MaterialTheme.typography.bodyMedium, textAlign = TextAlign.Center, fontStyle = FontStyle.Italic, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index 7a19468e939..3e831762887 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -27,7 +27,6 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ListItemDefaults -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.ripple import androidx.compose.runtime.Composable @@ -253,7 +252,7 @@ private fun MessageSummary( ) { val content: @Composable () -> Unit val icon: @Composable () -> Unit = { Avatar(avatarData = event.senderAvatar.copy(size = AvatarSize.MessageActionSender)) } - val contentStyle = ElementTheme.typography.fontBodyMdRegular.copy(color = MaterialTheme.colorScheme.secondary) + val contentStyle = ElementTheme.typography.fontBodyMdRegular.copy(color = ElementTheme.colors.textSecondary) @Composable fun ContentForBody(body: String) { @@ -316,7 +315,7 @@ private fun MessageSummary( Text( text = sentTimeFull, style = ElementTheme.typography.fontBodyXsRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, textAlign = TextAlign.End, ) } @@ -358,7 +357,7 @@ private fun EmojiReactionsRow( Icon( imageVector = CompoundIcons.ReactionAdd(), contentDescription = stringResource(id = CommonStrings.a11y_react_with_other_emojis), - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .size(24.dp) .clickable( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt index 12379163a63..9d774d58412 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsPickerView.kt @@ -149,6 +149,7 @@ internal fun SuggestionsPickerViewPreview() { normalizedPowerLevel = 0L, isIgnored = false, role = RoomMember.Role.USER, + membershipChangeReason = null, ) val anAlias = remember { RoomAlias("#room:domain.org") } SuggestionsPickerView( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt index 8840411a24a..43b4fef3dd0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt @@ -8,6 +8,7 @@ package io.element.android.features.messages.impl.pinned import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.mapState import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SingleIn @@ -26,6 +27,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.withContext import javax.inject.Inject @SingleIn(RoomScope::class) @@ -33,6 +35,7 @@ class PinnedEventsTimelineProvider @Inject constructor( private val room: MatrixRoom, private val syncService: SyncService, private val featureFlagService: FeatureFlagService, + private val dispatchers: CoroutineDispatchers, ) : TimelineProvider { private val _timelineStateFlow: MutableStateFlow> = MutableStateFlow(AsyncData.Uninitialized) @@ -100,7 +103,9 @@ class PinnedEventsTimelineProvider @Inject constructor( when (timelineStateFlow.value) { is AsyncData.Uninitialized, is AsyncData.Failure -> { timelineStateFlow.emit(AsyncData.Loading()) - room.pinnedEventsTimeline() + withContext(dispatchers.io) { + room.pinnedEventsTimeline() + } .fold( { timelineStateFlow.emit(AsyncData.Success(it)) }, { timelineStateFlow.emit(AsyncData.Failure(it)) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerView.kt index 2e4bd922899..dcbc0695b26 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerView.kt @@ -108,7 +108,7 @@ private fun PinnedMessagesBannerRow( Icon( imageVector = CompoundIcons.PinSolid(), contentDescription = null, - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .padding(horizontal = 10.dp) .size(20.dp) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt index 49334574cdb..d2c5d05e1ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageView.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -113,7 +112,7 @@ fun ReportMessageView( Text( text = stringResource(R.string.screen_report_content_block_user_hint), style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) } Switch( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt index f2db4e6efbf..98fc9d201bc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessagesReactionButton.kt @@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment @@ -76,7 +75,7 @@ fun MessagesReactionButton( .background(Color.Transparent) // Outer border, same colour as background .border( - BorderStroke(2.dp, MaterialTheme.colorScheme.background), + BorderStroke(2.dp, ElementTheme.colors.bgCanvasDefault), shape = RoundedCornerShape(corner = CornerSize(14.dp)) ) .padding(vertical = 2.dp, horizontal = 2.dp) @@ -122,7 +121,7 @@ private fun TextContent( .height(REACTION_EMOJI_LINE_HEIGHT.toDp()), text = text, style = ElementTheme.typography.fontBodyMdRegular, - color = ElementTheme.materialColors.primary + color = ElementTheme.colors.textPrimary ) @Composable @@ -131,7 +130,7 @@ private fun IconContent( ) = Icon( resourceId = resourceId, contentDescription = stringResource(id = R.string.screen_room_timeline_add_reaction), - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .size(ADD_EMOJI_SIZE) ) @@ -164,7 +163,7 @@ private fun ReactionContent( Spacer(modifier = Modifier.width(4.dp)) Text( text = reaction.count.toString(), - color = if (reaction.isHighlighted) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.secondary, + color = if (reaction.isHighlighted) ElementTheme.colors.textPrimary else ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyMdRegular, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index 85b61810502..119bb0977ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -45,7 +44,7 @@ fun TimelineEventTimestampView( val hasError = event.localSendState is LocalEventSendState.Failed val hasEncryptionCritical = event.messageShield?.isCritical.orFalse() val isMessageEdited = event.content.isEdited() - val tint = if (hasError || hasEncryptionCritical) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.secondary + val tint = if (hasError || hasEncryptionCritical) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary Row( modifier = Modifier .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index 106d4eb532d..33cf3cdfcfb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -169,7 +169,7 @@ private fun Modifier.focusedEvent( val highlightedLineColor = ElementTheme.colors.textActionAccent val gradientColors = listOf( ElementTheme.colors.highlightedMessageBackgroundColor, - ElementTheme.materialColors.background + ElementTheme.colors.bgCanvasDefault, ) val verticalOffset = focusedEventOffset.toPx() val verticalRatio = 0.7f diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAttachmentView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAttachmentView.kt index a2b55f00e5f..dc40fd77fac 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAttachmentView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAttachmentView.kt @@ -77,7 +77,7 @@ private fun TimelineItemAttachmentHeaderView( modifier = Modifier .size(iconSize) .clip(CircleShape) - .background(ElementTheme.materialColors.background), + .background(ElementTheme.colors.bgCanvasDefault), contentAlignment = Alignment.Center, ) { icon() @@ -86,14 +86,14 @@ private fun TimelineItemAttachmentHeaderView( Column { Text( text = filename, - color = ElementTheme.materialColors.primary, + color = ElementTheme.colors.textPrimary, maxLines = 2, style = ElementTheme.typography.fontBodyLgRegular, overflow = TextOverflow.Ellipsis ) Text( text = fileExtensionAndSize, - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmRegular, maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -119,7 +119,7 @@ private fun TimelineItemAttachmentCaptionView( Text( modifier = modifier, text = caption, - color = ElementTheme.materialColors.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyLgRegular, onTextLayout = ContentAvoidingLayout.measureLastTextLine( onContentLayoutChange = onContentLayoutChange, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAudioView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAudioView.kt index 6b28d5922b5..d325b6bec59 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAudioView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAudioView.kt @@ -38,7 +38,7 @@ fun TimelineItemAudioView( Icon( imageVector = Icons.Outlined.GraphicEq, contentDescription = null, - tint = ElementTheme.materialColors.primary, + tint = ElementTheme.colors.iconPrimary, modifier = Modifier .size(16.dp), ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt index 91260ec8aaa..06e0ea66166 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemFileView.kt @@ -38,7 +38,7 @@ fun TimelineItemFileView( Icon( resourceId = CompoundDrawables.ic_compound_attachment, contentDescription = null, - tint = ElementTheme.materialColors.primary, + tint = ElementTheme.colors.iconPrimary, modifier = Modifier .size(16.dp) .rotate(-45f), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemInformativeView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemInformativeView.kt index 7343846dfe7..74594210b0f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemInformativeView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemInformativeView.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -53,7 +52,7 @@ fun TimelineItemInformativeView( ) { Icon( resourceId = iconResourceId, - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, contentDescription = iconDescription, modifier = Modifier.size(16.dp) ) @@ -61,7 +60,7 @@ fun TimelineItemInformativeView( Spacer(modifier = Modifier.width(4.dp)) Text( fontStyle = FontStyle.Italic, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyMdRegular, text = text ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStateView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStateView.kt index 536c5374b59..334a7463f7e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStateView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStateView.kt @@ -7,7 +7,6 @@ package io.element.android.features.messages.impl.timeline.components.event -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign @@ -25,7 +24,7 @@ fun TimelineItemStateView( ) { Text( modifier = modifier, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyMdRegular, text = content.body, textAlign = TextAlign.Center, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVoiceView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVoiceView.kt index 17785cd97cb..1d357bdd2f4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVoiceView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVoiceView.kt @@ -91,7 +91,7 @@ fun TimelineItemVoiceView( Spacer(Modifier.width(8.dp)) Text( text = state.time, - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmMedium, maxLines = 1, overflow = TextOverflow.Ellipsis, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/group/GroupHeaderView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/group/GroupHeaderView.kt index a11b36f58fc..0a8662eab4b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/group/GroupHeaderView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/group/GroupHeaderView.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -67,7 +66,7 @@ fun GroupHeaderView( ) { Text( text = text, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyMdRegular, ) val rotation: Float by animateFloatAsState( @@ -82,7 +81,7 @@ fun GroupHeaderView( modifier = Modifier.rotate(rotation), imageVector = CompoundIcons.ChevronRight(), contentDescription = null, - tint = MaterialTheme.colorScheme.secondary + tint = ElementTheme.colors.iconSecondary ) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryView.kt index b4b02ca45d6..ae9ea9fd5d3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryView.kt @@ -172,7 +172,7 @@ private fun AggregatedReactionButton( val textColor = if (isHighlighted) { MaterialTheme.colorScheme.inversePrimary } else { - MaterialTheme.colorScheme.primary + ElementTheme.colors.textPrimary } val roundedCornerShape = RoundedCornerShape(corner = CornerSize(percent = 50)) @@ -250,12 +250,12 @@ private fun SenderRow( text = name, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyMdRegular, ) Text( text = sentTime, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmRegular, @@ -263,7 +263,7 @@ private fun SenderRow( } Text( text = userId, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmRegular, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt index 3e11e1e0aee..701dd93fc74 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt @@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -131,7 +130,7 @@ private fun ReadReceiptsAvatars( ) { val avatarSize = AvatarSize.TimelineReadReceipt.dp val avatarStrokeSize = 1.dp - val avatarStrokeColor = MaterialTheme.colorScheme.background + val avatarStrokeColor = ElementTheme.colors.bgCanvasDefault val receiptDescription = computeReceiptDescription(receipts) Row( modifier = modifier diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt index 86dce5349fc..2e0c8745359 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemDaySeparatorView.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -39,7 +38,7 @@ internal fun TimelineItemDaySeparatorView( Text( text = model.formattedDate, style = ElementTheme.typography.fontBodyMdMedium, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemRoomBeginningView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemRoomBeginningView.kt index f6a8c3821e0..645f36602c2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemRoomBeginningView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemRoomBeginningView.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -41,7 +40,7 @@ fun TimelineItemRoomBeginningView( stringResource(id = R.string.screen_room_timeline_beginning_of_room, roomName) } Text( - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyMdRegular, text = text, textAlign = TextAlign.Center, diff --git a/features/messages/impl/src/main/res/values-nb/translations.xml b/features/messages/impl/src/main/res/values-nb/translations.xml index b4a2914dda8..7061efc54c1 100644 --- a/features/messages/impl/src/main/res/values-nb/translations.xml +++ b/features/messages/impl/src/main/res/values-nb/translations.xml @@ -12,7 +12,11 @@ "Kryss av for om du vil skjule alle nåværende og fremtidige meldinger fra denne brukeren" "Denne meldingen vil bli rapportert til hjemmeserverens administratorer. De vil ikke kunne lese noen krypterte meldinger." "Begrunnelse for å rapportere dette innholdet" + "Kamera" "Ta bilde" + "Ta opp video" + "Vedlegg" + "Foto- og videobibliotek" "Meldingshistorikken er for øyeblikket ikke tilgjengelig." "Meldingshistorikk er ikke tilgjengelig i dette rommet. Bekreft denne enheten for å se meldingshistorikken din." "Vil du invitere dem tilbake?" diff --git a/features/messages/impl/src/main/res/values-sv/translations.xml b/features/messages/impl/src/main/res/values-sv/translations.xml index c2ca9678e33..6846c7e333f 100644 --- a/features/messages/impl/src/main/res/values-sv/translations.xml +++ b/features/messages/impl/src/main/res/values-sv/translations.xml @@ -31,6 +31,7 @@ "Lägg till emoji" "Det här är början på %1$s." "Detta är början på det här samtalet." + "Samtalet stöds inte. Fråga om den som ringer kan använda den nya Element X-appen." "Visa mindre" "Meddelande kopierat" "Du är inte behörig att göra inlägg i det här rummet" diff --git a/features/messages/impl/src/main/res/values-tr/translations.xml b/features/messages/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..de962f72ee7 --- /dev/null +++ b/features/messages/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,54 @@ + + + "Aktiviteler" + "Bayraklar" + "Yiyecek ve İçecek" + "Hayvanlar ve Doğa" + "Nesneler" + "İfadeler ve İnsanlar" + "Seyahat ve Yerler" + "Simgeler" + "Kullanıcıyı engelle" + "Bu kullanıcıdan gelen mevcut ve gelecekteki tüm mesajları gizlemek isteyip istemediğinizi işaretleyin" + "Bu mesaj ana sunucunuzun yöneticisine bildirilecektir. Şifrelenmiş mesajları okuyamayacaklardır." + "Bu içeriğin bildirilme nedeni" + "Kamera" + "Fotoğraf çek" + "Video kaydet" + "Ek" + "Fotoğraf ve Video Kütüphanesi" + "Konum" + "Anket" + "Metin Biçimlendirme" + "Mesaj geçmişi şu anda kullanılamıyor." + "Mesaj geçmişi bu odada kullanılamıyor. Mesaj geçmişinizi görmek için bu cihazı doğrulayın." + "Onları geri davet etmek ister misin?" + "Bu sohbette yalnızsın" + "Tüm odaya bildir" + "Herkes" + "Tekrar gönder" + "Mesajınız gönderilemedi" + "Emoji ekle" + "Bu, %1$s odasının başlangıcıdır." + "Bu konuşmanın başlangıcıdır." + "Desteklenmeyen çağrı. Arayanın yeni Element X uygulamasını kullanıp kullanamayacağını sorun." + "Daha az göster" + "Mesaj kopyalandı" + "Bu odada gönderi yapma izniniz yok" + "Daha az göster" + "Daha fazla göster" + "Yeni" + + "%1$d oda değişikliği" + "%1$d oda değişikliği" + + + "%1$s, %2$s ve %3$d diğer" + "%1$s, %2$s ve %3$d diğer" + + + "%1$s yazıyor" + "%1$s yazıyor" + + "%1$s ve %2$s" + diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt index fdd01f5ad1e..8aa7bee7796 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt @@ -194,7 +194,8 @@ class PinnedMessagesBannerPresenterTest { syncService = syncService, featureFlagService = FakeFeatureFlagService( initialState = mapOf(FeatureFlags.PinnedEvents.key to isFeatureEnabled) - ) + ), + dispatchers = testCoroutineDispatchers(), ) timelineProvider.launchIn(backgroundScope) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt index 3799eb2c741..976c7da29cc 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt @@ -38,6 +38,7 @@ import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.test +import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.TestScope @@ -302,7 +303,8 @@ class PinnedMessagesListPresenterTest { syncService = syncService, featureFlagService = FakeFeatureFlagService( initialState = mapOf(FeatureFlags.PinnedEvents.key to isFeatureEnabled) - ) + ), + dispatchers = testCoroutineDispatchers(), ) timelineProvider.launchIn(backgroundScope) return PinnedMessagesListPresenter( diff --git a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt index d9a26dd5bbf..196eb893105 100644 --- a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt +++ b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkMonitor.kt @@ -9,6 +9,14 @@ package io.element.android.features.networkmonitor.api import kotlinx.coroutines.flow.StateFlow +/** + * Monitors the network status of the device, providing the current network connectivity status as a flow. + * + * **Note:** network connectivity does not imply internet connectivity. The device can be connected to a network that can't reach the homeserver. + */ interface NetworkMonitor { + /** + * A flow containing the current network connectivity status. + */ val connectivity: StateFlow } diff --git a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkStatus.kt b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkStatus.kt index 59deb7a8d0a..aebcb5a1d13 100644 --- a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkStatus.kt +++ b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/NetworkStatus.kt @@ -7,7 +7,19 @@ package io.element.android.features.networkmonitor.api +/** + * Network connectivity status of the device. + * + * **Note:** this is *network* connectivity status, not *internet* connectivity status. + */ enum class NetworkStatus { - Online, - Offline + /** + * The device is connected to a network. + */ + Connected, + + /** + * The device is not connected to any networks. + */ + Disconnected } diff --git a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/Indicator.kt b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/Indicator.kt index 992e9bf53cf..95c46d3fd04 100644 --- a/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/Indicator.kt +++ b/features/networkmonitor/api/src/main/kotlin/io/element/android/features/networkmonitor/api/ui/Indicator.kt @@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -25,6 +24,8 @@ 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.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toDp import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text @@ -37,24 +38,29 @@ internal fun Indicator( Row( modifier .fillMaxWidth() - .background(MaterialTheme.colorScheme.secondaryContainer) + .background(ElementTheme.colors.bgSubtlePrimary) .statusBarsPadding() .padding(vertical = 6.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically, ) { - val tint = MaterialTheme.colorScheme.primary Icon( imageVector = CompoundIcons.Offline(), contentDescription = null, - tint = tint, + tint = ElementTheme.colors.iconPrimary, modifier = Modifier.size(16.sp.toDp()), ) Spacer(modifier = Modifier.width(8.dp)) Text( text = stringResource(CommonStrings.common_offline), style = ElementTheme.typography.fontBodyMdMedium, - color = tint, + color = ElementTheme.colors.textPrimary, ) } } + +@PreviewsDayNight +@Composable +internal fun IndicatorPreview() = ElementPreview { + Indicator() +} diff --git a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt index eb0d4a7429d..6d6952ab141 100644 --- a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt +++ b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt @@ -12,7 +12,6 @@ package io.element.android.features.networkmonitor.impl import android.content.Context import android.net.ConnectivityManager import android.net.Network -import android.net.NetworkCapabilities import android.net.NetworkRequest import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.networkmonitor.api.NetworkMonitor @@ -55,20 +54,18 @@ class DefaultNetworkMonitor @Inject constructor( override fun onLost(network: Network) { if (activeNetworksCount.decrementAndGet() == 0) { - trySendBlocking(NetworkStatus.Offline) + trySendBlocking(NetworkStatus.Disconnected) } } override fun onAvailable(network: Network) { if (activeNetworksCount.incrementAndGet() > 0) { - trySendBlocking(NetworkStatus.Online) + trySendBlocking(NetworkStatus.Connected) } } } trySendBlocking(connectivityManager.activeNetworkStatus()) - val request = NetworkRequest.Builder() - .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - .build() + val request = NetworkRequest.Builder().build() connectivityManager.registerNetworkCallback(request, callback) Timber.d("Subscribe") @@ -85,17 +82,6 @@ class DefaultNetworkMonitor @Inject constructor( .stateIn(appCoroutineScope, SharingStarted.WhileSubscribed(), connectivityManager.activeNetworkStatus()) private fun ConnectivityManager.activeNetworkStatus(): NetworkStatus { - return activeNetwork?.let { - getNetworkCapabilities(it)?.getNetworkStatus() - } ?: NetworkStatus.Offline - } - - private fun NetworkCapabilities.getNetworkStatus(): NetworkStatus { - val hasInternet = hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - return if (hasInternet) { - NetworkStatus.Online - } else { - NetworkStatus.Offline - } + return if (activeNetwork != null) NetworkStatus.Connected else NetworkStatus.Disconnected } } diff --git a/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt b/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt index 0566512df72..298e06aa5bd 100644 --- a/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt +++ b/features/networkmonitor/test/src/main/kotlin/io/element/android/features/networkmonitor/test/FakeNetworkMonitor.kt @@ -11,6 +11,6 @@ import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus import kotlinx.coroutines.flow.MutableStateFlow -class FakeNetworkMonitor(initialStatus: NetworkStatus = NetworkStatus.Online) : NetworkMonitor { +class FakeNetworkMonitor(initialStatus: NetworkStatus = NetworkStatus.Connected) : NetworkMonitor { override val connectivity = MutableStateFlow(initialStatus) } diff --git a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt b/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt index 2d84a618fc7..6e3878c4d22 100644 --- a/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt +++ b/features/onboarding/impl/src/main/kotlin/io/element/android/features/onboarding/impl/OnBoardingView.kt @@ -103,14 +103,14 @@ private fun OnBoardingContent(state: OnBoardingState) { ) { Text( text = stringResource(id = R.string.screen_onboarding_welcome_title), - color = ElementTheme.materialColors.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontHeadingLgBold, textAlign = TextAlign.Center ) Spacer(modifier = Modifier.height(8.dp)) Text( text = stringResource(id = R.string.screen_onboarding_welcome_message, state.productionApplicationName), - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodyLgRegular.copy(fontSize = 17.sp), textAlign = TextAlign.Center ) 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 d53a5a10e1a..f04d28ce4e6 100644 --- a/features/onboarding/impl/src/main/res/values-nb/translations.xml +++ b/features/onboarding/impl/src/main/res/values-nb/translations.xml @@ -1,5 +1,8 @@ + "Logg på manuelt" + "Logg inn med QR-kode" + "Opprett konto" "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-tr/translations.xml b/features/onboarding/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..72dcb42a90d --- /dev/null +++ b/features/onboarding/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,9 @@ + + + "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/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt index be517fa80d0..0ad8f8fe843 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -236,7 +235,7 @@ private fun PollHistoryItemRow( Column(modifier = Modifier.padding(16.dp)) { Text( text = pollHistoryItem.formattedDate, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmRegular, ) Spacer(modifier = Modifier.height(4.dp)) diff --git a/features/poll/impl/src/main/res/values-tr/translations.xml b/features/poll/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..eecf3ad0533 --- /dev/null +++ b/features/poll/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,19 @@ + + + "Seçenek ekle" + "Sonuçları yalnızca anket bittikten sonra göster" + "Oyları gizle" + "Seçenek %1$d" + "Değişiklikleriniz kaydedilmedi. Geri dönmek istediğinden emin misin?" + "Soru veya konu" + "Anket ne hakkında?" + "Anket Oluştur" + "Bu anketi silmek istediğinize emin misiniz?" + "Anketi Sil" + "Anketi düzenle" + "Devam eden bir anket bulamadım." + "Geçmiş herhangi bir anket bulamıyorum." + "Devam ediyor" + "Geçmiş" + "Anketler" + diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt index ea3a411d0a3..08be5069906 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.preferences.impl.about import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -41,7 +41,7 @@ class AboutNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() val state = presenter.present() AboutView( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt index 91f8afcb8ef..fafe5fc9205 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt @@ -7,10 +7,9 @@ package io.element.android.features.preferences.impl.developer -import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.airbnb.android.showkase.models.Showkase import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node @@ -29,7 +28,7 @@ class DeveloperSettingsNode @AssistedInject constructor( ) : Node(buildContext, plugins = plugins) { @Composable override fun View(modifier: Modifier) { - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) fun openShowkase() { val intent = Showkase.getBrowserIntent(activity) activity.startActivity(intent) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt index 66c8d8d7b3e..0dd16492ccf 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt @@ -79,10 +79,10 @@ class DeveloperSettingsPresenter @Inject constructor( .doesHideImagesAndVideosFlow() .collectAsState(initial = false) - val tracingLogLevel by appPreferencesStore - .getTracingLogLevelFlow() - .map { AsyncData.Success(it.toLogLevelItem()) } - .collectAsState(initial = AsyncData.Uninitialized) + val tracingLogLevelFlow = remember { + appPreferencesStore.getTracingLogLevelFlow().map { AsyncData.Success(it.toLogLevelItem()) } + } + val tracingLogLevel by tracingLogLevelFlow.collectAsState(initial = AsyncData.Uninitialized) LaunchedEffect(Unit) { FeatureFlags.entries diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt index 57196621b92..887f14a7f7b 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.preferences.impl.root import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -113,7 +113,7 @@ class PreferencesRootNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() PreferencesRootView( state = state, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt index 75d260d6a34..236d659f333 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootView.kt @@ -262,7 +262,7 @@ private fun ColumnScope.Footer( textAlign = TextAlign.Center, text = text, style = ElementTheme.typography.fontBodySmRegular, - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, ) } diff --git a/features/preferences/impl/src/main/res/values-pl/translations.xml b/features/preferences/impl/src/main/res/values-pl/translations.xml index 5bb41476257..b5a6d99fa71 100644 --- a/features/preferences/impl/src/main/res/values-pl/translations.xml +++ b/features/preferences/impl/src/main/res/values-pl/translations.xml @@ -8,7 +8,7 @@ "Własny bazowy URL dla połączeń Element" "Ustaw własny bazowy URL dla połączeń Element" "Nieprawidłowy adres URL, upewnij się, że zawiera protokół (http/https) i poprawny adres." - "Przesyłaj zdjęcia i filmy szybciej i zmniejsz zużycie danych" + "Przesyłaj zdjęcia i filmy szybciej, zmniejszając zużycie danych" "Optymalizuj jakość multimediów" "Dostawca powiadomień push" "Wyłącz edytor tekstu bogatego, aby pisać tekst Markdown ręcznie." diff --git a/features/preferences/impl/src/main/res/values-sv/translations.xml b/features/preferences/impl/src/main/res/values-sv/translations.xml index aa765bc0806..34887548adc 100644 --- a/features/preferences/impl/src/main/res/values-sv/translations.xml +++ b/features/preferences/impl/src/main/res/values-sv/translations.xml @@ -8,6 +8,8 @@ "Anpassad bas-URL för Element Call" "Ange en anpassad bas-URL för Element Call." "Ogiltig URL, se till att du inkluderar protokollet (http/https) och rätt adress." + "Ladda upp foton och videor snabbare och minska dataanvändningen" + "Optimera mediekvaliteten" "Pushnotisleverantör" "Inaktivera rik-text-redigeraren för att skriva Markdown manuellt." "Läskvitton" diff --git a/features/preferences/impl/src/main/res/values-tr/translations.xml b/features/preferences/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..a13a006e22c --- /dev/null +++ b/features/preferences/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,60 @@ + + + "Önemli bir aramayı asla kaçırmamak için, telefonunuz kilitliyken tam ekran bildirimlere izin vermek üzere ayarlarınızı değiştirin." + "Arama deneyiminizi geliştirin" + "Bildirimleri nasıl alacağınızı seçin" + "Geliştirici modu" + "Geliştiriciler için özelliklere ve işlevlere erişim sağlayın." + "Özel Element Call temel URL\'si" + "Element Call için özel bir temel URL ayarlayın." + "Geçersiz URL, lütfen protokolü (http/https) ve doğru adresi eklediğinizden emin olun." + "Fotoğraf ve videoları daha hızlı yükleyin ve veri kullanımını azaltın" + "Medya kalitesini optimize edin" + "Anlık bildirim sağlayıcısı" + "Markdown\'ı manuel olarak yazmak için zengin metin düzenleyicisini devre dışı bırakın." + "Okundu bilgisi" + "Kapatılırsa, okundu bilgileriniz kimseye gönderilmez. Diğer kullanıcılardan okundu bilgisi almaya devam edersiniz." + "Varlığı paylaşın" + "Kapatılırsa, okundu bilgisi veya yazma bildirimleri gönderemez veya alamazsınız." + "Zaman çizelgesinde mesaj kaynağını görüntüleme seçeneğini etkinleştirin." + "Engellenen kullanıcı yok." + "Engellemeyi kaldır" + "Onlardan gelen tüm mesajları tekrar görebileceksiniz." + "Kullanıcının engelini kaldır" + "Engel kaldırılıyor…" + "Görünen ad" + "Görünen adınız" + "Bilinmeyen bir hatayla karşılaşıldı ve bilgiler değiştirilemedi." + "Profil güncellenemiyor" + "Profili düzenle" + "Profil güncelleniyor…" + "Ek ayarlar" + "Sesli ve Görüntülü aramalar" + "Yapılandırma uyuşmazlığı" + "Seçeneklerin bulunmasını kolaylaştırmak için Bildirim Ayarlarını basitleştirdik. Geçmişte seçtiğiniz bazı özel ayarlar burada gösterilmez, ancak hala aktiftir. + +Devam ederseniz, bazı ayarlarınız değişebilir." + "Doğrudan sohbetler" + "Sohbet başına özel ayar" + "Bildirim ayarı güncellenirken bir hata oluştu." + "Tüm mesajlar" + "Yalnızca Bahsetmeler ve Anahtar Kelimeler" + "Doğrudan sohbetlerde, beni bilgilendir" + "Grup sohbetlerinde, beni bilgilendir" + "Bu cihazda bildirimleri etkinleştir" + "Yapılandırma düzeltilmedi, lütfen tekrar deneyin." + "Grup sohbetleri" + "Davetler" + "Ana sunucunuz şifreli odalarda bu seçeneği desteklemiyor, bazı odalarda bildirim almayabilirsiniz." + "Bahsetmeler" + "Tümü" + "Bahsetmeler" + "Bana bildir" + "Bana @room\'da bildir" + "Bildirimleri almak için lütfen %1$s değiştirin." + "si̇stem ayarları" + "Sistem bildirimleri kapalı" + "Bildirimler" + "Sorun gider" + "Sorun Giderme Bildirimleri" + diff --git a/features/rageshake/api/src/main/res/values-tr/translations.xml b/features/rageshake/api/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..c2d0449fbd6 --- /dev/null +++ b/features/rageshake/api/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "%1$s son kullanıldığında çöktü. Bizimle bir çökme raporu paylaşmak ister misiniz?" + "Sinirden telefonu sallıyor gibi görünüyorsunuz. Hata raporu ekranını açmak ister misiniz?" + "Rageshake" + "Algılama eşiği" + diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt index e1e394c46f5..c124971efbd 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt @@ -7,10 +7,9 @@ package io.element.android.features.rageshake.impl.bugreport -import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -38,7 +37,7 @@ class BugReportNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as? Activity + val activity = LocalActivity.current BugReportView( state = state, modifier = modifier, diff --git a/features/rageshake/impl/src/main/res/values-tr/translations.xml b/features/rageshake/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..d558126f214 --- /dev/null +++ b/features/rageshake/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,17 @@ + + + "Ekran görüntüsü ekle" + "Herhangi bir sorunuz olursa benimle iletişime geçebilirsiniz." + "Bana ulaş" + "Ekran görüntüsünü düzenle" + "Lütfen sorunu açıklayın. Ne yaptınız? Ne olmasını bekliyordunuz? Gerçekten ne oldu. Lütfen olabildiğince ayrıntılı bilgi verin." + "Sorunu açıklayın…" + "Mümkünse, lütfen açıklamayı İngilizce olarak yazın." + "Açıklama çok kısa, lütfen ne olduğu hakkında daha fazla ayrıntı verin. Teşekkürler!" + "Hata günlüklerini gönder" + "Günlüklere izin ver" + "Ekran görüntüsü gönder" + "Her şeyin düzgün çalıştığından emin olmak için günlükler mesajınıza dahil edilecektir. Mesajınızı kayıt tutmadan göndermek için bu ayarı kapatın." + "%1$s son kullanıldığında çöktü. Bizimle bir çökme raporu paylaşmak ister misiniz?" + "Günlükleri görüntüle" + diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt index b1faa6ef6db..34a96eaeb8e 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverEvents.kt @@ -9,4 +9,5 @@ package io.element.android.features.roomaliasresolver.impl sealed interface RoomAliasResolverEvents { data object Retry : RoomAliasResolverEvents + data object DismissError : RoomAliasResolverEvents } diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt index 7391a35f414..34c655bd68b 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt @@ -46,6 +46,7 @@ class RoomAliasResolverPresenter @AssistedInject constructor( fun handleEvents(event: RoomAliasResolverEvents) { when (event) { RoomAliasResolverEvents.Retry -> coroutineScope.resolveAlias(resolveState) + RoomAliasResolverEvents.DismissError -> resolveState.value = AsyncData.Uninitialized } } @@ -60,7 +61,7 @@ class RoomAliasResolverPresenter @AssistedInject constructor( suspend { matrixClient.resolveRoomAlias(roomAlias) .getOrThrow() - .getOrElse { error("Failed to resolve room alias $roomAlias") } + .getOrElse { throw RoomAliasResolverFailures.UnknownAlias } }.runCatchingUpdatingState(resolveState) } } diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt index d03b004027f..dc858621f7f 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverState.kt @@ -18,3 +18,7 @@ data class RoomAliasResolverState( val resolveState: AsyncData, val eventSink: (RoomAliasResolverEvents) -> Unit ) + +sealed class RoomAliasResolverFailures : Exception() { + data object UnknownAlias : RoomAliasResolverFailures() +} diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt index 933d4acdf16..d629089cf8f 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverStateProvider.kt @@ -10,6 +10,7 @@ package io.element.android.features.roomaliasresolver.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.exception.ClientException import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias open class RoomAliasResolverStateProvider : PreviewParameterProvider { @@ -17,10 +18,10 @@ open class RoomAliasResolverStateProvider : PreviewParameterProvider Unit, modifier: Modifier = Modifier, ) { - val latestOnSuccess by rememberUpdatedState(onSuccess) - LaunchedEffect(state.resolveState) { - if (state.resolveState is AsyncData.Success) { - latestOnSuccess(state.resolveState.data) - } - } Box( modifier = modifier.fillMaxSize(), ) { - LightGradientBackground() HeaderFooterPage( containerColor = Color.Transparent, - paddingValues = PaddingValues(16.dp), + paddingValues = PaddingValues( + horizontal = 16.dp, + vertical = 32.dp + ), topBar = { RoomAliasResolverTopBar(onBackClick = onBackClick) }, content = { - RoomAliasResolverContent(state = state) + RoomAliasResolverContent(roomAlias = state.roomAlias, isLoading = state.resolveState.isLoading()) }, - footer = { - RoomAliasResolverFooter( - state = state, - ) + ) + ResolvedRoomAliasView( + resolvedRoomAlias = state.resolveState, + onSuccess = onSuccess, + onRetry = { state.eventSink(RoomAliasResolverEvents.Retry) }, + onDismissError = { + state.eventSink(RoomAliasResolverEvents.DismissError) + onBackClick() } ) } } @Composable -private fun RoomAliasResolverFooter( - state: RoomAliasResolverState, - modifier: Modifier = Modifier, +private fun ResolvedRoomAliasView( + resolvedRoomAlias: AsyncData, + onSuccess: (ResolvedRoomAlias) -> Unit, + onRetry: () -> Unit, + onDismissError: () -> Unit, ) { - when (state.resolveState) { - is AsyncData.Failure -> { - Button( - text = stringResource(CommonStrings.action_retry), - onClick = { - state.eventSink(RoomAliasResolverEvents.Retry) - }, - modifier = modifier.fillMaxWidth(), - size = ButtonSize.Large, - ) + when (resolvedRoomAlias) { + is AsyncData.Success -> { + val latestOnSuccess by rememberUpdatedState(onSuccess) + LaunchedEffect(Unit) { + latestOnSuccess(resolvedRoomAlias.data) + } } - is AsyncData.Loading -> { - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - ) { - CircularProgressIndicator() + is AsyncData.Failure -> { + if (resolvedRoomAlias.error is RoomAliasResolverFailures.UnknownAlias) { + ErrorDialog( + title = stringResource(id = R.string.screen_join_room_loading_alert_title), + content = stringResource(id = R.string.screen_room_alias_resolver_resolve_alias_failure), + onSubmit = onDismissError + ) + } else { + RetryDialog( + title = stringResource(id = R.string.screen_join_room_loading_alert_title), + content = stringResource(id = CommonStrings.error_network_or_server_issue), + onRetry = onRetry, + onDismiss = onDismissError + ) } } - AsyncData.Uninitialized, - is AsyncData.Success -> Unit + else -> Unit } } @Composable private fun RoomAliasResolverContent( - state: RoomAliasResolverState, + roomAlias: RoomAlias, + isLoading: Boolean, modifier: Modifier = Modifier, ) { RoomPreviewOrganism( @@ -118,20 +120,13 @@ private fun RoomAliasResolverContent( PlaceholderAtom(width = AvatarSize.RoomHeader.dp, height = AvatarSize.RoomHeader.dp) }, title = { - RoomPreviewTitleAtom(state.roomAlias.value) + RoomPreviewSubtitleAtom(roomAlias.value) }, subtitle = { - }, - description = { - if (state.resolveState.isFailure()) { - Text( - text = stringResource(id = R.string.screen_room_alias_resolver_resolve_alias_failure), - textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.error, - ) + if (isLoading) { + Spacer(Modifier.height(8.dp)) + CircularProgressIndicator() } - }, - memberCount = { } ) } diff --git a/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml index 234a9f71981..58bb797c8f4 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-cs/translations.xml @@ -1,4 +1,5 @@ + "Náhled této místnosti jsme nemohli zobrazit" "Nepodařilo se přeložit alias místnosti." diff --git a/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml index 0ed5be402b6..6faabb5b11d 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-de/translations.xml @@ -1,4 +1,5 @@ + "Wir konnten diese Chatroomvorschau nicht anzeigen" "Der Raum-Alias konnte nicht ermittelt werden." diff --git a/features/roomaliasresolver/impl/src/main/res/values-et/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-et/translations.xml index 6b712e00eef..b2eb5c0eb52 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-et/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-et/translations.xml @@ -1,4 +1,5 @@ + "Meil ei õnnestunud selle jututoa eelvaadet kuvada" "Jututoa aliasele vastava aadressi tuvastamine ei õnnestunud." diff --git a/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml index 72395bbb06b..6271998f19b 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-fr/translations.xml @@ -1,4 +1,5 @@ + "Impossible d’afficher l’aperçu de ce salon" "Impossible de trouver un salon avec cet alias." diff --git a/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml index d1d6d05c989..585a3be62e9 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-hu/translations.xml @@ -1,4 +1,5 @@ + "Nem tudtuk megjeleníteni a szoba előnézetét" "Nem sikerült a szoba álnevének feloldása." diff --git a/features/roomaliasresolver/impl/src/main/res/values-pl/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-pl/translations.xml index 7f830ab944d..dabe170e2ed 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-pl/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-pl/translations.xml @@ -1,4 +1,5 @@ + "Nie udało nam się wyświetlić podglądu tego pokoju" "Nie udało się uzyskać aliasu pokoju." diff --git a/features/roomaliasresolver/impl/src/main/res/values-pt/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-pt/translations.xml index aa469c7158b..3ae285d6ab2 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-pt/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-pt/translations.xml @@ -1,4 +1,5 @@ + "Não foi possível exibir a pré-visualização desta sala" "Não foi possível encontrar esse endereço de sala" diff --git a/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml index 059788804f4..71315874e6e 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-sk/translations.xml @@ -1,4 +1,5 @@ + "Ukážku tejto miestnosti sa nepodarilo zobraziť" "Nepodarilo sa nájsť alias miestnosti." diff --git a/features/roomaliasresolver/impl/src/main/res/values-tr/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..395799e380c --- /dev/null +++ b/features/roomaliasresolver/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,5 @@ + + + "Bu oda önizlemesini görüntüleyemedik" + "Oda takma adı çözümlenemedi." + diff --git a/features/roomaliasresolver/impl/src/main/res/values-uk/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-uk/translations.xml index 0f5d40f6d83..91412c2cd11 100644 --- a/features/roomaliasresolver/impl/src/main/res/values-uk/translations.xml +++ b/features/roomaliasresolver/impl/src/main/res/values-uk/translations.xml @@ -1,4 +1,5 @@ + "Ми не можемо показати попередній перегляд цієї кімнати" "Не вдалося розв\'язати псевдонім кімнати." diff --git a/features/roomaliasresolver/impl/src/main/res/values/localazy.xml b/features/roomaliasresolver/impl/src/main/res/values/localazy.xml index 21d5c17135c..6ace0d7fb10 100644 --- a/features/roomaliasresolver/impl/src/main/res/values/localazy.xml +++ b/features/roomaliasresolver/impl/src/main/res/values/localazy.xml @@ -1,4 +1,5 @@ + "We couldn’t display this room preview" "Failed to resolve room alias." diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt index 59601f065da..597f9517b93 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt @@ -64,6 +64,7 @@ fun aDmRoomMember( normalizedPowerLevel: Long = powerLevel, isIgnored: Boolean = false, role: RoomMember.Role = RoomMember.Role.USER, + membershipChangeReason: String? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -74,6 +75,7 @@ fun aDmRoomMember( normalizedPowerLevel = normalizedPowerLevel, isIgnored = isIgnored, role = role, + membershipChangeReason = membershipChangeReason ) fun aRoomDetailsState( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt index e35de9f5ec9..c702d74f04e 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsView.kt @@ -424,7 +424,7 @@ private fun TitleAndSubtitle( Text( text = subtitle, style = ElementTheme.typography.fontBodyLgRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, textAlign = TextAlign.Center, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt index 499c8290b88..f9170001544 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt @@ -126,6 +126,7 @@ fun aRoomMember( normalizedPowerLevel: Long = 0L, isIgnored: Boolean = false, role: RoomMember.Role = RoomMember.Role.USER, + membershipChangeReason: String? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -136,6 +137,7 @@ fun aRoomMember( normalizedPowerLevel = normalizedPowerLevel, isIgnored = isIgnored, role = role, + membershipChangeReason = membershipChangeReason, ) fun aRoomMemberList() = persistentListOf( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 5c17b93b8cf..69061c2000b 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -26,7 +26,6 @@ import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect @@ -278,7 +277,7 @@ private fun LazyListScope.roomMemberListSection( modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp), text = it(), style = ElementTheme.typography.fontBodyLgRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) } } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt index 1eda6dc582c..a94f6050599 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsView.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -111,7 +110,7 @@ private fun RoomSpecificNotificationSettingsView( .padding(start = 16.dp, bottom = 16.dp, end = 16.dp), style = ElementTheme.typography.fontBodyMdRegular .copy( - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) ) if (state.defaultRoomNotificationMode != null) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt index 4c5a5e9b6b4..acd4c28483d 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt @@ -29,7 +29,6 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -356,7 +355,7 @@ private fun MemberRow( text = name, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyLgRegular, ) // Invitation pending marker @@ -365,7 +364,7 @@ private fun MemberRow( modifier = Modifier.padding(start = 8.dp), text = stringResource(id = R.string.screen_room_member_list_pending_header_title), style = ElementTheme.typography.fontBodySmRegular.copy(fontStyle = FontStyle.Italic), - color = MaterialTheme.colorScheme.secondary + color = ElementTheme.colors.textSecondary ) } } @@ -373,7 +372,7 @@ private fun MemberRow( userId?.let { Text( text = userId, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmRegular, diff --git a/features/roomdetails/impl/src/main/res/values-be/translations.xml b/features/roomdetails/impl/src/main/res/values-be/translations.xml index 6ba7e59a2ed..a686d58c903 100644 --- a/features/roomdetails/impl/src/main/res/values-be/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-be/translations.xml @@ -115,4 +115,7 @@ "Ролі" "Дэталі пакоя" "Ролі і дазволы" + "Папрасіце далучыцца" + "Хто заўгодна" + "Хто заўгодна" diff --git a/features/roomdetails/impl/src/main/res/values-cs/translations.xml b/features/roomdetails/impl/src/main/res/values-cs/translations.xml index fc5c82860c7..1e29ffa3dfb 100644 --- a/features/roomdetails/impl/src/main/res/values-cs/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-cs/translations.xml @@ -123,7 +123,7 @@ "Role a oprávnění" "Přidat adresu místnosti" "Kdokoli může požádat o vstup do místnosti, ale správce nebo moderátor bude muset žádost přijmout." - "Požádat o vstup" + "Požádat o připojení" "Ano, povolit šifrování" "Po aktivaci nelze šifrování místnosti deaktivovat. Historie zpráv bude viditelná pouze pro členy místnosti od doby, kdy byli pozváni nebo od té doby, co do místnosti vstoupili. Nikdo kromě členů místnosti nebude moci číst zprávy. To může bránit správnému fungování robotů a propojení. diff --git a/features/roomdetails/impl/src/main/res/values-de/translations.xml b/features/roomdetails/impl/src/main/res/values-de/translations.xml index 310d955a60f..c2833195a4c 100644 --- a/features/roomdetails/impl/src/main/res/values-de/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-de/translations.xml @@ -122,7 +122,7 @@ "Rollen und Berechtigungen" "Chatroomadresse hinzufügen" "Jeder kann den Beitritt zum Chatroom beantragen, aber ein Administrator oder Moderator muss die Anfrage annehmen." - "Bitte um Beitritt" + "Beitritt beantragen" "Ja, Verschlüsselung aktivieren" "Nach der Aktivierung kann die Verschlüsselung für einen Raum nicht mehr deaktiviert werden. Der Nachrichtenverlauf ist nur für Raummitglieder sichtbar, weil sie eingeladen wurden oder dem Chatroom beigetreten sind. Niemand außer den Raummitgliedern kann Nachrichten lesen. Dies kann verhindern, dass Bots und Bridges richtig funktionieren. @@ -132,7 +132,7 @@ Wir empfehlen nicht, die Verschlüsselung für Räume zu aktivieren, die jeder f "Verschlüsselung" "Ende-zu-Ende-Verschlüsselung aktivieren" "Jeder kann es finden und beitreten" - "Alle" + "Jemand" "Personen können nur beitreten, wenn sie eingeladen werden." "Nur auf Einladung" "Chatroomzugang" @@ -142,7 +142,7 @@ Wir empfehlen nicht, die Verschlüsselung für Räume zu aktivieren, die jeder f "Chatroomadresse" "Erlauben Sie, dass dieser Chatroom gefunden werden kann, indem Sie das %1$s öffentliche Chatroomverzeichnis durchsuchen" "Sichtbar im öffentlichen Chatroomverzeichnis" - "Jeder" + "Jemand" "Wer kann die Verlaufsgeschichte lesen" "Nur Mitglieder, da sie eingeladen wurden" "Nur Mitglieder seit Auswahl dieser Option" @@ -150,6 +150,6 @@ Wir empfehlen nicht, die Verschlüsselung für Räume zu aktivieren, die jeder f Lassen Sie die Möglichkeit zu, Ihren Chatroom in Ihrem öffentlichen Chatroomverzeichnis auf Ihrem Homeserver zu veröffentlichen." "Veröffentlichung von Räumen" "Chatroomadressen sind Möglichkeiten, Chatrooms zu finden und auf sie zuzugreifen. So können Sie Ihren Chatroom auch problemlos mit anderen teilen. Die Adresse ist auch erforderlich, um den Chatroom in einem %1$s öffentlichen Chatroomverzeichnis sichtbar zu machen." - "Chatroomsichtbarkeit." + " Sichtbarkeit des Chatrooms" "Sicherheit & Datenschutz" diff --git a/features/roomdetails/impl/src/main/res/values-el/translations.xml b/features/roomdetails/impl/src/main/res/values-el/translations.xml index 3f21e7cf528..3cd064109e3 100644 --- a/features/roomdetails/impl/src/main/res/values-el/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-el/translations.xml @@ -132,5 +132,7 @@ "Τα άτομα μπορούν να συμμετάσχουν μόνο εάν έχουν προσκληθεί" "Μόνο πρόσκληση" "Πρόσβαση δωματίου" + "Οποιοσδήποτε" + "Ορατότητα δωματίου" "Ασφάλεια & απόρρητο" diff --git a/features/roomdetails/impl/src/main/res/values-et/translations.xml b/features/roomdetails/impl/src/main/res/values-et/translations.xml index 698f9dffe93..8cf2c4a6a3f 100644 --- a/features/roomdetails/impl/src/main/res/values-et/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-et/translations.xml @@ -103,7 +103,7 @@ "Vaikimisi seadistuste taastamine ei õnnestunud. Palun proovi uuesti." "Seadistuste muutmine ei õnnestunud. Palun proovi uuesti." "Sinu koduserver ei toeta seda võimalust krüptitud jututubades, seega sa ei saa selle jututoa kohta teavitusi." - "Kõik sõnumid" + "Kõikide sõnumite korral" "Mainimiste ja võtmesõnade alusel" "Selles jututoas teavita mind" "Peakasutajad" @@ -122,7 +122,7 @@ "Rollid ja õigused" "Lisa jututoa aadress" "Kõik võivad paluda jututoaga liitumist, kuid peakasutaja või moderaator peavad sellega nõustuma." - "Palu võimalust liituda" + "Küsi võimalust liitumiseks" "Jah, lülita krüptimine sisse" "Kui jututoa krüptimine on kord sisse lülitatud, siis seda välja lülitada ei saa. Sõnumite ajalugu on nähtav vaid jututoa liikmetele alates kutse saamise või liitumise hetkest. Keegi teine peale jututoa liikmete ei saa sõnumeid lugeda. See võib takistada suhtlusrobotite ja/või võrgusildade toimimist. diff --git a/features/roomdetails/impl/src/main/res/values-hu/translations.xml b/features/roomdetails/impl/src/main/res/values-hu/translations.xml index 1dfc0f50e80..585f61ece57 100644 --- a/features/roomdetails/impl/src/main/res/values-hu/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-hu/translations.xml @@ -139,7 +139,7 @@ Nem javasoljuk a titkosítás engedélyezését az olyan szobákban, amelyeket b "A terek jelenleg nem támogatottak" "A tér tagjai" "Szüksége lesz egy szobacímre, hogy láthatóvá váljon a szobakatalógusban." - "Szoba címe" + "A szoba címe" "A szoba megtalálhatóvá tétele a(z) %1$s nyilvános szobakatalógusában való kereséssel." "Látható a nyilvános szobakatalógusban" "Bárki" diff --git a/features/roomdetails/impl/src/main/res/values-in/translations.xml b/features/roomdetails/impl/src/main/res/values-in/translations.xml index 24c6fd1f0a0..d09ccd3cffb 100644 --- a/features/roomdetails/impl/src/main/res/values-in/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-in/translations.xml @@ -115,4 +115,9 @@ "Peran" "Detail ruangan" "Peran dan perizinan" + "Minta untuk bergabung" + "Enkripsi" + "Siapa pun" + "Siapa pun" + "Keterlihatan ruangan" diff --git a/features/roomdetails/impl/src/main/res/values-nb/translations.xml b/features/roomdetails/impl/src/main/res/values-nb/translations.xml index 573622f3b62..a416b97cd2f 100644 --- a/features/roomdetails/impl/src/main/res/values-nb/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-nb/translations.xml @@ -18,7 +18,6 @@ "Inviter folk" "Forlat samtalen" "Forlat rommet" - "Medier og filer" "Tilpasset" "Standard" "Romnavn" @@ -60,10 +59,10 @@ "globale innstillinger" "Standard innstilling" "Fjern egendefinert innstilling" - "Alle meldinger" "I dette rommet, varsle meg om" "Administratorer" "Endre rollen min" + "Kryptering" "Områder støttes ikke for øyeblikket" "Medlemmer av område" diff --git a/features/roomdetails/impl/src/main/res/values-nl/translations.xml b/features/roomdetails/impl/src/main/res/values-nl/translations.xml index 6c677ea68ee..10a8539ffae 100644 --- a/features/roomdetails/impl/src/main/res/values-nl/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-nl/translations.xml @@ -114,4 +114,7 @@ "Rollen" "Kamergegevens" "Rollen en rechten" + "Vraag om toe te treden" + "Iedereen" + "Iedereen" diff --git a/features/roomdetails/impl/src/main/res/values-pl/translations.xml b/features/roomdetails/impl/src/main/res/values-pl/translations.xml index e2dec9da494..3d8954e7608 100644 --- a/features/roomdetails/impl/src/main/res/values-pl/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-pl/translations.xml @@ -1,5 +1,7 @@ + "Aby pokój był widoczny w katalogu, potrzebny jest adres pokoju." + "Adres pokoju" "Wystąpił błąd podczas aktualizacji ustawienia powiadomień." "Twój serwer domowy nie wspiera tej opcji w pokojach szyfrowanych, możesz nie otrzymać powiadomień z niektórych pokoi." "Ankiety" @@ -7,11 +9,11 @@ "Banowanie osób" "Usuwanie wiadomości" "Wszyscy" - "Zapraszanie osób" + "Zapraszanie osób i akceptowanie próśb o dołączenie" "Moderacja członków" "Wiadomości i zawartość" "Administratorzy i moderatorzy" - "Usuwanie osób" + "Usuwanie osób i odrzucanie próśb o dołączenie" "Zmień awatar pokoju" "Szczegóły pokoju" "Zmień nazwę pokoju" @@ -50,10 +52,11 @@ "Opuść rozmowę" "Opuść pokój" "Media i pliki" - "Niestandardowy" + "Niestandardowe" "Domyślny" "Powiadomienia" "Przypięte wiadomości" + "Profil" "Prośby o dołączenie" "Role i uprawnienia" "Nazwa pokoju" @@ -118,6 +121,7 @@ "Role" "Szczegóły pokoju" "Role i uprawnienia" + "Dodaj adres pokoju" "Każdy może poprosić o dołączenie do pokoju, ale administrator lub moderator będzie musiał zatwierdzić żądanie." "Poproś o dołączenie" "Tak, włącz szyfrowanie" @@ -129,9 +133,25 @@ Odradzamy włączanie szyfrowania dla pokoi, które każdy może znaleźć i do "Szyfrowanie" "Włącz szyfrowanie end-to-end" "Każdy może znaleźć i dołączyć" - "Każdy" + "Wszyscy" "Tylko osoby z zaproszeniem mogą dołączyć" "Tylko zaproszenie" "Dostęp do pokoju" + "Przestrzenie nie są obecnie wspierane" + "Członkowie przestrzeni" + "Aby pokój był widoczny w katalogu pokoi, potrzebny jest adres pokoju." + "Adres pokoju" + "Zezwól na znalezienie tego pokoju wyszukując %1$s w katalogu pokoi publicznych" + "Widoczny w katalogu pokoi publicznych" + "Wszyscy" + "Kto może czytać historię" + "Od momentu kiedy członkowie zostali zaproszeni" + "Członkowie od momentu włączenia tej opcji" + "Adresy pokoju umożliwiają łatwe znalezienie i dołączenie do pokojów. +Również możesz się zdecydować na upublicznienie Twojego serwera w katalogu pokoi publicznych." + "Publikowanie pokoju" + "Adresy pokoju umożliwiają łatwe znalezienie i dołączenie do pokojów. +Dodatkowo adres pokoju jest wymagany, aby pomieszczenie było widoczne w katalogu pokoi publicznych %1$s." + "Widoczność pomieszczenia" "Bezpieczeństwo i prywatność" diff --git a/features/roomdetails/impl/src/main/res/values-pt/translations.xml b/features/roomdetails/impl/src/main/res/values-pt/translations.xml index d4dcb4f7f4d..7bc9f380974 100644 --- a/features/roomdetails/impl/src/main/res/values-pt/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-pt/translations.xml @@ -1,5 +1,7 @@ + "É necessário um endereço para tornar a sala visível no diretório." + "Endereço da sala" "Erro ao atualizar a configuração de notificação." "O teu servidor não suporta esta opção em salas cifradas, pelo que poderás não ser notificado em algumas salas." "Sondagens" @@ -7,11 +9,11 @@ "Banir pessoas" "Remover mensagens" "Toda a gente" - "Convida pessoas" + "Convidar pessoas e aceitar pedidos de entrada" "Moderação de participantes" "Mensagens e conteúdo" "Administradores e moderadores" - "Remover pessoas" + "Remover pessoas e rejeitar pedidos de entrada" "Alterar o ícone da sala" "Detalhes da sala" "Altera o nome da sala" @@ -54,9 +56,11 @@ "Predefinição" "Notificações" "Mensagens afixadas" + "Perfil" "Pedidos de entrada" "Cargos e permissões" "Nome da sala" + "Segurança e privacidade" "Segurança" "Partilhar sala" "Informação da sala" @@ -99,7 +103,7 @@ "Falha ao restaurar o modo predefinido, tenta novamente." "Falha ao definir o modo, tenta novamente." "O teu servidor não suporta esta opção em salas cifradas, pelo que não serás notificado nesta sala." - "Todas as mensagens" + "Qualquer mensagem" "Menções ou palavras-chave" "Nesta sala, notifica-me se" "Administradores" @@ -116,4 +120,37 @@ "Cargos" "Detalhes da sala" "Cargos e permissões" + "Adicionar endereço de sala" + "Qualquer pessoa pode pedir para entrar na sala, mas um administrador ou moderador tem que aceitar o pedido." + "Pedir para participar" + "Sim, ativar cifragem" + "Uma vez ativada, a cifragem não pode ser desativada. O histórico de mensagens só será visível a membros a partir do momento em que foram convidados ou que entraram na sala. +Ninguém além dos membros poderão ler quaisquer mensagens. Isto pode impedir que robôs (\"bots\") e pontes (\"bridges\") funcionem devidamente. +Não recomendamos ativar a cifragem em salas que qualquer pessoa possa encontrar e entrar." + "Ativar cifragem?" + "Uma vez ativada, a cifragem não pode ser desativada." + "Cifragem" + "Ativar cifragem ponta-a-ponta" + "Qualquer pessoa pode encontrar a sala e entrar" + "Qualquer pessoa" + "Só é possível entrar tendo um convite" + "Apenas por convite" + "Acesso à sala" + "Os espaços ainda não estão implementados" + "Membros do espaço" + "É necessário um endereço para tornar a sala visível no diretório." + "Endereço da sala" + "Permite que esta sala seja encontrada através do diretório público do %1$s." + "Visível no diretório público de salas" + "Qualquer pessoa" + "Quem pode ler o histórico de mensagens" + "Apenas membros, desde o momento em que forem convidados" + "Apenas membros, desde o memento em que esta opção for selecionada" + "Estes endereços permitem encontrar e aceder a sala, bem como a sua fácil partilha com outros. +Podes escolher publicar a sala no diretório público do teu servidor." + "Publicar sala" + "Estes endereços permitem encontrar e aceder a sala, bem como a sua fácil partilha com outros. +Além disso, é necessário ter endereço para publicar a sala no diretório público do %1$s." + "Visibilidade da sala" + "Segurança e privacidade" diff --git a/features/roomdetails/impl/src/main/res/values-ro/translations.xml b/features/roomdetails/impl/src/main/res/values-ro/translations.xml index e4ad084733b..38c9fdc5c15 100644 --- a/features/roomdetails/impl/src/main/res/values-ro/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-ro/translations.xml @@ -114,4 +114,8 @@ "Roluri" "Detaliile camerei" "Roluri și permisiuni" + "Cereți să vă alăturați" + "Criptare" + "Oricine" + "Oricine" diff --git a/features/roomdetails/impl/src/main/res/values-ru/translations.xml b/features/roomdetails/impl/src/main/res/values-ru/translations.xml index 611b89a45d8..7c984f573ec 100644 --- a/features/roomdetails/impl/src/main/res/values-ru/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-ru/translations.xml @@ -123,7 +123,7 @@ "Роли и разрешения" "Добавить адрес комнаты" "Любой желающий может подать заявку на присоединение к комнате, но администратор или модератор должен будет принять запрос." - "Присоединиться" + "Попросить присоединиться" "Да, включить шифрование" "Шифрование комнаты нельзя будет отключить, история сообщений будет видна только участникам комнаты с момента их приглашения или с момента присоединения к комнате. Никто, кроме членов комнаты, не сможет читать сообщения. Это может помешать ботам и мостам работать корректно. diff --git a/features/roomdetails/impl/src/main/res/values-sv/translations.xml b/features/roomdetails/impl/src/main/res/values-sv/translations.xml index 829ab87f863..6497995b021 100644 --- a/features/roomdetails/impl/src/main/res/values-sv/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-sv/translations.xml @@ -49,12 +49,15 @@ "Bjud in personer" "Lämna konversation" "Lämna rum" + "Media och filer" "Anpassad" "Förval" "Aviseringar" "Fästa meddelanden" + "Begäran om att gå med" "Roller och behörigheter" "Rumsnamn" + "Säkerhet och sekretess" "Säkerhet" "Dela rum" "Rumsinfo" @@ -114,4 +117,22 @@ "Roller" "Rumsdetaljer" "Roller och behörigheter" + "Vem som helst kan be om att gå med i rummet men en administratör eller moderator måste acceptera begäran." + "Be om att gå med" + "Ja, aktivera kryptering" + "När det är aktiverat kan kryptering för ett rum inte inaktiveras, meddelandehistoriken visas bara för rumsmedlemmar sedan de blev inbjudna eller sedan de gick med i rummet. +Ingen förutom rumsmedlemmarna kommer att kunna läsa meddelanden. Detta kan förhindra att bots och bridges fungerar korrekt. +Vi rekommenderar inte att aktivera kryptering för rum som vem som helst kan hitta och gå med i." + "Aktivera kryptering?" + "Efter aktivering kan kryptering inte inaktiveras." + "Kryptering" + "Aktivera totalsträckskryptering" + "Vem som helst kan hitta och gå med" + "Vem som helst" + "Användare kan bara gå med om de är inbjudna" + "Endast inbjudan" + "Tillgång till rum" + "Vem som helst" + "Rumssynlighet" + "Säkerhet och sekretess" diff --git a/features/roomdetails/impl/src/main/res/values-tr/translations.xml b/features/roomdetails/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..f3dfc3f3369 --- /dev/null +++ b/features/roomdetails/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,156 @@ + + + "Dizinde görünür hale getirmek için bir oda adresine ihtiyacınız olacak." + "Oda adresi" + "Bildirim ayarı güncellenirken bir hata oluştu." + "Ana sunucunuz şifreli odalarda bu seçeneği desteklemiyor, bazı odalarda bildirim almayabilirsiniz." + "Anketler" + "Yalnızca yöneticiler" + "İnsanları yasakla" + "Mesajları kaldır" + "Herkes" + "Kişileri davet etme ve katılma isteklerini kabul etme" + "Üye moderasyonu" + "Mesajlar ve içerik" + "Yöneticiler ve moderatörler" + "Kişileri kaldırma ve katılma isteklerini reddetme" + "Oda resmini değiştir" + "Oda bilgileri" + "Oda adını değiştir" + "Oda konusunu değiştir" + "Mesaj gönder" + "Yöneticileri Düzenle" + "Bu eylemi geri alamazsınız. Kullanıcıyı sizinle aynı güç seviyesine sahip olacak şekilde terfi ettiriyorsunuz." + "Yönetici Ekle?" + "Rütbe Düşür" + "Rütbenizi düşürdüğünüz için bu değişikliği geri alamazsınız, eğer odadaki son ayrıcalıklı kullanıcı sizseniz ayrıcalıkları yeniden kazanmanız mümkün olmayacaktır." + "Rütbeni düşür?" + "%1$s (Beklemede)" + "(Beklemede)" + "Yöneticiler otomatik olarak moderatör ayrıcalıklarına sahiptir" + "Moderatörleri Düzenle" + "Yöneticiler" + "Moderatörler" + "Üyeler" + "Kaydedilmemiş değişiklikleriniz var." + "Değişiklikleri Kaydet?" + "Konu ekle" + "Zaten üye" + "Zaten davet edildi" + "Şifrelenmiş" + "Şifrelenmemiş" + "Herkese açık oda" + "Odayı Düzenle" + "Bilinmeyen bir hata oluştu ve bilgiler değiştirilemedi." + "Oda güncellenemiyor" + "Mesajlar kilitlerle güvence altına alınır. Yalnızca siz ve alıcılar, bunların kilidini açmak için benzersiz anahtarlara sahipsiniz." + "Mesaj şifrelemesi etkinleştirildi" + "Bildirim ayarları yüklenirken bir hata oluştu." + "Bu odayı sessize alma başarısız oldu, lütfen tekrar deneyin." + "Bu odanın sesi açılamadı, lütfen tekrar deneyin." + "İnsanları davet et" + "Sohbeti bırak" + "Odadan ayrıl" + "Medya ve dosyalar" + "Özel" + "Varsayılan" + "Bildirimler" + "Sabitlenmiş mesajlar" + "Profil" + "Katılma istekleri" + "Roller ve izinler" + "Oda adı" + "Güvenlik ve gizlilik" + "Güvenlik" + "Oda paylaş" + "Oda bilgisi" + "Konu" + "Oda güncelleniyor…" + "Yasakla" + "Davet edilseler bile bu odaya tekrar katılamazlar." + "Bu üyeyi yasaklamak istediğinize emin misiniz?" + "Bu odada yasaklı kullanıcı yok." + "Yasaklanıyor %1$s" + + "%1$d kişi" + "%1$d kişi" + + "Üyeyi çıkar ve yasakla" + "Odadan çıkar" + "Üyeyi çıkar ve yasakla" + "Yalnızca üyeyi kaldır" + "Üyeyi çıkarın ve gelecekte katılmasını yasaklayın?" + "Yasağı Kaldır" + "Davet edildikleri takdirde bu odaya tekrar katılabileceklerdir." + "Kullanıcının yasağını kaldır" + "Profili görüntüle" + "Yasaklandı" + "Üyeler" + "Beklemede" + "Kaldırılıyor %1$s…" + "Yönetici" + "Moderatör" + "Oda üyeleri" + "Yasak kaldırılıyor %1$s" + "Özel ayarlara izin ver" + "Bunu açmak varsayılan ayarlarınızı geçersiz kılacaktır" + "Bu sohbette bana bildir" + "Bunu %1$s içinde değiştirebilirsiniz." + "genel ayarlar" + "Varsayılan ayar" + "Özel ayarı kaldır" + "Bildirim ayarları yüklenirken bir hata oluştu." + "Varsayılan ayarlar geri yüklenemedi, lütfen tekrar deneyin." + "Ayarlanamadı, lütfen tekrar deneyin." + "Ana sunucunuz şifreli odalarda bu seçeneği desteklemiyor, bu odada bildirim almayacaksınız." + "Tüm mesajlar" + "Yalnızca Bahsetmeler ve Anahtar Kelimeler" + "Bu odada, bana bildir" + "Yöneticiler" + "Rolümü değiştir" + "Üyeliğe düşür" + "Moderatörlüğe düşür" + "Üye moderasyonu" + "Mesajlar ve içerik" + "Moderatörler" + "İzinler" + "İzinleri sıfırla" + "İzinleri sıfırladığınızda, mevcut ayarları kaybedersiniz." + "İzinleri sıfırla?" + "Roller" + "Oda bilgileri" + "Roller ve izinler" + "Oda adresi ekle" + "Herkes odaya katılma isteğinde bulunabilir ancak bir yönetici veya moderatörün isteği kabul etmesi gerekir." + "Katılmak için sor" + "Evet, şifrelemeyi etkinleştir" + "Etkinleştirildikten sonra, bir oda için şifreleme devre dışı bırakılamaz, Mesaj geçmişi yalnızca davet edildiklerinden veya odaya katıldıklarından beri oda üyeleri için görünür olacaktır. +Oda üyeleri dışında hiç kimse mesajları okuyamayacaktır. Bu, botların ve köprülerin düzgün çalışmasını engelleyebilir. +Herkesin bulabileceği ve katılabileceği odalar için şifrelemenin etkinleştirilmesini önermiyoruz." + "Şifrelemeyi etkinleştir?" + "Açıldıktan donra şifreleme kapatılamaz." + "Şifreleme" + "Uçtan uca şifrelemeyi etkinleştir" + "Herkes bulabilir ve katılabilir" + "Herkes" + "İnsanlar yalnızca davet edildiklerinde katılabilirler" + "Yalnızca davet" + "Oda Erişimi" + "Alanlar şu anda desteklenmiyor" + "Alan üyeleri" + "Oda dizininde görünür kılmak için bir oda adresine ihtiyacınız olacaktır." + "Oda adresi" + "Bu odanın %1$s genel oda dizininde arama yapılarak bulunmasına izin verin" + "Genel oda dizininde görünür" + "Herkes" + "Geçmişi kimler okuyabilir ?" + "Sadece üyeler (davet edildiklerinden beri)" + "Bu seçeneği seçtiğinden beri yalnızca üyeler" + "Oda adresleri, odaları bulmanın ve odalara erişmenin yoludur. Bu aynı zamanda odanızı başkalarıyla kolayca paylaşabilmenizi sağlar. +Odanızı ana sunucunuzun genel oda dizininde yayınlamayı seçebilirsiniz." + "Oda yayınlama" + "Oda adresleri, odaları bulmanın ve odalara erişmenin yollarıdır. Bu aynı zamanda odanızı başkalarıyla kolayca paylaşabilmenizi sağlar. +Adres, odayı %1$s genel oda dizininde görünür kılmak için de gereklidir." + "Oda görünürlüğü" + "Güvenlik ve gizlilik" + diff --git a/features/roomdetails/impl/src/main/res/values-uk/translations.xml b/features/roomdetails/impl/src/main/res/values-uk/translations.xml index 1bbbcd48174..745c2dd029b 100644 --- a/features/roomdetails/impl/src/main/res/values-uk/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-uk/translations.xml @@ -9,11 +9,11 @@ "Заблоковувати людей" "Вилучати повідомлення" "Усі" - "Запрошувати людей" + "Запрошувати людей і приймати запити на приєднання" "Модерація учасників" "Повідомлення та зміст" "Адміністратори та модератори" - "Вилучати людей" + "Вилучати людей і відхиляти запити на приєднання" "Змінювати аватар кімнати" "Деталі кімнати" "Змінювати назву кімнати" @@ -123,7 +123,7 @@ "Ролі та дозволи" "Додати адресу кімнати" "Будь-хто може надіслати запит приєднатися до кімнати, але адміністратор або модератор повинні прийняти запит." - "Запит на приєднання" + "Запросити приєднатися" "Так, увімкнути шифрування" "Після ввімкнення шифрування кімнати, його неможливо вимкнути, історію повідомлень бачитимуть лише учасники кімнати, яких було запрошено або які приєдналися до кімнати. Ніхто, крім учасників кімнати, не зможе прочитати повідомлення. Це може перешкоджати коректній роботі ботів і мостів. @@ -133,7 +133,7 @@ "Шифрування" "Увімкнути наскрізне шифрування" "Будь-хто може знайти та приєднатися." - "Будь-хто" + "Кожний" "Люди можуть приєднатися, лише якщо їх запросили" "Лише запрошені" "Доступ до кімнати" @@ -143,7 +143,7 @@ "Адреса кімнати" "Дозвольте, щоб цю кімнату можна було знайти за допомогою пошуку в каталозі загальнодоступних кімнат %1$s " "Видима в каталозі загальнодоступних кімнат" - "Будь-хто" + "Кожний" "Хто може читати історію" "Лише учасники з моменту запрошення" "Лише учасники після вибору цього параметра" diff --git a/features/roomdetails/impl/src/main/res/values-zh/translations.xml b/features/roomdetails/impl/src/main/res/values-zh/translations.xml index 6446625c260..10a6e19265d 100644 --- a/features/roomdetails/impl/src/main/res/values-zh/translations.xml +++ b/features/roomdetails/impl/src/main/res/values-zh/translations.xml @@ -102,7 +102,7 @@ "恢复默认模式失败,请重试。" "设置模式失败,请重试。" "服务器在加密聊天室中不支持此选项,无法在此聊天室收到通知。" - "所有消息" + "全部消息" "仅限提及和关键词" "在这个聊天室,通知我:" "管理员" diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/MatrixRoomFixture.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/MatrixRoomFixture.kt index 203b7adab59..d9cc77be76c 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/MatrixRoomFixture.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/MatrixRoomFixture.kt @@ -73,7 +73,6 @@ fun aMatrixRoom( topic = topic, avatarUrl = avatarUrl, isDirect = isDirect, - isPublic = isPublic, joinRule = joinRule, ) ) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt index ff612431c4c..1eec78ea9ce 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenterTest.kt @@ -145,7 +145,6 @@ class RoomDetailsPresenterTest { fun `present - initial state is updated with roomInfo if it exists`() = runTest { val roomInfo = aRoomInfo( name = A_ROOM_NAME, - isPublic = true, topic = A_ROOM_TOPIC, avatarUrl = AN_AVATAR_URL, pinnedEventIds = listOf(AN_EVENT_ID), diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/moderation/RoomMembersModerationPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/moderation/RoomMembersModerationPresenterTest.kt index 530975f7a3f..d569a93baa5 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/moderation/RoomMembersModerationPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/moderation/RoomMembersModerationPresenterTest.kt @@ -42,7 +42,7 @@ class RoomMembersModerationPresenterTest { canBanResult = { Result.success(true) }, userRoleResult = { Result.success(RoomMember.Role.ADMIN) }, ).apply { - givenRoomInfo(aRoomInfo(isDirect = true, isPublic = false, activeMembersCount = 2)) + givenRoomInfo(aRoomInfo(isDirect = true, activeMembersCount = 2)) } val presenter = createRoomMembersModerationPresenter(matrixRoom = room) presenter.test { diff --git a/features/roomdirectory/impl/src/main/res/values-tr/translations.xml b/features/roomdirectory/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..22a76932e36 --- /dev/null +++ b/features/roomdirectory/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,5 @@ + + + "Yükleme başarısız" + "Oda dizini" + diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt index ba69e31ca2c..fd72d88c172 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.roomlist.impl import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node @@ -92,7 +92,7 @@ class RoomListNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) RoomListView( state = state, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index d40546b5dd1..668ce06255e 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable @@ -22,6 +21,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter +import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.leaveroom.api.LeaveRoomView import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorContainer @@ -90,7 +90,7 @@ fun RoomListView( .statusBarsPadding() .padding(top = topPadding) .fillMaxSize() - .background(MaterialTheme.colorScheme.background) + .background(ElementTheme.colors.bgCanvasDefault) ) acceptDeclineInviteView() } @@ -152,14 +152,14 @@ private fun RoomListScaffold( floatingActionButton = { if (state.displayActions) { FloatingActionButton( - // FIXME align on Design system theme - containerColor = MaterialTheme.colorScheme.primary, + containerColor = ElementTheme.colors.iconPrimary, onClick = onCreateRoomClick ) { Icon( // Note cannot use Icons.Outlined.EditSquare, it does not exist :/ imageVector = CompoundIcons.Compose(), - contentDescription = stringResource(id = R.string.screen_roomlist_a11y_create_message) + contentDescription = stringResource(id = R.string.screen_roomlist_a11y_create_message), + tint = ElementTheme.colors.iconOnSolidPrimary, ) } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt index f196ba3c196..a0e90785301 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt @@ -162,7 +162,7 @@ private fun DefaultRoomListTopBar( // Workaround to display a very subtle bloom for avatars with very soft colors Color(0xFFF9F9F9) } else { - ElementTheme.materialColors.background + ElementTheme.colors.bgCanvasDefault }, blurSize = DpSize(avatarBloomSize, avatarBloomSize), offset = DpOffset(24.dp, 24.dp + statusBarPadding), @@ -174,7 +174,7 @@ private fun DefaultRoomListTopBar( } else { DpSize.Unspecified }, - bottomSoftEdgeColor = ElementTheme.materialColors.background, + bottomSoftEdgeColor = ElementTheme.colors.bgCanvasDefault, bottomSoftEdgeAlpha = if (displayFilters) { 1f } else { @@ -233,7 +233,7 @@ private fun DefaultRoomListTopBar( leadingIcon = { Icon( imageVector = CompoundIcons.ShareAndroid(), - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, contentDescription = null, ) } @@ -249,7 +249,7 @@ private fun DefaultRoomListTopBar( leadingIcon = { Icon( imageVector = CompoundIcons.ChatProblem(), - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, contentDescription = null, ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 05ff1042e58..0fbd4d38fee 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -212,7 +211,7 @@ private fun NameAndTimestampRow( style = ElementTheme.typography.fontBodyLgMedium, text = name ?: stringResource(id = CommonStrings.common_no_room_name), fontStyle = FontStyle.Italic.takeIf { name == null }, - color = MaterialTheme.roomListRoomName(), + color = ElementTheme.roomListRoomName(), maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -223,7 +222,7 @@ private fun NameAndTimestampRow( color = if (isHighlighted) { ElementTheme.colors.unreadIndicator } else { - MaterialTheme.roomListRoomMessageDate() + ElementTheme.roomListRoomMessageDate() }, ) } @@ -247,7 +246,7 @@ private fun InviteSubtitle( maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.roomListRoomMessage(), + color = ElementTheme.roomListRoomMessage(), modifier = modifier, ) } @@ -268,7 +267,7 @@ private fun LastMessageAndIndicatorRow( Text( modifier = Modifier.weight(1f), text = attributedLastMessage, - color = MaterialTheme.roomListRoomMessage(), + color = ElementTheme.roomListRoomMessage(), style = ElementTheme.typography.fontBodyMdRegular, minLines = 2, maxLines = 2, @@ -315,7 +314,7 @@ private fun InviteNameAndIndicatorRow( style = ElementTheme.typography.fontBodyLgMedium, text = name ?: stringResource(id = CommonStrings.common_no_room_name), fontStyle = FontStyle.Italic.takeIf { name == null }, - color = MaterialTheme.roomListRoomName(), + color = ElementTheme.roomListRoomName(), maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index d293951f89f..e71c8849b7b 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -123,6 +123,7 @@ internal fun anInviteSender( userId = userId, displayName = displayName, avatarData = avatarData, + membershipChangeReason = null, ) internal fun aRoomListRoomSummary( diff --git a/features/roomlist/impl/src/main/res/values-bg/translations.xml b/features/roomlist/impl/src/main/res/values-bg/translations.xml index 8012e4283b2..4afa8044f34 100644 --- a/features/roomlist/impl/src/main/res/values-bg/translations.xml +++ b/features/roomlist/impl/src/main/res/values-bg/translations.xml @@ -9,6 +9,7 @@ "Създаване на нов разговор или стая" "Започнете, като изпратите съобщение на някого." "Все още няма чатове." + "Покани" "Нисък приоритет" "Хора" "Стаи" diff --git a/features/roomlist/impl/src/main/res/values-es/translations.xml b/features/roomlist/impl/src/main/res/values-es/translations.xml index 25f8e0ba212..396f1259942 100644 --- a/features/roomlist/impl/src/main/res/values-es/translations.xml +++ b/features/roomlist/impl/src/main/res/values-es/translations.xml @@ -18,6 +18,7 @@ "Puedes añadir un chat a tus favoritos en la configuración del chat. Por ahora, puedes deseleccionar los filtros para ver tus otros chats" "Aún no tienes chats favoritos" + "Invitaciones" "Prioridad baja" "Puedes deseleccionar filtros para ver tus otros chats." "No tienes chats para esta selección" diff --git a/features/roomlist/impl/src/main/res/values-hu/translations.xml b/features/roomlist/impl/src/main/res/values-hu/translations.xml index 1505f133671..fc27e2c0d71 100644 --- a/features/roomlist/impl/src/main/res/values-hu/translations.xml +++ b/features/roomlist/impl/src/main/res/values-hu/translations.xml @@ -6,7 +6,7 @@ "Frissítés érhető el" "Hozzon létre egy új helyreállítási kulcsot, amellyel visszaállíthatja a titkosított üzenetek előzményeit, ha elveszíti az eszközökhöz való hozzáférést." "Helyreállítás beállítása" - "Helyreállítás beállítása" + "Helyreállítás beállítása a fiókja védelméhez" "Erősítse meg a helyreállítási kulcsát, hogy továbbra is hozzáférjen a kulcstárolójához és az üzenetelőzményekhez." "Adja meg a helyreállítási kulcsot" "Elfelejtette a helyreállítási kulcsot?" diff --git a/features/roomlist/impl/src/main/res/values-ka/translations.xml b/features/roomlist/impl/src/main/res/values-ka/translations.xml index 0086aeb6e46..4fad6be272a 100644 --- a/features/roomlist/impl/src/main/res/values-ka/translations.xml +++ b/features/roomlist/impl/src/main/res/values-ka/translations.xml @@ -14,6 +14,7 @@ "ახალი საუბრისა ან ოთახის შექმნა" "დაიწყეთ ვინმესთვის შეტყობინების გაგზავნით." "არც ერთი ჩატი ჯერ არაა." + "მოწვევები" "ხალხი" "ჩატები" "როგორც ჩანს, ახალ მოწყობილობას იყენებთ. დაადასტურეთ სხვა მოწყობილობით თქვენს დაშიფრულ შეტყობინებებზე წვდომისთვის." diff --git a/features/roomlist/impl/src/main/res/values-pt-rBR/translations.xml b/features/roomlist/impl/src/main/res/values-pt-rBR/translations.xml index 354c6c736f2..025a67ffcf8 100644 --- a/features/roomlist/impl/src/main/res/values-pt-rBR/translations.xml +++ b/features/roomlist/impl/src/main/res/values-pt-rBR/translations.xml @@ -16,6 +16,7 @@ "Ainda não há conversas." "Favoritos" "Você não tem nenhuma conversa favorita ainda" + "Convites" "Baixa prioridade" "Você não tem conversas para esta seleção" "Pessoas" diff --git a/features/roomlist/impl/src/main/res/values-sv/translations.xml b/features/roomlist/impl/src/main/res/values-sv/translations.xml index f2a30a20506..fa35fdf79a6 100644 --- a/features/roomlist/impl/src/main/res/values-sv/translations.xml +++ b/features/roomlist/impl/src/main/res/values-sv/translations.xml @@ -8,6 +8,8 @@ "Ställ in återställning" "Ställ in återställning" "Bekräfta din återställningsnyckel för att behålla åtkomsten till din nyckellagring och meddelandehistorik." + "Ange din återställningsnyckel" + "Glömt din återställningsnyckel?" "Din nyckellagring är inte synkroniserad" "För att säkerställa att du aldrig missar ett viktigt samtal, ändra dina inställningar för att tillåta helskärmsmeddelanden när telefonen är låst." "Förbättra din samtalsupplevelse" diff --git a/features/roomlist/impl/src/main/res/values-tr/translations.xml b/features/roomlist/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..d31603c8365 --- /dev/null +++ b/features/roomlist/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,50 @@ + + + "Çıkış Yap ve Yükselt" + "Sunucunuz artık yeni, daha hızlı bir protokolü destekliyor. Şimdi oturumu kapatıp tekrar oturum açarak yükseltme yapın. Bunu şimdi yapmak, eski protokol daha sonra kaldırıldığında zorunlu oturum kapatmayı önlemenize yardımcı olacaktır." + "Ana sunucunuz artık eski protokolü desteklemiyor. Lütfen oturumu kapatın ve uygulamayı kullanmaya devam etmek için tekrar oturum açın." + "Yükseltme mevcut" + "Mevcut tüm cihazlarınızı kaybettiyseniz şifreleme kimliğinizi ve mesaj geçmişinizi bir kurtarma anahtarıyla kurtarın." + "Kurtarmayı ayarlayın" + "Hesabınızı korumak için kurtarmayı ayarlayın" + "Anahtar depolama alanınıza ve mesaj geçmişinize erişimi sürdürmek için kurtarma anahtarınızı onaylayın." + "Kurtarma anahtarınızı girin" + "Kurtarma anahtarınızı mı unuttunuz?" + "Anahtar depolama alanınız senkronize değil" + "Önemli bir aramayı asla kaçırmamak için, telefonunuz kilitliyken tam ekran bildirimlere izin vermek üzere ayarlarınızı değiştirin." + "Arama deneyiminizi geliştirin" + "%1$s katılma davetini reddetmek istediğinizden emin misiniz?" + "Daveti reddet" + "%1$s ile bu özel sohbeti reddetmek istediğinizden emin misiniz?" + "Sohbeti reddet" + "Davet Yok" + "%1$s (%2$s) sizi davet etti" + "Katılma isteği gönderildi" + "Bu tek seferlik bir işlemdir, beklediğiniz için teşekkürler." + "Hesabınızı ayarlanıyor." + "Yeni bir sohbet veya oda oluşturun" + "Birine mesaj göndererek başla." + "Henüz sohbet yok." + "Favoriler" + "Sohbet ayarlarından bir sohbeti favorilerinize ekleyebilirsiniz. +Şimdilik, diğer sohbetlerinizi görmek için filtrelerin seçimini kaldırabilirsiniz" + "Henüz favori sohbetleriniz yok" + "Davetiyeler" + "Bekleyen davetiniz yok." + "Düşük Öncelikli" + "Diğer sohbetlerinizi görmek için filtrelerin seçimini kaldırabilirsiniz" + "Bu seçim için sohbetiniz yok" + "Kişiler" + "Henüz hiç DM\'niz yok" + "Odalar" + "Henüz herhangi bir odada değilsiniz" + "Okunmamış" + "Tebrikler! +Okunmamış mesajınız yok!" + "Sohbetler" + "Okundu olarak işaretle" + "Okunmamış olarak işaretle" + "Tüm odalara göz at" + "Görünüşe göre yeni bir cihaz kullanıyorsunuz. Şifrelenmiş mesajlarınıza erişmek için başka bir cihazla doğrulayın." + "Siz olduğunuzu doğrulayın" + diff --git a/features/roomlist/impl/src/main/res/values-uz/translations.xml b/features/roomlist/impl/src/main/res/values-uz/translations.xml index 0fb88583040..077f9ecc4ae 100644 --- a/features/roomlist/impl/src/main/res/values-uz/translations.xml +++ b/features/roomlist/impl/src/main/res/values-uz/translations.xml @@ -12,6 +12,7 @@ "Yangi suhbat yoki xona yarating" "Kimgadir xabar yuborishdan boshlang." "Hozircha chatlar yo‘q." + "Takliflar" "Odamlar" "Suhbatlar" "Siz yangi qurilmadan foydalanayotganga o‘xshaysiz. Shifrlangan xabarlaringizga kirish uchun boshqa qurilma bilan tasdiqlang." diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt index 5e97f4193da..c8e9072c6b2 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt @@ -9,11 +9,11 @@ package io.element.android.features.securebackup.impl.reset import android.app.Activity import android.os.Parcelable +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.window.DialogProperties import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner @@ -160,7 +160,7 @@ class ResetIdentityFlowNode @AssistedInject constructor( override fun View(modifier: Modifier) { // Workaround to get the current activity if (!this::activity.isInitialized) { - activity = LocalContext.current as Activity + activity = requireNotNull(LocalActivity.current) } val startResetState by resetIdentityFlowManager.currentHandleFlow.collectAsState() diff --git a/features/securebackup/impl/src/main/res/values-hu/translations.xml b/features/securebackup/impl/src/main/res/values-hu/translations.xml index f6552348643..92212a40861 100644 --- a/features/securebackup/impl/src/main/res/values-hu/translations.xml +++ b/features/securebackup/impl/src/main/res/values-hu/translations.xml @@ -25,7 +25,7 @@ "Elveszíti meglévő üzenetelőzményeit" "Újból ellenőriznie kell az összes meglévő eszközét és csevegőpartnerét" "Csak akkor állítsa vissza a személyazonosságát, ha nem fér hozzá másik bejelentkezett eszközhöz, és elvesztette a helyreállítási kulcsot." - "Állítsa vissza a személyazonosságát, ha más módon nem tudja megerősíteni" + "Állítsa alaphelyzetbe a személyazonosságát, ha más módon nem tudja megerősíteni" "Kikapcsolás" "Ha kijelentkezik az összes eszközéről, akkor elveszti a titkosított üzeneteit." "Biztos, hogy kikapcsolja a biztonsági mentéseket?" diff --git a/features/securebackup/impl/src/main/res/values-sv/translations.xml b/features/securebackup/impl/src/main/res/values-sv/translations.xml index 785e023bc53..501182b7aa3 100644 --- a/features/securebackup/impl/src/main/res/values-sv/translations.xml +++ b/features/securebackup/impl/src/main/res/values-sv/translations.xml @@ -4,7 +4,11 @@ "Slå på säkerhetskopiering" "Lagra din kryptografiska identitet och dina meddelandenycklar säkert på servern. Detta gör att du kan se din meddelandehistorik på alla nya enheter. %1$s." "Nyckellagring" + "Nyckellagring måste vara aktiverat för att konfigurera återställning." + "Ladda upp nycklar från den här enheten" + "Tillåt lagring av nycklar" "Byt återställningsnyckel" + "Återställ din kryptografiska identitet och meddelandehistorik med en återställningsnyckel om du har tappat bort alla dina befintliga enheter." "Ange återställningsnyckel" "Din nyckellagring är för närvarande osynkroniserad." "Ställ in återställning" @@ -42,6 +46,7 @@ "Ange …" "Blivit av med din återställningsnyckel?" "Återställningsnyckel bekräftad" + "Ange din återställningsnyckel" "Kopierade återställningsnyckel" "Genererar …" "Spara återställningsnyckeln" diff --git a/features/securebackup/impl/src/main/res/values-tr/translations.xml b/features/securebackup/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..b3a2acc0e90 --- /dev/null +++ b/features/securebackup/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,70 @@ + + + "Anahtar depolamasını sil" + "Yedeklemeyi aç" + "Kriptografik kimliğinizi ve mesaj anahtarlarınızı sunucuda güvenli bir şekilde saklayın. Bu, mesaj geçmişinizi herhangi bir yeni cihazda görüntülemenize olanak tanır. %1$s." + "Anahtar Depolama" + "Kurtarmayı ayarlamak için anahtar depolama alanı açık olmalıdır." + "Anahtarları bu cihazdan yükle" + "Anahtar depolamaya izin ver" + "Kurtarma anahtarını değiştir" + "Mevcut tüm cihazlarınızı kaybettiyseniz, kurtarma anahtarıyla şifreleme kimliğinizi ve mesaj geçmişinizi kurtarın." + "Kurtarma anahtarını girin" + "Anahtar depolama alanınız şu anda senkronize değil." + "Kurtarmayı ayarlayın" + "Tüm cihazlarınızı kaybettiğinizde veya %1$s adresinden çıkış yaptığınızda şifrelenmiş mesajlarınıza her yerden erişin." + "Masaüstü cihazında aç %1$s" + "Hesabınızda tekrar oturum açın" + "Cihazınızı doğrulamanız istendiğinde %1$s öğesini seçin" + "\"Tümünü sıfırla\"" + "Yeni bir kurtarma anahtarı oluşturmak için talimatları izleyin" + "Yeni kurtarma anahtarınızı bir parola yöneticisine veya şifreli bir nota kaydedin" + "Hesabınızın şifrelemesini başka bir cihaz kullanarak sıfırlayın" + "Sıfırlamaya devam et" + "Hesap bilgileriniz, kişileriniz, tercihleriniz ve sohbet listeniz saklanacaktır" + "Yalnızca sunucuda depolanan mesaj geçmişlerini kaybedeceksiniz" + "Mevcut tüm cihazlarınızı ve kişilerinizi tekrar doğrulamanız gerekecek" + "Kimliğinizi yalnızca oturum açtığınız başka bir cihaza erişiminiz yoksa ve kurtarma anahtarınızı kaybettiyseniz sıfırlayın." + "Onaylayamıyor musunuz? Kimliğinizi sıfırlamanız gerekecek." + "Kapat" + "Tüm cihazlardan çıkış yaparsanız şifrelenmiş mesajlarınızı kaybedersiniz." + "Yedeklemeyi kapatmak istediğinizden emin misiniz?" + "Anahtar depolamanın silinmesi kriptografik kimliğinizi ve mesaj anahtarlarınızı sunucudan kaldıracak ve aşağıdaki güvenlik özelliklerini kapatacaktır:" + "Yeni cihazlarda şifrelenmiş mesaj geçmişine sahip olmayacaksınız" + "%1$s adresinden her yerde oturumunuzu kapatırsanız şifrelenmiş mesajlarınıza erişiminizi kaybedersiniz" + "Anahtar depolamayı kapatmak ve silmek istediğinizden emin misiniz?" + "Mevcut kurtarma anahtarınızı kaybettiyseniz yeni bir kurtarma anahtarı alın. Kurtarma anahtarınızı değiştirdikten sonra eski anahtarınız artık çalışmayacaktır." + "Yeni bir kurtarma anahtarı oluştur" + "Bunu kimseyle paylaşmayın!" + "Kurtarma anahtarı değiştirildi" + "Kurtarma anahtarını değiştir?" + "Yeni kurtarma anahtarı oluştur" + "Bu ekranı kimsenin göremediğinden emin olun!" + "Anahtar depolama alanınıza erişimi onaylamak için lütfen tekrar deneyin." + "Yanlış kurtarma anahtarı" + "Bir güvenlik anahtarınız veya güvenlik ifadeniz varsa, bu da işe yarayacaktır." + "Gir…" + "Kurtarma anahtarınızı mı kaybettiniz?" + "Kurtarma anahtarı onaylandı" + "Kurtarma anahtarınızı girin" + "Kurtarma anahtarı kopyalandı" + "Oluşturuluyor…" + "Kurtarma anahtarını kaydet" + "Bu kurtarma anahtarını şifre yöneticisi, şifreli not veya fiziksel kasa gibi güvenli bir yere kaydedin." + "Kurtarma anahtarını kopyalamak için dokunun" + "Kurtarma anahtarınızı güvenli bir yere kaydedin" + "Bu adımdan sonra yeni kurtarma anahtarınıza erişemeyeceksiniz." + "Kurtarma anahtarınızı kaydettiniz mi?" + "Anahtar depolama alanınız bir kurtarma anahtarıyla korunmaktadır. Kurulumdan sonra yeni bir kurtarma anahtarına ihtiyacınız olursa, \"Kurtarma anahtarını değiştir\"i seçerek yeniden oluşturabilirsiniz." + "Kurtarma anahtarınızı oluşturun" + "Bunu kimseyle paylaşmayın!" + "Kurtarma kurulumu başarılı" + "Kurtarmayı ayarlayın" + "Evet, şimdi sıfırla" + "Bu işlem geri alınamaz." + "Kimliğinizi sıfırlamak istediğinizden emin misiniz?" + "Bilinmeyen bir hata oluştu. Lütfen hesap şifrenizin doğru olup olmadığını kontrol edin ve tekrar deneyin." + "Gir…" + "Kimliğinizi sıfırlamak istediğinizi onaylayın." + "Devam etmek için hesap şifrenizi girin" + diff --git a/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootStateTest.kt b/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootStateTest.kt new file mode 100644 index 00000000000..1e4f58a84a6 --- /dev/null +++ b/features/securebackup/impl/src/test/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootStateTest.kt @@ -0,0 +1,63 @@ +/* + * 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.features.securebackup.impl.root + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.encryption.BackupState +import io.element.android.libraries.matrix.test.AN_EXCEPTION +import org.junit.Test + +class SecureBackupRootStateTest { + @Test + fun `isKeyStorageEnabled should be true for all these backup states`() { + listOf( + BackupState.CREATING, + BackupState.ENABLING, + BackupState.RESUMING, + BackupState.DOWNLOADING, + BackupState.ENABLED, + ).forEach { backupState -> + assertThat(aSecureBackupRootState(backupState = backupState).isKeyStorageEnabled).isTrue() + } + } + + @Test + fun `isKeyStorageEnabled should be false for all these backup states`() { + listOf( + BackupState.WAITING_FOR_SYNC, + BackupState.DISABLING, + ).forEach { backupState -> + assertThat(aSecureBackupRootState(backupState = backupState).isKeyStorageEnabled).isFalse() + } + } + + @Test + fun `isKeyStorageEnabled should have value depending on doesBackupExistOnServer when state is UNKNOWN`() { + assertThat( + aSecureBackupRootState( + backupState = BackupState.UNKNOWN, + doesBackupExistOnServer = AsyncData.Success(true), + ).isKeyStorageEnabled + ).isTrue() + + listOf( + AsyncData.Uninitialized, + AsyncData.Loading(), + AsyncData.Failure(AN_EXCEPTION), + AsyncData.Success(false), + ).forEach { doesBackupExistOnServer -> + assertThat( + aSecureBackupRootState( + backupState = BackupState.UNKNOWN, + doesBackupExistOnServer = doesBackupExistOnServer, + ).isKeyStorageEnabled + ).isFalse() + } + } +} diff --git a/features/signedout/impl/src/main/res/values-pt/translations.xml b/features/signedout/impl/src/main/res/values-pt/translations.xml index d7e6ad89484..95f0c980b5c 100644 --- a/features/signedout/impl/src/main/res/values-pt/translations.xml +++ b/features/signedout/impl/src/main/res/values-pt/translations.xml @@ -1,7 +1,7 @@ "Alteraste a tua senha noutra sessão" - "Apagaste esta sessão a partir de outra" + "Eliminaste esta sessão a partir de outra" "O administrador do teu servidor invalidou o teu acesso" "A tua sessão pode ter sido terminada por um dos motivos indicados abaixo. Inicia sessão novamente para continuares a utilizar a %s." "Não tens sessão iniciada" diff --git a/features/signedout/impl/src/main/res/values-tr/translations.xml b/features/signedout/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..0da098f8229 --- /dev/null +++ b/features/signedout/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,8 @@ + + + "Başka bir oturumda şifrenizi değiştirdiniz" + "Oturumu başka bir oturumdan sildiniz" + "Sunucunuzun yöneticisi erişiminizi geçersiz kıldı" + "Aşağıda listelenen nedenlerden biri nedeniyle oturumunuz kapatılmış olabilir. %s kullanmaya devam etmek için lütfen tekrar oturum açın." + "Oturumunuz kapatıldı" + diff --git a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt index 1a59e43fc6c..c8755aac56c 100644 --- a/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt +++ b/features/userprofile/shared/src/main/kotlin/io/element/android/features/userprofile/shared/UserProfileHeaderSection.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -72,7 +71,7 @@ fun UserProfileHeaderSection( Text( text = userId.value, style = ElementTheme.typography.fontBodyLgRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, textAlign = TextAlign.Center, ) if (isUserVerified.dataOrNull() == true) { diff --git a/features/userprofile/shared/src/main/res/values-tr/translations.xml b/features/userprofile/shared/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..9f80d33836a --- /dev/null +++ b/features/userprofile/shared/src/main/res/values-tr/translations.xml @@ -0,0 +1,19 @@ + + + "Engelle" + "Engellenen kullanıcılar size mesaj gönderemez ve tüm mesajları gizlenir. İstediğiniz zaman engellemelerini kaldırabilirsiniz." + "Kullanıcıyı engelle" + "Engellemeyi kaldır" + "Onlardan gelen tüm mesajları tekrar görebileceksiniz." + "Kullanıcının engelini kaldır" + "Engelle" + "Engellenen kullanıcılar size mesaj gönderemez ve tüm mesajları gizlenir. İstediğiniz zaman engellemelerini kaldırabilirsiniz." + "Kullanıcıyı engelle" + "Profil" + "Engellemeyi kaldır" + "Onlardan gelen tüm mesajları tekrar görebileceksiniz." + "Kullanıcının engelini kaldır" + "Bu kullanıcıyı doğrulamak için web uygulamasını kullan." + "Doğrula %1$s" + "Sohbet başlatmaya çalışırken bir hata oluştu" + diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/VerifySelfSessionNode.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/VerifySelfSessionNode.kt index bf7afffaadb..f58d22619e7 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/VerifySelfSessionNode.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/VerifySelfSessionNode.kt @@ -8,9 +8,9 @@ package io.element.android.features.verifysession.impl.outgoing import android.app.Activity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin @@ -45,7 +45,7 @@ class VerifySelfSessionNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { val state = presenter.present() - val activity = LocalContext.current as Activity + val activity = requireNotNull(LocalActivity.current) val isDark = ElementTheme.isLightTheme.not() VerifySelfSessionView( state = state, diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/ui/VerificationContentVerifying.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/ui/VerificationContentVerifying.kt index 4484c9c7081..12775cd2e02 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/ui/VerificationContentVerifying.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/ui/VerificationContentVerifying.kt @@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.widthIn -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -49,7 +48,7 @@ internal fun VerificationContentVerifying( modifier = Modifier.fillMaxWidth(), text = text, style = ElementTheme.typography.fontHeadingLgBold, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, textAlign = TextAlign.Center, ) } @@ -86,7 +85,7 @@ private fun EmojiItemView(emoji: VerificationEmoji, modifier: Modifier = Modifie Text( text = stringResource(id = emojiResource.nameRes), style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, ) diff --git a/features/verifysession/impl/src/main/res/values-be/translations.xml b/features/verifysession/impl/src/main/res/values-be/translations.xml index da894a2ddb4..c48da7e8d0a 100644 --- a/features/verifysession/impl/src/main/res/values-be/translations.xml +++ b/features/verifysession/impl/src/main/res/values-be/translations.xml @@ -24,6 +24,7 @@ "Чаканне супадзення" "Параўнайце ўнікальны набор эмодзі." "Параўнайце ўнікальныя эмодзі, пераканаўшыся, што яны размешчаны ў тым жа парадку." + "Прылада праверана" "Яны не супадаюць" "Яны супадаюць" "Для працягу працы прыміце запыт на запуск працэсу праверкі ў іншым сеансе." diff --git a/features/verifysession/impl/src/main/res/values-cs/translations.xml b/features/verifysession/impl/src/main/res/values-cs/translations.xml index 30e43eadc99..9b59cb20418 100644 --- a/features/verifysession/impl/src/main/res/values-cs/translations.xml +++ b/features/verifysession/impl/src/main/res/values-cs/translations.xml @@ -13,9 +13,11 @@ "Něco není v pořádku. Buď vypršel časový limit požadavku, nebo byl požadavek zamítnut." "Zkontrolujte, zda se níže uvedené emotikony shodují s emotikony zobrazenými na jiné relaci." "Porovnání emotikonů" + "Zkontrolujte, zda se níže uvedené emotikony shodují s emotikony zobrazenými v zařízení druhého uživatele." "Potvrďte, že níže uvedená čísla odpovídají číslům zobrazeným na vaší druhé relaci." "Porovnejte čísla" "Vaše nová relace je nyní ověřena. Má přístup k vašim zašifrovaným zprávám a ostatní uživatelé ji uvidí jako důvěryhodnou." + "Nyní můžete důvěřovat identitě tohoto uživatele při odesílání nebo přijímání zpráv." "Zadejte klíč pro obnovení" "Buď vypršel časový limit požadavku, požadavek byl zamítnut, nebo došlo k nesouladu ověření." "Pro přístup k historii zašifrovaných zpráv prokažte, že jste to vy." @@ -37,8 +39,14 @@ "Shodují se" "Před zahájením ověřování se ujistěte, že máte aplikaci otevřenou na druhém zařízení." "Otevřete aplikaci na jiném ověřeném zařízení" + "Pro větší bezpečnost ověřte tohoto uživatele porovnáním sady emotikonů na svých zařízeních. Proveďte to pomocí důvěryhodného způsobu komunikace." + "Ověřte tohoto uživatele?" + "Pro větší bezpečnost chce jiný uživatel ověřit vaši totožnost. Zobrazí se vám sada emotikonů k porovnání." "Na druhém zařízení byste měli vidět vyskakovací okno. Začněte s ověrením tam." "Spusťte ověření na druhém zařízení" + "Čekání na druhé zařízení" + "Čekání na druhého uživatele" + "Po přijetí budete moci pokračovat v ověřování." "Pro pokračování přijměte požadavek na zahájení ověření v jiné relaci." "Čekání na přijetí žádosti" "Odhlašování…" diff --git a/features/verifysession/impl/src/main/res/values-de/translations.xml b/features/verifysession/impl/src/main/res/values-de/translations.xml index 4534411033a..30979188e79 100644 --- a/features/verifysession/impl/src/main/res/values-de/translations.xml +++ b/features/verifysession/impl/src/main/res/values-de/translations.xml @@ -13,9 +13,11 @@ "Etwas scheint nicht zu stimmen. Entweder ist das Zeitlimit für die Anfrage abgelaufen oder die Anfrage wurde abgelehnt." "Vergewissere dich dass die folgenden Emojis mit denen in deiner anderen Session übereinstimmen." "Emojis vergleichen" + "Vergewissern Sie sich, dass die folgenden Emojis mit denen auf dem Gerät des anderen Benutzers übereinstimmen." "Bestätige, dass die Zahlen mit denen deiner anderen Sitzung übereinstimmen." "Vergleiche die Zahlen" "Deine neue Session ist nun verifiziert. Sie hat Zugriff auf deine verschlüsselten Nachrichten und wird von anderen Benutzern als vertrauenswürdig eingestuft." + "Jetzt können Sie der Identität dieses Benutzers vertrauen, wenn Sie Nachrichten senden oder empfangen." "Wiederherstellungsschlüssel eingeben" "Entweder ist bei der Anfrage ein Timeout aufgetreten, oder die Anfrage wurde abgelehnt, oder es gab eine Nichtübereinstimmung bei der Überprüfung." "Beweise deine Identität, um auf deinen verschlüsselten Nachrichtenverlauf zuzugreifen." @@ -27,7 +29,7 @@ "Vergleiche die einzelnen Emojis und stelle sicher, dass sie in der gleichen Reihenfolge erscheinen." "Angemeldet" "Entweder ist bei der Anfrage ein Timeout aufgetreten, oder die Anfrage wurde abgelehnt, oder es gab eine Nichtübereinstimmung bei der Überprüfung." - "Überprüfung fehlgeschlagen" + "Verifizierung fehlgeschlagen" "Fahren Sie nur fort, falls Sie für diese Überprüfung verantwortlich sind.." "Verifizieren Sie das andere Gerät, um die Sicherheit Ihres Nachrichtenverlaufs zu gewährleisten." "Jetzt können Sie gesichert Nachrichten auf Ihrem anderen Gerät lesen oder senden." @@ -37,8 +39,14 @@ "Sie stimmen überein" "Stellen Sie sicher, dass die App auf dem anderen Gerät geöffnet ist, bevor Sie die Überprüfung auf diesem Gerät aus starten." "Öffnen Sie die App auf einem anderen verifizierten Gerät" + "Für zusätzliche Sicherheit verifizieren Sie diesen Benutzer, indem Sie eine Reihe von Emojis auf Ihren Geräten vergleichen. Verwenden Sie dazu eine vertrauenswürdige Art der Kommunikation." + "Diesen Benutzer verifizieren?" + "Für zusätzliche Sicherheit möchte ein anderer Benutzer Ihre Identität überprüfen. Es wird Ihnen eine Reihe von Emojis zum Vergleich angezeigt." "Sie sollten ein Popup-Fenster auf dem anderen Gerät sehen. Starten Sie die Überprüfung von dort aus." "Starten Sie die Überprüfung auf dem anderen Gerät" + "Warten auf das andere Gerät" + "Warten auf den anderen Benutzer" + "Sobald Sie die Bestätigung akzeptiert haben, können Sie mit der Überprüfung fortfahren." "Akzeptiere die Anfrage, um den Verifizierungsprozess in deiner anderen Session zu starten, um fortzufahren." "Warten auf die Annahme der Anfrage" "Abmelden…" diff --git a/features/verifysession/impl/src/main/res/values-el/translations.xml b/features/verifysession/impl/src/main/res/values-el/translations.xml index 1cac842a7b0..06f3b254892 100644 --- a/features/verifysession/impl/src/main/res/values-el/translations.xml +++ b/features/verifysession/impl/src/main/res/values-el/translations.xml @@ -31,7 +31,7 @@ "Συνέχισε μόνο εάν ξεκίνησες εσύ αυτήν την επαλήθευση." "Επαλήθευσε την άλλη συσκευή για να διατηρήσεις το ιστορικό μηνυμάτων σου ασφαλές." "Τώρα μπορείς να διαβάσεις ή να στείλεις μηνύματα με ασφάλεια στην άλλη συσκευή σου." - "Η συσκευή επαληθεύτηκε" + "Επαληθευμένη συσκευή" "Ζητήθηκε επαλήθευση" "Δεν ταιριάζουν" "Ταιριάζουν" diff --git a/features/verifysession/impl/src/main/res/values-es/translations.xml b/features/verifysession/impl/src/main/res/values-es/translations.xml index 9c43fe28e89..9dd9ec38b57 100644 --- a/features/verifysession/impl/src/main/res/values-es/translations.xml +++ b/features/verifysession/impl/src/main/res/values-es/translations.xml @@ -20,6 +20,7 @@ "Esperando a que coincida" "Compara un conjunto único de emojis." "Compara los emoji, asegurándote de que aparecen en el mismo orden." + "Dispositivo verificado" "No coinciden" "Coinciden" "Acepta la solicitud para iniciar el proceso de verificación en tu otra sesión para continuar." diff --git a/features/verifysession/impl/src/main/res/values-et/translations.xml b/features/verifysession/impl/src/main/res/values-et/translations.xml index dc9367bd021..fa2a5733da4 100644 --- a/features/verifysession/impl/src/main/res/values-et/translations.xml +++ b/features/verifysession/impl/src/main/res/values-et/translations.xml @@ -13,9 +13,11 @@ "Olukord pole päris õige. Päring kas aegus või teine osapool keeldus päringule vastamast." "Kinnita, et kõik järgnevalt kuvatud emojid on täpselt samad, mida sa näed oma teises sessioonis." "Võrdle emojisid" + "Palun kinnita, et allpool näidatud emojid vastavad täpselt neile, mida kuvatakse teise kasutaja seadmes." "Kinnita, et kõik järgnevalt kuvatud numbrid on täpselt samad, mida sa näed oma teises sessioonis." "Võrdle numbreid" "Sinu uus sessioon on nüüd verifitseeritud. Sellel sessioonil on nüüd ligipääs sinu krüptitud sõnumitele ja teised osapooled näevad teda usaldusväärsena." + "Nüüd sa võid sõnumite vastuvõtmisel ja saatmisel selle kasutaja identiteeti usaldada." "Sisesta taastevõti" "Kas verifitseerimine aegus, teine osapool keeldus vastamast või tekkis vastuste mittevastavus." "Saamaks ligipääsu krüptitud sõnumite ajaloole tõesta et tegemist on sinuga." @@ -37,8 +39,14 @@ "Nad klapivad omavahel" "Enne kui alustad siin verifitseerimist, palun ava rakendus teises seadmes." "Ava rakendus teises verifitseeritud seadmes" + "Lisaturvalisuse nimel verifitseeri seee kasutaja, võrreldes oma seadmetes olevaid emojisid. Tee seda, kasutades usaldusväärset suhtlusviisi." + "Kas verifitseerime selle kasutaja?" + "Lisaturvalisuse nimel soovib teine kasutaja sinu identiteeti verifitseerida. Järgmiseks näed sa emojisid, mida peate omavahel võrdlema." "Sa peaksid teises seadmes nägema hüpikakent. Palun alusta sealt verifitseerimist." "Alusta verifitseerimist teises seadmes" + "Ootame teise seadme järgi" + "Ootame teise kasutaja järgi" + "Kui oled nõustunud, siis saad sa verifitseerimist jätkata." "Jätkamaks nõustu verifitseerimisprotsessi alustamisega oma teises sessioonis." "Ootame nõustumist verifitseerimispäringuga" "Logime välja…" diff --git a/features/verifysession/impl/src/main/res/values-fa/translations.xml b/features/verifysession/impl/src/main/res/values-fa/translations.xml index 3899f7acff9..14936c41a99 100644 --- a/features/verifysession/impl/src/main/res/values-fa/translations.xml +++ b/features/verifysession/impl/src/main/res/values-fa/translations.xml @@ -20,6 +20,7 @@ "منتظر تطابق" "مقایسهٔ مجموعه‌ای یکتا از شکلک‌ها." "شکلک‌ها را مقایسه کنید، از ترتیب نمایش آنان نیز مطمئن شوید." + "افزاره تأیید شده" "مطابق نیستند" "مطابقند" "منظر پذیرش درخواست" diff --git a/features/verifysession/impl/src/main/res/values-fr/translations.xml b/features/verifysession/impl/src/main/res/values-fr/translations.xml index bd3f194e4b8..2ec52d94fc3 100644 --- a/features/verifysession/impl/src/main/res/values-fr/translations.xml +++ b/features/verifysession/impl/src/main/res/values-fr/translations.xml @@ -13,9 +13,11 @@ "Quelque chose ne va pas. Soit la demande a expiré, soit elle a été refusée." "Confirmez que les emojis ci-dessous correspondent à ceux affichés sur votre autre session." "Comparez les émojis" + "Vérifiez que les émojis ci-dessous correspondent à ceux affichés sur l’appareil de l’autre utilisateur." "Confirmez que les nombres ci-dessous correspondent à ceux affichés sur votre autre session." "Comparez les nombres" "Votre nouvelle session est désormais vérifiée. Elle a accès à vos messages chiffrés et les autres utilisateurs la verront identifiée comme fiable." + "Vous pouvez désormais être sûr(e) de l’identité de cet utilisateur lors de l’envoi ou de la réception de messages." "Utiliser la clé de récupération" "Soit la demande a expiré, soit elle a été refusée, soit il y a eu une non-concordance de vérification." "Prouvez qu’il s’agit bien de vous pour accéder à l’historique de vos messages chiffrés." @@ -31,14 +33,20 @@ "Continuez uniquement si c’est vous qui avez commencé cette vérification." "Vérifiez l’autre appareil pour sécuriser l’historique de vos messages." "Vous pouvez désormais lire ou envoyer des messages en toute sécurité sur votre autre appareil." - "Appareil vérifié" + "Session vérifiée" "Vérification demandée" "Ils ne correspondent pas" "Ils correspondent" "Assurez-vous que l’application est ouverte sur un autre appareil avant de commencer la vérification." "Ouvrez l’application sur un autre appareil vérifié" + "Pour plus de sécurité, vérifiez cet utilisateur en comparant des émojis sur vos appareils. Pour ce faire, utilisez un moyen de communication fiable." + "Vérifier cet utilisateur ?" + "Pour plus de sécurité, un autre utilisateur souhaite vérifier votre identité. Des émojis à comparer vous seront présentés." "Vous devriez voir une alerte sur l’autre appareil. Démarrez la vérification à partir de là dès maintenant." "Démarrer la vérification sur l’autre appareil" + "En attente de l’autre appareil" + "En attente de l’autre utilisateur" + "Une fois accepté, vous pourrez poursuivre la vérification." "Pour continuer, acceptez la demande de lancement de la procédure de vérification dans votre autre session." "En attente d’acceptation de la demande" "Déconnexion…" diff --git a/features/verifysession/impl/src/main/res/values-hu/translations.xml b/features/verifysession/impl/src/main/res/values-hu/translations.xml index 7e786dfc6c6..56abe18d674 100644 --- a/features/verifysession/impl/src/main/res/values-hu/translations.xml +++ b/features/verifysession/impl/src/main/res/values-hu/translations.xml @@ -13,16 +13,18 @@ "Valami hibásnak tűnik. A kérés vagy időtúllépésre futott, vagy elutasították." "Erősítse meg, hogy a lenti emodzsik egyeznek-e a másik munkamenetben megjelenítettekkel." "Emodzsik összehasonlítása" + "Ellenőrizze, hogy az alábbi emodzsik megegyeznek-e a másik felhasználó eszközén látható emodzsikkal." "Ellenőrizze, hogy az alábbi számok megegyeznek-e a másik munkamenetben feltüntetett számokkal." "Számok összehasonlítása" "Az új munkamenete most már ellenőrizve van. Eléri a titkosított üzeneteit, és a többi felhasználó is megbízhatónak fogja látni." + "Mostantól megbízhat a felhasználó személyazonosságában, amikor üzeneteket küld vagy fogad." "Adja meg a helyreállítási kulcsot" "A kérés túllépte az időkorlátot, el lett utasítva, vagy ellenőrzési eltérés történt." "Bizonyítsa, hogy valóban Ön az, hogy elérje a titkosított üzeneteinek előzményeit." "Meglévő munkamenet megnyitása" "Ellenőrzés újrapróbálása" "Kész vagyok" - "Várakozás az egyezésre" + "Várakozás az egyezésre…" "Egyedi emodzsik összehasonlítása." "Hasonlítsa össze az egyedi emodzsikat, meggyőződve arról, hogy azonos a sorrendjük." "Bejelentkezve" @@ -37,8 +39,14 @@ "Megegyeznek" "Győződjön meg róla, hogy az alkalmazás nyitva van a másik eszközön, mielőtt innen elindítja az ellenőrzést." "Nyissa meg az alkalmazást egy másik ellenőrzött eszközön" + "A fokozott biztonság érdekében ellenőrizze ezt a felhasználót az eszközökön megjelenő emodzsik összehasonlításával. Ehhez használjon megbízható kommunikációs csatornát." + "Ellenőrzi ezt a felhasználót?" + "A további biztonság érdekében egy másik felhasználó ellenőrizni szeretné személyazonosságát. Meg fog jelenni egy sor emodzsi, melyeket össze kell majd hasonlítania." "A másik eszközön egy felugró ablaknak kell megjelennie. Kezdje el az ellenőrzést onnan." "Ellenőrzés megkezdése a másik eszközön" + "Várakozás a másik eszközre" + "Várakozás a másik felhasználóra" + "Az elfogadása után folytathatja az ellenőrzést." "A folytatáshoz fogadja el az ellenőrzési folyamat indítási kérését a másik munkamenetében." "Várakozás a kérés elfogadására" "Kijelentkezés…" diff --git a/features/verifysession/impl/src/main/res/values-in/translations.xml b/features/verifysession/impl/src/main/res/values-in/translations.xml index c19ebe602c9..b1dbf1f6a0d 100644 --- a/features/verifysession/impl/src/main/res/values-in/translations.xml +++ b/features/verifysession/impl/src/main/res/values-in/translations.xml @@ -31,7 +31,7 @@ "Lanjutkan hanya jika Anda memulai verifikasi ini." "Verifikasi perangkat lain untuk menjaga riwayat pesan Anda tetap aman." "Sekarang Anda dapat membaca atau mengirim pesan dengan aman di perangkat Anda yang lain." - "Perangkat diverifikasi" + "Perangkat terverifikasi" "Verifikasi diminta" "Mereka tidak cocok" "Mereka cocok" diff --git a/features/verifysession/impl/src/main/res/values-nb/translations.xml b/features/verifysession/impl/src/main/res/values-nb/translations.xml index da4264871ef..8b2e5fad702 100644 --- a/features/verifysession/impl/src/main/res/values-nb/translations.xml +++ b/features/verifysession/impl/src/main/res/values-nb/translations.xml @@ -27,7 +27,6 @@ "Sammenlign de unike emojiene, og sørg for at de vises i samme rekkefølge." "Logget inn" "Enten ble forespørselen tidsavbrutt, forespørselen ble avslått eller det var en feil i verifiseringen." - "Verifisering mislyktes" "Bare fortsett hvis du startet denne verifiseringen." "Bekreft den andre enheten for å holde meldingsloggen din sikker." "Nå kan du lese eller sende meldinger sikkert på den andre enheten din." diff --git a/features/verifysession/impl/src/main/res/values-nl/translations.xml b/features/verifysession/impl/src/main/res/values-nl/translations.xml index 20e588e2dbf..6e4c7644ee1 100644 --- a/features/verifysession/impl/src/main/res/values-nl/translations.xml +++ b/features/verifysession/impl/src/main/res/values-nl/translations.xml @@ -24,6 +24,7 @@ "Wachten om te vergelijken" "Vergelijk een unieke combinatie van emoji\'s." "Vergelijk de unieke emoji\'s, ze dienen in dezelfde volgorde te worden weergegeven." + "Apparaat geverifieerd" "Ze komen niet overeen" "Ze komen overeen" "Accepteer het verzoek tot verificatie in je andere sessie om door te gaan." diff --git a/features/verifysession/impl/src/main/res/values-pl/translations.xml b/features/verifysession/impl/src/main/res/values-pl/translations.xml index 022a07d6a92..d5cd461b8df 100644 --- a/features/verifysession/impl/src/main/res/values-pl/translations.xml +++ b/features/verifysession/impl/src/main/res/values-pl/translations.xml @@ -13,9 +13,11 @@ "Coś tu nie gra. Albo upłynął limit czasu, albo żądanie zostało odrzucone." "Upewnij się, że emoji poniżej pasują do tych pokazanych na innej sesji." "Porównaj emoji" + "Upewnij się, że emoji poniżej odpowiadają tym na urządzeniu drugiego użytkownika." "Upewnij się, że liczby poniżej pasują do tych wyświetlanych na innej sesji." "Porównaj liczby" "Twoja nowa sesja jest teraz zweryfikowana. Ma ona dostęp do Twoich zaszyfrowanych wiadomości, a inni użytkownicy będą widzieć ją jako zaufaną." + "Teraz możesz zaufać tożsamości tego użytkownika podczas wysyłania lub odbierania wiadomości." "Wprowadź klucz przywracania" "Albo upłynął limit czasu żądania, albo żądanie zostało odrzucone, albo wystąpił błąd weryfikacji." "Udowodnij, że to ty, aby uzyskać dostęp do historii zaszyfrowanych wiadomości." @@ -37,8 +39,14 @@ "Pasują do siebie" "Upewnij się, że aplikacja jest otwarta na drugim urządzeniu przed rozpoczęciem weryfikacji." "Otwórz aplikację na drugim zweryfikowanym urządzeniu" + "Dla dodatkowej ochrony, zweryfikuj tego użytkownika, porównując zestaw emoji na obu urządzeniach. Zrób to, korzystając z zaufanej metody komunikacji." + "Zweryfikować tego użytkownika?" + "Dla dodatkowej ochrony, inny użytkownik chce zweryfikować Twoją tożsamość. Pojawi się unikalny zestaw emoji do porównania." "Powinno wyskoczyć okno na drugim urządzeniu. Rozpocznij tam weryfikację." "Rozpocznij weryfikację na drugim urządzeniu" + "Oczekiwanie na drugie urządzenie" + "Oczekiwanie na drugiego użytkownika" + "Po zaakceptowaniu będziesz mógł kontynuować weryfikację." "Zaakceptuj prośbę o rozpoczęcie procesu weryfikacji w innej sesji, aby kontynuować." "Oczekiwanie na zaakceptowanie prośby" "Wylogowywanie…" diff --git a/features/verifysession/impl/src/main/res/values-pt-rBR/translations.xml b/features/verifysession/impl/src/main/res/values-pt-rBR/translations.xml index 9874cfa2b30..c06776f25f5 100644 --- a/features/verifysession/impl/src/main/res/values-pt-rBR/translations.xml +++ b/features/verifysession/impl/src/main/res/values-pt-rBR/translations.xml @@ -17,6 +17,7 @@ "Esperando para combinar" "Compare um conjunto único de emojis." "Compare os emojis únicos, garantindo que apareçam na mesma ordem." + "Dispositivo verificado" "Eles não combinam" "Eles combinam" "Aceite a solicitação para iniciar o processo de verificação em sua outra sessão para continuar." diff --git a/features/verifysession/impl/src/main/res/values-pt/translations.xml b/features/verifysession/impl/src/main/res/values-pt/translations.xml index 967c6df1c99..13860912547 100644 --- a/features/verifysession/impl/src/main/res/values-pt/translations.xml +++ b/features/verifysession/impl/src/main/res/values-pt/translations.xml @@ -13,9 +13,11 @@ "Algo não bateu certo. O pedido ou demorou demasiado tempo ou foi rejeitado." "Confirma se os emojis abaixo correspondem aos apresentados na tua outra sessão." "Compara os emojis" + "Confirma se os emojis abaixo correspondem aos apresentados no dispositivo do outro utilizador." "Confirma se os números abaixo correspondem aos números apresentados na tua outra sessão." "Comparar números" "A tua nova sessão está agora verificada, pelo que tem acesso às tuas mensagens cifradas e os outros utilizadores vão vê-la como de confiança." + "Agora podes confiar na identidade deste utilizador quando envias ou recebes mensagens." "Insere a chave de recuperação" "O pedido expirou, o pedido foi recusado ou houve um erro de verificação." "Prova que és tu para acederes ao teu histórico de mensagens cifradas." @@ -37,8 +39,14 @@ "Correspondem" "Certifica-te de que tens a aplicação aberta no outro dispositivo antes de iniciares a verificação aqui." "Abre a aplicação noutro dispositivo verificado" + "Para maior segurança, verifica este utilizador comparando um conjunto de emojis nos teus dispositivos. Faz isto utilizando uma forma de comunicação de confiança." + "Verificar este utilizador?" + "Para maior segurança, outro utilizador quer verificar a tua identidade. Ser-te-á mostrado um conjunto de emojis para comparares." "Deves ver uma notificação no outro dispositivo. Inicia a verificação a partir daí." "Inicia a verificação no outro dispositivo" + "À espera do outro dispositivo" + "A espera do outro utilizador" + "Uma vez aceite, poderás continuar com a verificação." "Para continuar, aceita o pedido de verificação na tua outra sessão." "À aguardar a aceitação do pedido" "A terminar sessão…" diff --git a/features/verifysession/impl/src/main/res/values-sk/translations.xml b/features/verifysession/impl/src/main/res/values-sk/translations.xml index 9612618b586..cc5f26e85bb 100644 --- a/features/verifysession/impl/src/main/res/values-sk/translations.xml +++ b/features/verifysession/impl/src/main/res/values-sk/translations.xml @@ -13,9 +13,11 @@ "Zdá sa, že niečo nie je v poriadku. Časový limit žiadosti vypršal alebo bola žiadosť zamietnutá." "Skontrolujte, či sa emotikony uvedené nižšie zhodujú s emotikonmi zobrazenými vo vašej druhej relácii." "Porovnajte emotikony" + "Potvrďte, že emotikony uvedené nižšie zodpovedajú emotikonom zobrazeným na zariadení druhého používateľa." "Skontrolujte, či sa nižšie uvedené čísla zhodujú s číslami zobrazenými na vašej druhej relácii." "Porovnať čísla" "Vaša nová relácia je teraz overená. Má prístup k vašim zašifrovaným správam a ostatní používatelia ju budú vidieť ako dôveryhodnú." + "Teraz môžete dôverovať identite tohto používateľa pri odosielaní alebo prijímaní správ." "Zadajte kľúč na obnovenie" "Buď žiadosť vypršala, žiadosť bola zamietnutá, alebo došlo k nesúladu overovania." "Dokážte, že ste to vy, aby ste získali prístup k histórii vašich zašifrovaných správ." @@ -37,8 +39,14 @@ "Zhodujú sa" "Pred začatím overovania odtiaľto sa uistite, že máte aplikáciu otvorenú v inom zariadení." "Otvorte aplikáciu na inom overenom zariadení" + "Pre väčšiu bezpečnosť overte tohto používateľa porovnaním sady emotikonov vo vašich zariadeniach. Urobte to pomocou dôveryhodného spôsobu komunikácie." + "Overiť tohto používateľa?" + "Kvôli vyššej bezpečnosti chce druhý používateľ overiť vašu identitu. Zobrazí sa vám sada emotikonov na porovnanie." "Na druhom zariadení by sa malo zobraziť vyskakovacie okno. Začnite teraz overovanie odtiaľ." "Spustiť overovanie na druhom zariadení" + "Čaká sa na druhé zariadenie" + "Čaká sa na druhého používateľa" + "Po prijatí budete môcť pokračovať v overovaní." "Ak chcete pokračovať, prijmite žiadosť o spustenie procesu overenia vo vašej druhej relácii." "Čaká sa na prijatie žiadosti" "Prebieha odhlasovanie…" diff --git a/features/verifysession/impl/src/main/res/values-sv/translations.xml b/features/verifysession/impl/src/main/res/values-sv/translations.xml index f790ec399d6..f95acc7347e 100644 --- a/features/verifysession/impl/src/main/res/values-sv/translations.xml +++ b/features/verifysession/impl/src/main/res/values-sv/translations.xml @@ -17,6 +17,7 @@ "Jämför siffror" "Din nya session är nu verifierad. Den har tillgång till dina krypterade meddelanden, och andra användare kommer att se den som betrodd." "Ange återställningsnyckel" + "Antingen överskreds tidsgränsen för begäran, begäran nekades eller så fanns det ett matchningsfel för verifieringen." "Bevisa att det är du för att komma åt din krypterade meddelandehistorik." "Öppna en befintlig session" "Försök att verifiera igen" @@ -25,11 +26,19 @@ "Jämför en unik uppsättning emojis." "Jämför de unika emojierna och se till att de visas i samma ordning." "Inloggad" + "Antingen överskreds tidsgränsen för begäran, begäran nekades eller så fanns det ett matchningsfel för verifieringen." + "Verifiering misslyckades" "Fortsätt bara om du initierade denna verifiering." "Verifiera den andra enheten för att hålla din meddelandehistorik säker." + "Du kan nu läsa eller skicka meddelanden säkert på din andra enhet." + "Enhet verifierad" "Verifiering begärd" "De matchar inte" "De matchar" + "Se till att du har appen öppen på den andra enheten innan du startar verifieringen härifrån." + "Öppna appen på en annan verifierad enhet" + "Du bör se en popup på den andra enheten. Starta verifieringen därifrån nu." + "Starta verifieringen på den andra enheten" "Godkänn begäran om att starta verifieringsprocessen på din andra session för att fortsätta." "Väntar på att acceptera begäran" "Loggar ut …" diff --git a/features/verifysession/impl/src/main/res/values-tr/translations.xml b/features/verifysession/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..a045731bd4f --- /dev/null +++ b/features/verifysession/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,53 @@ + + + "Onaylayamıyor musunuz?" + "Yeni bir kurtarma anahtarı oluştur" + "Güvenli mesajlaşmayı ayarlamak için bu cihazı doğrulayın." + "Kimliğinizi doğrulayın" + "Başka bir cihaz kullan" + "Kurtarma anahtarı kullan" + "Artık mesajları güvenli bir şekilde okuyabilir veya gönderebilirsiniz ve sohbet ettiğiniz herkes de bu cihaza güvenebilir." + "Cihaz doğrulandı" + "Başka bir cihaz kullan" + "Diğer cihazda bekleniyor…" + "Bir şeyler doğru görünmüyor. İstek zaman aşımına uğradı veya istek reddedildi." + "Aşağıdaki emojilerin diğer oturumunuzda gösterilenlerle eşleştiğini onaylayın." + "Emojileri karşılaştırın" + "Aşağıdaki emojilerin diğer kullanıcının cihazında gösterilenlerle eşleştiğini onaylayın." + "Aşağıdaki sayıların diğer oturumunuzda gösterilen sayılarla eşleştiğini onaylayın." + "Sayıları karşılaştır" + "Yeni oturumunuz artık doğrulandı. Şifrelenmiş mesajlarınıza erişebilir ve diğer kullanıcılar oturumu güvenilir olarak görecektir." + "Artık mesaj gönderirken veya alırken bu kullanıcının kimliğine güvenebilirsiniz." + "Kurtarma anahtarını girin" + "İstek zaman aşımına uğradı, istek reddedildi veya bir doğrulama uyuşmazlığı vardı." + "Şifrelenmiş mesaj geçmişinize erişmek için siz olduğunuzu kanıtlayın." + "Mevcut bir oturumu aç" + "Doğrulamayı yeniden dene" + "Hazırım" + "Eşleşme bekleniyor…" + "Benzersiz bir emoji setini karşılaştır." + "Benzersiz emojileri karşılaştırın ve aynı sırayla göründüklerinden emin olun." + "Oturum açıldı" + "İstek zaman aşımına uğradı, istek reddedildi veya bir doğrulama uyuşmazlığı vardı." + "Doğrulama başarısız" + "Yalnızca bu doğrulamayı siz başlattıysanız devam edin." + "Mesaj geçmişinizi güvende tutmak için diğer cihazı doğrulayın." + "Artık diğer cihazınızda güvenli bir şekilde mesaj okuyabilir veya gönderebilirsiniz." + "Cihaz doğrulandı" + "Doğrulama talep edildi" + "Eşleşmiyorlar" + "Eşleşiyorlar" + "Buradan doğrulamaya başlamadan önce uygulamanın diğer cihazda açık olduğundan emin olun." + "Uygulamayı doğrulanmış başka bir cihazda açın" + "Daha fazla güvenlik için, cihazlarınızdaki bir dizi emojiyi karşılaştırarak bu kullanıcıyı doğrulayın. Bunu, iletişim kurmak için güvenilir bir yol kullanarak yapın." + "Bu kullanıcıyı doğrula?" + "Ekstra güvenlik için, başka bir kullanıcı kimliğinizi doğrulamak istiyor. Karşılaştırmanız için size bir dizi emoji gösterilecektir." + "Diğer cihazda bir açılır pencere görmelisiniz. Doğrulamayı şimdi oradan başlatın." + "Diğer cihazda doğrulamayı başlat" + "Diğer cihaz bekleniyor" + "Diğer kullanıcı bekleniyor" + "Kabul edildikten sonra doğrulama işlemine devam edebileceksiniz." + "Devam etmek için diğer oturumunuzda doğrulama işlemini başlatma isteğini kabul edin." + "İsteğin kabul edilmesi bekleniyor" + "Oturum kapatılıyor…" + diff --git a/features/verifysession/impl/src/main/res/values-uk/translations.xml b/features/verifysession/impl/src/main/res/values-uk/translations.xml index 773adf63189..45038bfe608 100644 --- a/features/verifysession/impl/src/main/res/values-uk/translations.xml +++ b/features/verifysession/impl/src/main/res/values-uk/translations.xml @@ -13,9 +13,11 @@ "Щось не так. Або час очікування запиту минув, або в запиті було відмовлено." "Переконайтеся, що емодзі нижче збігаються з тими, що відображаються під час іншого сеансу." "Порівняти емодзі" + "Переконайтеся, що наведені емоджі збігаються з тими, що показані на пристрої іншого користувача." "Переконайтеся, що наведені нижче цифри збігаються з тими, що показані під час вашого іншого сеансу." "Порівняйте цифри" "Ваш новий сеанс підтверджено. Він матиме доступ до ваших зашифрованих повідомлень, й інші користувачі вважатимуть його надійним." + "Тепер ви можете довіряти особистості цього користувача під час надсилання або отримання повідомлень." "Введіть ключ відновлення" "Або час очікування запиту минув, або запит було відхилено, або виникла розбіжність у верифікації." "Доведіть, що це ви, щоб отримати доступ до історії зашифрованих повідомлень." @@ -27,7 +29,7 @@ "Порівняйте унікальні емодзі, переконавшись, що вони показані в однаковому порядку." "Увійшов" "Або час очікування запиту минув, або запит було відхилено, або виникла розбіжність у верифікації." - "Не вдалося перевірити" + "Перевірка не вдалася" "Продовжуйте, лише якщо ви ініціювали цю перевірку." "Перевірте інший пристрій, щоб захистити історію повідомлень." "Тепер ви можете безпечно читати або надсилати повідомлення на іншому пристрої." @@ -37,8 +39,13 @@ "Вони збігаються" "Перш ніж починати перевірку звідси, переконайтеся, що програму відкрито на іншому пристрої." "Відкрийте додаток на іншому перевіреному пристрої" + "Верифікувати цього користувача?" + "Для додаткової безпеки інший користувач хоче верифікувати вашу особистість. Вам буде показано набір емоджі для порівняння." "Ви повинні побачити спливаюче вікно на іншому пристрої. Почніть перевірку звідти." "Почніть перевірку на іншому пристрої" + "Очікування іншого пристрою" + "Очікування іншого користувача" + "Після погодження ви зможете продовжити верифікацію." "Щоб продовжити, прийміть запит на початок процесу верифікації в іншому сеансі." "Очікування на прийняття запиту" "Вихід…" diff --git a/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml b/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml index 7eb21b9330b..82dc0acd354 100644 --- a/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml +++ b/features/verifysession/impl/src/main/res/values-zh-rTW/translations.xml @@ -27,11 +27,11 @@ "表情符號是唯一的,請相互比對,確認它們的排列順序是否相同。" "已登入" "請求逾時、請求被拒或是驗證不符。" - "驗證失敗" + "驗證失敗。" "僅當您啟動此驗證時才繼續。" "驗證其他裝置以保護您的訊息歷史紀錄安全。" "現在,您可以在其他裝置上安全地閱讀或傳送訊息。" - "已驗證裝置" + "裝置已驗證" "已請求驗證" "不一樣" "一樣" diff --git a/features/verifysession/impl/src/main/res/values/localazy.xml b/features/verifysession/impl/src/main/res/values/localazy.xml index db18590cbe2..df9e6284d5d 100644 --- a/features/verifysession/impl/src/main/res/values/localazy.xml +++ b/features/verifysession/impl/src/main/res/values/localazy.xml @@ -13,9 +13,11 @@ "Something doesn’t seem right. Either the request timed out or the request was denied." "Confirm that the emojis below match those shown on your other session." "Compare emojis" + "Confirm that the emojis below match those shown on the other user’s device." "Confirm that the numbers below match those shown on your other session." "Compare numbers" "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted." + "Now you can trust the identity of this user when sending or receiving messages." "Enter recovery key" "Either the request timed out, the request was denied, or there was a verification mismatch." "Prove it’s you in order to access your encrypted message history." @@ -37,8 +39,14 @@ "They match" "Make sure you have the app open in the other device before starting verification from here." "Open the app on another verified device" + "For extra security, verify this user by comparing a set of emojis on your devices. Do this by using a trusted way to communicate." + "Verify this user?" + "For extra security, another user wants to verify your identity. You’ll be shown a set of emojis to compare." "You should see a popup on the other device. Start the verification from there now." "Start verification on the other device" + "Waiting for the other device" + "Waiting for the other user" + "Once accepted you’ll be able to continue with the verification." "Accept the request to start the verification process in your other session to continue." "Waiting to accept request" "Signing out…" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 36d549c025d..f27a5b6397b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ [versions] # Project -android_gradle_plugin = "8.8.0" +android_gradle_plugin = "8.8.1" kotlin = "2.1.10" kotlinpoet = "2.0.0" ksp = "2.1.10-1.0.29" @@ -38,7 +38,7 @@ accompanist = "0.37.0" test_core = "1.6.1" # Jetbrain -datetime = "0.6.1" +datetime = "0.6.2" serialization_json = "1.8.0" #other @@ -47,7 +47,7 @@ showkase = "1.0.3" appyx = "1.6.0" sqldelight = "2.0.2" wysiwyg = "2.38.2" -telephoto = "0.14.0" +telephoto = "0.15.1" # Dependency analysis dependencyAnalysis = "2.8.0" @@ -77,7 +77,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.8.0" +google_firebase_bom = "com.google.firebase:firebase-bom:33.9.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" } @@ -173,7 +173,7 @@ jsoup = "org.jsoup:jsoup:1.18.3" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.0.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.77" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.78" 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" } @@ -187,7 +187,7 @@ vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" } statemachine = "com.freeletics.flowredux:compose:1.2.2" -maplibre = "org.maplibre.gl:android-sdk:11.8.0" +maplibre = "org.maplibre.gl:android-sdk:11.8.1" maplibre_ktx = "org.maplibre.gl:android-sdk-ktx-v7:3.0.2" maplibre_annotation = "org.maplibre.gl:android-plugin-annotation-v9:3.0.2" opusencoder = "io.element.android:opusencoder:1.1.0" @@ -195,7 +195,7 @@ zxing_cpp = "io.github.zxing-cpp:android:2.2.0" # Analytics posthog = "com.posthog:posthog-android:3.11.2" -sentry = "io.sentry:sentry-android:8.1.0" +sentry = "io.sentry:sentry-android:8.2.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" @@ -235,7 +235,7 @@ anvil = { id = "dev.zacsweers.anvil", version.ref = "anvil" } detekt = "io.gitlab.arturbosch.detekt:1.23.7" ktlint = "org.jlleitschuh.gradle.ktlint:12.1.2" dependencygraph = "com.savvasdalkitsis.module-dependency-graph:0.12" -dependencycheck = "org.owasp.dependencycheck:12.0.2" +dependencycheck = "org.owasp.dependencycheck:12.1.0" dependencyanalysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyAnalysis" } paparazzi = "app.cash.paparazzi:1.3.5" sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } diff --git a/libraries/androidutils/src/main/res/values-tr/translations.xml b/libraries/androidutils/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..070ef9d3b43 --- /dev/null +++ b/libraries/androidutils/src/main/res/values-tr/translations.xml @@ -0,0 +1,4 @@ + + + "Bu eylemi gerçekleştirecek uyumlu bir uygulama bulunamadı." + diff --git a/libraries/dateformatter/impl/src/main/res/values-pt/translations.xml b/libraries/dateformatter/impl/src/main/res/values-pt/translations.xml new file mode 100644 index 00000000000..7c72997e333 --- /dev/null +++ b/libraries/dateformatter/impl/src/main/res/values-pt/translations.xml @@ -0,0 +1,5 @@ + + + "%1$s às %2$s" + "Este mês" + diff --git a/libraries/dateformatter/impl/src/main/res/values-sv/translations.xml b/libraries/dateformatter/impl/src/main/res/values-sv/translations.xml new file mode 100644 index 00000000000..58f22f89ab2 --- /dev/null +++ b/libraries/dateformatter/impl/src/main/res/values-sv/translations.xml @@ -0,0 +1,5 @@ + + + "%1$svid %2$s" + "Denna månad" + diff --git a/libraries/dateformatter/impl/src/main/res/values-tr/translations.xml b/libraries/dateformatter/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..5276e6c91f9 --- /dev/null +++ b/libraries/dateformatter/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,5 @@ + + + "%1$s %2$s" + "Bu ay" + diff --git a/libraries/designsystem/build.gradle.kts b/libraries/designsystem/build.gradle.kts index 01e8d56bb04..3e8d776f503 100644 --- a/libraries/designsystem/build.gradle.kts +++ b/libraries/designsystem/build.gradle.kts @@ -31,6 +31,7 @@ android { implementation(libs.androidx.compose.material3.adaptive) implementation(libs.coil.compose) implementation(libs.vanniktech.blurhash) + implementation(projects.features.enterprise.api) implementation(projects.libraries.architecture) implementation(projects.libraries.preferences.api) implementation(projects.libraries.testtags) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt index 317abe76ba4..8b22e53ae6c 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt @@ -7,24 +7,24 @@ package io.element.android.libraries.designsystem -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color +import io.element.android.compound.theme.ElementTheme @Composable fun Boolean.toEnabledColor(): Color { return if (this) { - MaterialTheme.colorScheme.primary + ElementTheme.colors.textPrimary } else { - MaterialTheme.colorScheme.primary.copy(alpha = 0.40f) + ElementTheme.colors.textDisabled } } @Composable fun Boolean.toSecondaryEnabledColor(): Color { return if (this) { - MaterialTheme.colorScheme.secondary + ElementTheme.colors.textSecondary } else { - MaterialTheme.colorScheme.secondary.copy(alpha = 0.40f) + ElementTheme.colors.textDisabled } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RedIndicatorAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RedIndicatorAtom.kt index 86537f14354..354eada12ae 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RedIndicatorAtom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RedIndicatorAtom.kt @@ -33,7 +33,7 @@ fun RedIndicatorAtom( Box( modifier = modifier .size(size) - .border(borderSize, ElementTheme.materialColors.background, CircleShape) + .border(borderSize, ElementTheme.colors.bgCanvasDefault, CircleShape) .padding(borderSize / 2) .clip(CircleShape) .background(color) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoundedIconAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoundedIconAtom.kt index 7816a59e488..b5312af314f 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoundedIconAtom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/RoundedIconAtom.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -45,7 +44,7 @@ fun RoundedIconAtom( size: RoundedIconAtomSize = RoundedIconAtomSize.Big, resourceId: Int? = null, imageVector: ImageVector? = null, - tint: Color = MaterialTheme.colorScheme.secondary, + tint: Color = ElementTheme.colors.iconSecondary, backgroundTint: Color = ElementTheme.colors.temporaryColorBgSpecial, ) { Box( diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/ComposerAlertMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/ComposerAlertMolecule.kt index b85e31c5140..33706239dc7 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/ComposerAlertMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/ComposerAlertMolecule.kt @@ -58,7 +58,7 @@ fun ComposerAlertMolecule( ) val startColor = if (isCritical) ElementTheme.colors.bgCriticalSubtle else ElementTheme.colors.bgInfoSubtle val brush = Brush.verticalGradient( - listOf(startColor, ElementTheme.materialColors.background), + listOf(startColor, ElementTheme.colors.bgCanvasDefault), ) Box( modifier = Modifier diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt index d07f47b43cf..9496f539931 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/IconTitleSubtitleMolecule.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -51,7 +50,7 @@ fun IconTitleSubtitleMolecule( .fillMaxWidth(), textAlign = TextAlign.Center, style = ElementTheme.typography.fontHeadingMdBold, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) if (subTitle != null) { Spacer(Modifier.height(8.dp)) @@ -60,7 +59,7 @@ fun IconTitleSubtitleMolecule( modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt index 8a95340342d..47b43fea402 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt @@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.movableContentOf import androidx.compose.runtime.remember @@ -46,7 +45,7 @@ import io.element.android.libraries.designsystem.theme.components.Text fun HeaderFooterPage( modifier: Modifier = Modifier, paddingValues: PaddingValues = PaddingValues(20.dp), - containerColor: Color = MaterialTheme.colorScheme.background, + containerColor: Color = ElementTheme.colors.bgCanvasDefault, isScrollable: Boolean = false, background: @Composable () -> Unit = {}, topBar: @Composable () -> Unit = {}, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt index 274518f831c..d33fa9f211e 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt @@ -9,13 +9,13 @@ package io.element.android.libraries.designsystem.background import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.center import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.RadialGradientShader import androidx.compose.ui.graphics.ShaderBrush +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -25,7 +25,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight @Composable fun LightGradientBackground( modifier: Modifier = Modifier, - backgroundColor: Color = MaterialTheme.colorScheme.background, + backgroundColor: Color = ElementTheme.colors.bgCanvasDefault, firstColor: Color = Color(0x1E0DBD8B), secondColor: Color = Color(0x001273EB), ratio: Float = 642 / 775f, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt index 5e3aebd6565..b86fdd8db54 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt @@ -477,7 +477,7 @@ internal fun BloomPreview() { } .bloom( hash = blurhash, - background = ElementTheme.materialColors.background, + background = ElementTheme.colors.bgCanvasDefault, blurSize = DpSize(430.dp, 430.dp), offset = DpOffset(24.dp, 24.dp), clipToSize = if (topAppBarHeight > 0) DpSize(430.dp, topAppBarHeight.toDp()) else DpSize.Zero, @@ -554,9 +554,9 @@ internal fun BloomInitialsPreview(@PreviewParameter(InitialsColorIntProvider::cl // Workaround to display a very subtle bloom for avatars with very soft colors Color(0xFFF9F9F9) } else { - ElementTheme.materialColors.background + ElementTheme.colors.bgCanvasDefault }, - bottomSoftEdgeColor = ElementTheme.materialColors.background, + bottomSoftEdgeColor = ElementTheme.colors.bgCanvasDefault, blurSize = DpSize(256.dp, 256.dp), ), contentAlignment = Alignment.Center diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt index 554050511e6..3f25a69eb06 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt @@ -9,11 +9,11 @@ package io.element.android.libraries.designsystem.components import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.theme.components.Checkbox @@ -38,7 +38,7 @@ fun LabelledCheckbox( ) Text( text = text, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) } } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt index 8e276613596..f5d8a50ce03 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup @@ -64,13 +65,13 @@ fun ProgressDialog( when (type) { is ProgressDialogType.Indeterminate -> { CircularProgressIndicator( - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.iconPrimary ) } is ProgressDialogType.Determinate -> { CircularProgressIndicator( progress = { type.progress }, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.iconPrimary ) } } @@ -93,7 +94,7 @@ private fun ProgressDialogContent( onCancelClick: () -> Unit = {}, progressIndicator: @Composable () -> Unit = { CircularProgressIndicator( - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.iconPrimary ) } ) { @@ -114,7 +115,7 @@ private fun ProgressDialogContent( Spacer(modifier = Modifier.height(22.dp)) Text( text = text, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) } if (showCancelButton) { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt index b8b4a312596..537c1f639fa 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.widthIn import androidx.compose.material3.LocalContentColor -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -58,17 +57,16 @@ fun MainActionButton( .widthIn(min = 76.dp, max = 96.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { - val tintColor = if (enabled) LocalContentColor.current else MaterialTheme.colorScheme.secondary Icon( imageVector = imageVector, contentDescription = contentDescription, - tint = tintColor, + tint = if (enabled) LocalContentColor.current else ElementTheme.colors.iconDisabled, ) Spacer(modifier = Modifier.height(14.dp)) Text( title, style = ElementTheme.typography.fontBodyMdMedium.copy(hyphens = Hyphens.Auto), - color = tintColor, + color = if (enabled) LocalContentColor.current else ElementTheme.colors.textDisabled, overflow = TextOverflow.Visible, textAlign = TextAlign.Center, ) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 29d3633cc04..77ac8d6dd6c 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -7,7 +7,6 @@ package io.element.android.libraries.designsystem.theme -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import io.element.android.compound.annotations.CoreColorToken @@ -24,13 +23,13 @@ import kotlinx.collections.immutable.persistentMapOf * Room list. */ @Composable -fun MaterialTheme.roomListRoomName() = colorScheme.primary +fun ElementTheme.roomListRoomName() = colors.textPrimary @Composable -fun MaterialTheme.roomListRoomMessage() = colorScheme.secondary +fun ElementTheme.roomListRoomMessage() = colors.textSecondary @Composable -fun MaterialTheme.roomListRoomMessageDate() = colorScheme.secondary +fun ElementTheme.roomListRoomMessageDate() = colors.textSecondary val SemanticColors.unreadIndicator get() = iconAccentTertiary @@ -181,9 +180,9 @@ internal fun ColorAliasesPreview() = ElementPreview { backgroundColor = Color.Black, foregroundColor = Color.White, colors = persistentMapOf( - "roomListRoomName" to MaterialTheme.roomListRoomName(), - "roomListRoomMessage" to MaterialTheme.roomListRoomMessage(), - "roomListRoomMessageDate" to MaterialTheme.roomListRoomMessageDate(), + "roomListRoomName" to ElementTheme.roomListRoomName(), + "roomListRoomMessage" to ElementTheme.roomListRoomMessage(), + "roomListRoomMessageDate" to ElementTheme.roomListRoomMessageDate(), "unreadIndicator" to ElementTheme.colors.unreadIndicator, "placeholderBackground" to ElementTheme.colors.placeholderBackground, "messageFromMeBackground" to ElementTheme.colors.messageFromMeBackground, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt index 2c69b8575ae..0944664074b 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ElementThemeApp.kt @@ -17,6 +17,7 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.compound.theme.Theme import io.element.android.compound.theme.isDark import io.element.android.compound.theme.mapToTheme +import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.preferences.api.store.AppPreferencesStore /** @@ -29,6 +30,7 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore @Composable fun ElementThemeApp( appPreferencesStore: AppPreferencesStore, + enterpriseService: EnterpriseService, content: @Composable () -> Unit, ) { val theme by remember { @@ -44,8 +46,12 @@ fun ElementThemeApp( } ) } + val compoundLight = remember { enterpriseService.semanticColorsLight() } + val compoundDark = remember { enterpriseService.semanticColorsDark() } ElementTheme( darkTheme = theme.isDark(), content = content, + compoundLight = compoundLight, + compoundDark = compoundDark, ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt index 7936c25fcb9..51fe275ee14 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/AlertDialogContent.kt @@ -159,7 +159,7 @@ internal fun SimpleAlertDialogContent( // most cases, TextButtons should be used for dismiss and confirm buttons. // TextButtons will not consume this provided content color value, and will used their // own defined or default colors. - buttonContentColor = MaterialTheme.colorScheme.primary, + buttonContentColor = ElementTheme.colors.textPrimary, applyPaddingToContents = applyPaddingToContents, ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/Button.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/Button.kt index 4a198379cac..8b1ca525153 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/Button.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/Button.kt @@ -314,7 +314,7 @@ internal enum class ButtonStyle { contentColor = if (destructive) { ElementTheme.colors.textCriticalPrimary } else { - if (LocalContentColor.current.isSpecified) LocalContentColor.current else ElementTheme.materialColors.primary + if (LocalContentColor.current.isSpecified) LocalContentColor.current else ElementTheme.colors.textPrimary }, disabledContainerColor = Color.Transparent, disabledContentColor = getDisabledContentColor(destructive), diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/SearchBar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/SearchBar.kt index 99f9f1a5563..e75b7727ebf 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/SearchBar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/SearchBar.kt @@ -106,7 +106,7 @@ fun SearchBar( Icon( imageVector = CompoundIcons.Search(), contentDescription = stringResource(CommonStrings.action_search), - tint = ElementTheme.materialColors.tertiary, + tint = ElementTheme.colors.iconTertiary, ) } } @@ -138,7 +138,7 @@ fun SearchBar( Text( text = stringResource(CommonStrings.common_no_results), textAlign = TextAlign.Center, - color = ElementTheme.materialColors.tertiary, + color = ElementTheme.colors.textSecondary, modifier = Modifier.fillMaxWidth() ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/DatePickerPreview.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/DatePickerPreview.kt index e207657d2c5..dbfb0b29a66 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/DatePickerPreview.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/DatePickerPreview.kt @@ -10,10 +10,10 @@ package io.element.android.libraries.designsystem.theme.components.previews import androidx.compose.material3.AlertDialogDefaults import androidx.compose.material3.DatePicker import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight @@ -48,7 +48,7 @@ private fun ContentToPreview() { shape = AlertDialogDefaults.shape, containerColor = AlertDialogDefaults.containerColor, tonalElevation = AlertDialogDefaults.TonalElevation, - buttonContentColor = MaterialTheme.colorScheme.primary, + buttonContentColor = ElementTheme.colors.textPrimary, iconContentColor = AlertDialogDefaults.iconContentColor, titleContentColor = AlertDialogDefaults.titleContentColor, textContentColor = AlertDialogDefaults.textContentColor, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/TimePickerPreview.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/TimePickerPreview.kt index 9513a2468f1..57ecb9c9674 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/TimePickerPreview.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/previews/TimePickerPreview.kt @@ -9,12 +9,12 @@ package io.element.android.libraries.designsystem.theme.components.previews import androidx.compose.material3.AlertDialogDefaults import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.TimePicker import androidx.compose.material3.TimePickerLayoutType import androidx.compose.material3.rememberTimePickerState import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.preview.ElementThemedPreview @@ -35,7 +35,7 @@ internal fun TimePickerHorizontalPreview() { shape = AlertDialogDefaults.shape, containerColor = AlertDialogDefaults.containerColor, tonalElevation = AlertDialogDefaults.TonalElevation, - buttonContentColor = MaterialTheme.colorScheme.primary, + buttonContentColor = ElementTheme.colors.textPrimary, iconContentColor = AlertDialogDefaults.iconContentColor, titleContentColor = AlertDialogDefaults.titleContentColor, textContentColor = AlertDialogDefaults.textContentColor, @@ -57,7 +57,7 @@ internal fun TimePickerVerticalLightPreview() { shape = AlertDialogDefaults.shape, containerColor = AlertDialogDefaults.containerColor, tonalElevation = AlertDialogDefaults.TonalElevation, - buttonContentColor = MaterialTheme.colorScheme.primary, + buttonContentColor = ElementTheme.colors.textPrimary, iconContentColor = AlertDialogDefaults.iconContentColor, titleContentColor = AlertDialogDefaults.titleContentColor, textContentColor = AlertDialogDefaults.textContentColor, @@ -83,7 +83,7 @@ internal fun TimePickerVerticalDarkPreview() { shape = AlertDialogDefaults.shape, containerColor = AlertDialogDefaults.containerColor, tonalElevation = AlertDialogDefaults.TonalElevation, - buttonContentColor = MaterialTheme.colorScheme.primary, + buttonContentColor = ElementTheme.colors.textPrimary, iconContentColor = AlertDialogDefaults.iconContentColor, titleContentColor = AlertDialogDefaults.titleContentColor, textContentColor = AlertDialogDefaults.textContentColor, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/ForceOrientation.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/ForceOrientation.kt index bb2833a0224..37e6e1c93e0 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/ForceOrientation.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/ForceOrientation.kt @@ -8,14 +8,13 @@ package io.element.android.libraries.designsystem.utils import android.content.pm.ActivityInfo -import androidx.activity.ComponentActivity +import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.platform.LocalContext @Composable fun ForceOrientation(orientation: ScreenOrientation) { - val activity = LocalContext.current as? ComponentActivity ?: return + val activity = LocalActivity.current ?: return val orientationFlags = when (orientation) { ScreenOrientation.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ScreenOrientation.LANDSCAPE -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE diff --git a/libraries/eventformatter/impl/src/main/res/values-tr/translations.xml b/libraries/eventformatter/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..507804892ea --- /dev/null +++ b/libraries/eventformatter/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,69 @@ + + + "(Profil fotoğrafı değiştirildi)" + "%1$s profil fotoğrafını değiştirdi" + "Profil fotoğrafını değiştirdin" + "%1$s üyeliğe düşürüldü" + "%1$s moderatörlüğe düşürüldü" + "%1$s görünen adını bundan %2$s şuna %3$s değiştirdi" + "Görünen adınızı bundan %1$s şuna %2$s değiştirdiniz" + "%1$s görünen adını kaldırdı (önceden %2$s)" + "Görünen adınızı kaldırdınız (önceden %1$s)" + "%1$s görünen adlarını şuna ayarla %2$s" + "Görünen adınız %1$s" + "%1$s yöneticiliğe terfi etti" + "%1$s moderatörlüğe terfi etti" + "%1$s odanın fotoğrafını değiştirdi" + "Odanın fotoğrafını değiştirdiniz" + "%1$s oda fotoğrafını kaldırdı" + "Oda fotoğrafını kaldırdınız" + "%1$syasaklandı%2$s" + "%1$s yasakladınız" + "%1$sodayı yarattı" + "Odayı sen yarattın" + "%1$s davet edildi %2$s" + "%1$s daveti kabul etti" + "Daveti kabul ettiniz" + "%1$s davet ettiniz" + "%1$s sizi davet etti" + "%1$sodaya katıldı" + "Odaya katıldınız" + "%1$s katılmak istiyor" + "%1$s, %2$s\'e erişim izni verdi" + "%1$s \'ın katılmasına izin verdiniz" + "Katılmayı talep ettiniz" + "%1$s, %2$s\'ın katılma isteğini reddetti" + "%1$s kullanıcısının katılma isteğini reddettiniz" + "%1$s katılma isteğinizi reddetti" + "%1$s artık katılmakla ilgilenmiyor" + "Katılma talebinizi iptal ettiniz" + "%1$sodadan ayrıldı" + "Odadan ayrıldın." + "%1$s Oda adını değiştirdi: %2$s" + "Odanın adını değiştridiniz: %1$s" + "%1$s Oda adını kaldırdı" + "Oda adını kaldırdınız" + "%1$s hiçbir değişiklik yapmadı" + "Hiçbir değişiklik yapmadınız" + "%1$s sabitlenmiş iletileri değiştirdi" + "Sabitlenmiş mesajları değiştirdiniz" + "%1$s bir mesaj sabitledi" + "Bir mesaj sabitlediniz" + "%1$s bir mesajın sabitlemesini kaldırdı" + "Bir mesajın sabitlemesini kaldırdınız" + "%1$sdaveti reddetti" + "Daveti reddettiniz" + "%1$skaldırıldı%2$s" + "%1$s kaldırdınız" + "%1$s odaya katılması için %2$s\'a davet gönderdi" + "Odaya katılması için %1$s\'a davet gönderdin" + "%1$s, %2$s\'nin odaya katılma davetini iptal etti" + "%1$s\'ın odaya katılma davetini iptal ettiniz" + "%1$s konuyu değiştirdi: %2$s" + "Konuyu değiştirdiniz: %1$s" + "%1$s oda konusunu kaldırdı" + "Oda konusunu kaldırdınız" + "%1$syasaklanmamış%2$s" + "%1$s yasağını kaldırdınız" + "%1$s üyeliğinde bilinmeyen bir değişiklik yaptı" + 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 a6cf5e5e703..5616bb08392 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 @@ -25,10 +25,9 @@ import io.element.android.libraries.matrix.api.oidc.AccountManagementAction import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoomInfo -import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.RoomPreview import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias -import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.RoomSummary @@ -55,7 +54,7 @@ interface MatrixClient : Closeable { val sessionCoroutineScope: CoroutineScope val ignoredUsersFlow: StateFlow> suspend fun getRoom(roomId: RoomId): MatrixRoom? - suspend fun getPendingRoom(roomId: RoomId): PendingRoom? + suspend fun getPendingRoom(roomId: RoomId): RoomPreview? suspend fun findDM(userId: UserId): RoomId? suspend fun ignoreUser(userId: UserId): Result suspend fun unignoreUser(userId: UserId): Result @@ -146,7 +145,11 @@ interface MatrixClient : Closeable { * Execute generic GET requests through the SDKs internal HTTP client. */ suspend fun getUrl(url: String): Result - suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result + + /** + * Get a room preview for a given room ID or alias. This is especially useful for rooms that the user is not a member of, or hasn't joined yet. + */ + suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result /** * Returns the currently used sliding sync version. diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt index fcafe08569d..eba16547142 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.api.exception sealed class ClientException(message: String) : Exception(message) { class Generic(message: String) : ClientException(message) + class MatrixApi(val kind: ErrorKind, val code: String, message: String) : ClientException(message) class Other(message: String) : ClientException(message) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ErrorKind.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ErrorKind.kt new file mode 100644 index 00000000000..8ca7ce55798 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ErrorKind.kt @@ -0,0 +1,457 @@ +/* + * 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.api.exception + +sealed interface ErrorKind { + /** + * M_BAD_ALIAS + * + * One or more room aliases within the m.room.canonical_alias event do + * not point to the room ID for which the state event is to be sent to. + * + * room aliases: https://spec.matrix.org/latest/client-server-api/#room-aliases + */ + data object BadAlias : ErrorKind + + /** + * M_BAD_JSON + * + * The request contained valid JSON, but it was malformed in some way, e.g. + * missing required keys, invalid values for keys. + */ + data object BadJson : ErrorKind + + /** + * M_BAD_STATE + * + * The state change requested cannot be performed, such as attempting to + * unban a user who is not banned. + */ + data object BadState : ErrorKind + + /** + * M_BAD_STATUS + * + * The application service returned a bad status. + */ + data class BadStatus( + /** + * The HTTP status code of the response. + */ + val status: Int?, + /** + * The body of the response. + */ + val body: String? + ) : ErrorKind + + /** + * M_CANNOT_LEAVE_SERVER_NOTICE_ROOM + * + * The user is unable to reject an invite to join the server notices + * room. + * + * server notices: https://spec.matrix.org/latest/client-server-api/#server-notices + */ + data object CannotLeaveServerNoticeRoom : ErrorKind + + /** + * M_CANNOT_OVERWRITE_MEDIA + * + * The create_content_async endpoint was called with a media ID that + * already has content. + * + */ + data object CannotOverwriteMedia : ErrorKind + + /** + * M_CAPTCHA_INVALID + * + * The Captcha provided did not match what was expected. + */ + data object CaptchaInvalid : ErrorKind + + /** + * M_CAPTCHA_NEEDED + * + * A Captcha is required to complete the request. + */ + data object CaptchaNeeded : ErrorKind + + /** + * M_CONNECTION_FAILED + * + * The connection to the application service failed. + */ + data object ConnectionFailed : ErrorKind + + /** + * M_CONNECTION_TIMEOUT + * + * The connection to the application service timed out. + */ + data object ConnectionTimeout : ErrorKind + + /** + * M_DUPLICATE_ANNOTATION + * + * The request is an attempt to send a duplicate annotation. + * + * duplicate annotation: https://spec.matrix.org/latest/client-server-api/#avoiding-duplicate-annotations + */ + data object DuplicateAnnotation : ErrorKind + + /** + * M_EXCLUSIVE + * + * The resource being requested is reserved by an application service, or + * the application service making the request has not created the + * resource. + */ + data object Exclusive : ErrorKind + + /** + * M_FORBIDDEN + * + * Forbidden access, e.g. joining a room without permission, failed login. + */ + data object Forbidden : ErrorKind + + /** + * M_GUEST_ACCESS_FORBIDDEN + * + * The room or resource does not permit guests to access it. + * + * guests: https://spec.matrix.org/latest/client-server-api/#guest-access + */ + data object GuestAccessForbidden : ErrorKind + + /** + * M_INCOMPATIBLE_ROOM_VERSION + * + * The client attempted to join a room that has a version the server does + * not support. + */ + data class IncompatibleRoomVersion( + /** + * The room's version. + */ + val roomVersion: String + ) : ErrorKind + + /** + * M_INVALID_PARAM + * + * A parameter that was specified has the wrong value. For example, the + * server expected an integer and instead received a string. + */ + data object InvalidParam : ErrorKind + + /** + * M_INVALID_ROOM_STATE + * + * The initial state implied by the parameters to the create_room + * request is invalid, e.g. the user's power_level is set below that + * necessary to set the room name. + * + */ + data object InvalidRoomState : ErrorKind + + /** + * M_INVALID_USERNAME + * + * The desired user name is not valid. + */ + data object InvalidUsername : ErrorKind + + /** + * M_LIMIT_EXCEEDED + * + * The request has been refused due to rate limiting: too many requests + * have been sent in a short period of time. + * + * rate limiting: https://spec.matrix.org/latest/client-server-api/#rate-limiting + */ + data class LimitExceeded( + /** + * How long a client should wait before they can try again. + */ + val retryAfterMs: Long? + ) : ErrorKind + + /** + * M_MISSING_PARAM + * + * A required parameter was missing from the request. + */ + data object MissingParam : ErrorKind + + /** + * M_MISSING_TOKEN + * + * No access token was specified for the request, but one is required. + * + * access token: https://spec.matrix.org/latest/client-server-api/#client-authentication + */ + data object MissingToken : ErrorKind + + /** + * M_NOT_FOUND + * + * No resource was found for this request. + */ + data object NotFound : ErrorKind + + /** + * M_NOT_JSON + * + * The request did not contain valid JSON. + */ + data object NotJson : ErrorKind + + /** + * M_NOT_YET_UPLOADED + * + * An mxc URI generated was used and the content is not yet available. + * + */ + data object NotYetUploaded : ErrorKind + + /** + * M_RESOURCE_LIMIT_EXCEEDED + * + * The request cannot be completed because the homeserver has reached a + * resource limit imposed on it. For example, a homeserver held in a + * shared hosting environment may reach a resource limit if it starts + * using too much memory or disk space. + */ + data class ResourceLimitExceeded( + /** + * A URI giving a contact method for the server administrator. + */ + val adminContact: String + ) : ErrorKind + + /** + * M_ROOM_IN_USE + * + * The room alias specified in the request is already taken. + * + * room alias: https://spec.matrix.org/latest/client-server-api/#room-aliases + */ + data object RoomInUse : ErrorKind + + /** + * M_SERVER_NOT_TRUSTED + * + * The client's request used a third-party server, e.g. identity server, + * that this server does not trust. + */ + data object ServerNotTrusted : ErrorKind + + /** + * M_THREEPID_AUTH_FAILED + * + * Authentication could not be performed on the third-party identifier. + * + * third-party identifier: https://spec.matrix.org/latest/client-server-api/#adding-account-administrative-contact-information + */ + data object ThreepidAuthFailed : ErrorKind + + /** + * M_THREEPID_DENIED + * + * The server does not permit this third-party identifier. This may + * happen if the server only permits, for example, email addresses from + * a particular domain. + * + * third-party identifier: https://spec.matrix.org/latest/client-server-api/#adding-account-administrative-contact-information + */ + data object ThreepidDenied : ErrorKind + + /** + * M_THREEPID_IN_USE + * + * The third-party identifier is already in use by another user. + * + * third-party identifier: https://spec.matrix.org/latest/client-server-api/#adding-account-administrative-contact-information + */ + data object ThreepidInUse : ErrorKind + + /** + * M_THREEPID_MEDIUM_NOT_SUPPORTED + * + * The homeserver does not support adding a third-party identifier of the + * given medium. + * + * third-party identifier: https://spec.matrix.org/latest/client-server-api/#adding-account-administrative-contact-information + */ + data object ThreepidMediumNotSupported : ErrorKind + + /** + * M_THREEPID_NOT_FOUND + * + * No account matching the given third-party identifier could be found. + * + * third-party identifier: https://spec.matrix.org/latest/client-server-api/#adding-account-administrative-contact-information + */ + data object ThreepidNotFound : ErrorKind + + /** + * M_TOO_LARGE + * + * The request or entity was too large. + */ + data object TooLarge : ErrorKind + + /** + * M_UNABLE_TO_AUTHORISE_JOIN + * + * The room is restricted and none of the conditions can be validated by + * the homeserver. This can happen if the homeserver does not know + * about any of the rooms listed as conditions, for example. + * + * restricted: https://spec.matrix.org/latest/client-server-api/#restricted-rooms + */ + data object UnableToAuthorizeJoin : ErrorKind + + /** + * M_UNABLE_TO_GRANT_JOIN + * + * A different server should be attempted for the join. This is typically + * because the resident server can see that the joining user satisfies + * one or more conditions, such as in the case of restricted rooms, + * but the resident server would be unable to meet the authorization + * rules. + * + * restricted rooms: https://spec.matrix.org/latest/client-server-api/#restricted-rooms + */ + data object UnableToGrantJoin : ErrorKind + + /** + * M_UNAUTHORIZED + * + * The request was not correctly authorized. Usually due to login failures. + */ + data object Unauthorized : ErrorKind + + /** + * M_UNKNOWN + * + * An unknown error has occurred. + */ + data object Unknown : ErrorKind + + /** + * M_UNKNOWN_TOKEN + * + * The access or refresh token specified was not recognized. + * + * access or refresh token: https://spec.matrix.org/latest/client-server-api/#client-authentication + */ + data class UnknownToken( + /** + * If this is true, the client is in a "soft logout" state, i.e. + * the server requires re-authentication but the session is not + * invalidated. The client can acquire a new access token by + * specifying the device ID it is already using to the login API. + * + * soft logout: https://spec.matrix.org/latest/client-server-api/#soft-logout + */ + val softLogout: Boolean + ) : ErrorKind + + /** + * M_UNRECOGNIZED + * + * The server did not understand the request. + * + * This is expected to be returned with a 404 HTTP status code if the + * endpoint is not implemented or a 405 HTTP status code if the + * endpoint is implemented, but the incorrect HTTP method is used. + */ + data object Unrecognized : ErrorKind + + /** + * M_UNSUPPORTED_ROOM_VERSION + * + * The request to create_room used a room version that the server does + * not support. + * + */ + data object UnsupportedRoomVersion : ErrorKind + + /** + * M_URL_NOT_SET + * + * The application service doesn't have a URL configured. + */ + data object UrlNotSet : ErrorKind + + /** + * M_USER_DEACTIVATED + * + * The user ID associated with the request has been deactivated. + */ + data object UserDeactivated : ErrorKind + + /** + * M_USER_IN_USE + * + * The desired user ID is already taken. + */ + data object UserInUse : ErrorKind + + /** + * M_USER_LOCKED + * + * The account has been locked and cannot be used at this time. + * + * locked: https://spec.matrix.org/latest/client-server-api/#account-locking + */ + data object UserLocked : ErrorKind + + /** + * M_USER_SUSPENDED + * + * The account has been suspended and can only be used for limited + * actions at this time. + * + * suspended: https://spec.matrix.org/latest/client-server-api/#account-suspension + */ + data object UserSuspended : ErrorKind + + /** + * M_WEAK_PASSWORD + * + * The password was rejected by the server for being too weak. + * + * rejected: https://spec.matrix.org/latest/client-server-api/#notes-on-password-management + */ + data object WeakPassword : ErrorKind + + /** + * M_WRONG_ROOM_KEYS_VERSION + * + * The version of the room keys backup provided in the request does not + * match the current backup version. + * + * room keys backup: https://spec.matrix.org/latest/client-server-api/#server-side-key-backups + */ + data class WrongRoomKeysVersion( + /** + * The currently active backup version. + */ + val currentVersion: String? + ) : ErrorKind + + /** + * A custom API error. + */ + data class Custom(val errcode: String) : ErrorKind +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt index ff525c403d6..32cc4646c09 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt @@ -28,7 +28,6 @@ data class MatrixRoomInfo( val topic: String?, val avatarUrl: String?, val isDirect: Boolean, - val isPublic: Boolean, val joinRule: JoinRule?, val isSpace: Boolean, val isTombstoned: Boolean, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/PendingRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/PendingRoom.kt deleted file mode 100644 index 3c7a6c6fe09..00000000000 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/PendingRoom.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 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.libraries.matrix.api.room - -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.core.SessionId - -/** A reference to a room the current user has knocked to or has been invited to, with the ability to leave the room. */ -interface PendingRoom : AutoCloseable { - val sessionId: SessionId - val roomId: RoomId - - /** Leave the room ie.decline invite or cancel knock. */ - suspend fun leave(): Result -} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt index 758136c3a77..00da7e4137f 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt @@ -20,6 +20,7 @@ data class RoomMember( val normalizedPowerLevel: Long, val isIgnored: Boolean, val role: Role, + val membershipChangeReason: String?, ) { /** * Role of the RoomMember, based on its [powerLevel]. diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMembershipDetails.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMembershipDetails.kt new file mode 100644 index 00000000000..20d7b0e2ad5 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMembershipDetails.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.api.room + +/** + * Room membership details for the current user and the sender of the membership event. + * + * It also includes the reason the current user's membership changed, if any. + */ +data class RoomMembershipDetails( + val currentUserMember: RoomMember, + val senderMember: RoomMember?, +) { + val membershipChangeReason: String? = currentUserMember.membershipChangeReason +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomPreview.kt new file mode 100644 index 00000000000..6dd8ac0992c --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomPreview.kt @@ -0,0 +1,30 @@ +/* + * Copyright 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.libraries.matrix.api.room + +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo + +/** A reference to a room either invited, knocked or banned. */ +interface RoomPreview : AutoCloseable { + val sessionId: SessionId + val info: RoomPreviewInfo + + /** Leave the room ie.decline invite or cancel knock. */ + suspend fun leave(): Result + + /** + * Forget the room if we had access to it, and it was left or banned. + */ + suspend fun forget(): Result + + /** + * Get the membership details of the user in the room, as well as from the user who sent the `m.room.member` event. + */ + suspend fun membershipDetails(): Result +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt index e256cf7d0e1..b00d59a3f64 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt @@ -9,7 +9,9 @@ package io.element.android.libraries.matrix.api.room.preview 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.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRule data class RoomPreviewInfo( /** The room id for this room. */ @@ -28,12 +30,8 @@ data class RoomPreviewInfo( val roomType: RoomType, /** Is the history world-readable for this room? */ val isHistoryWorldReadable: Boolean, - /** Is the room joined by the current user? */ - val isJoined: Boolean, - /** Is the current user invited to this room? */ - val isInvited: Boolean, - /** is the join rule public for this room? */ - val isPublic: Boolean, - /** Can we knock (or restricted-knock) to this room? */ - val canKnock: Boolean, + /** the membership of the current user. */ + val membership: CurrentUserMembership?, + /** The room's join rule. */ + val joinRule: JoinRule, ) 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 8bc69769240..e915e7ea4cd 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 @@ -13,6 +13,7 @@ import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.core.data.tryOrNull +import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.DeviceId @@ -32,12 +33,11 @@ import io.element.android.libraries.matrix.api.oidc.AccountManagementAction import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.RoomPreview import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias import io.element.android.libraries.matrix.api.room.join.JoinRule -import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomdirectory.RoomVisibility import io.element.android.libraries.matrix.api.roomlist.RoomListService @@ -50,6 +50,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.impl.core.toProgressWatcher import io.element.android.libraries.matrix.impl.encryption.RustEncryptionService +import io.element.android.libraries.matrix.impl.exception.mapClientException import io.element.android.libraries.matrix.impl.media.RustMediaLoader import io.element.android.libraries.matrix.impl.notification.RustNotificationService import io.element.android.libraries.matrix.impl.notificationsettings.RustNotificationSettingsService @@ -58,9 +59,9 @@ import io.element.android.libraries.matrix.impl.pushers.RustPushersService import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustRoomFactory +import io.element.android.libraries.matrix.impl.room.RustRoomPreview import io.element.android.libraries.matrix.impl.room.TimelineEventTypeFilterFactory import io.element.android.libraries.matrix.impl.room.join.map -import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewInfoMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomdirectory.map import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory @@ -261,8 +262,8 @@ class RustMatrixClient( return roomFactory.create(roomId) } - override suspend fun getPendingRoom(roomId: RoomId): PendingRoom? { - return roomFactory.createPendingRoom(roomId) + override suspend fun getPendingRoom(roomId: RoomId): RoomPreview? { + return roomFactory.createRoomPreview(roomId) } /** @@ -393,7 +394,7 @@ class RustMatrixClient( null } } - } + }.mapFailure { it.mapClientException() } override suspend fun joinRoomByIdOrAlias(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) { runCatching { @@ -407,7 +408,7 @@ class RustMatrixClient( Timber.e(e, "Timeout waiting for the room to be available in the room list") null } - } + }.mapFailure { it.mapClientException() } } override suspend fun knockRoom(roomIdOrAlias: RoomIdOrAlias, message: String, serverNames: List): Result = withContext( @@ -421,7 +422,7 @@ class RustMatrixClient( Timber.e(e, "Timeout waiting for the room to be available in the room list") null } - } + }.mapFailure { it.mapClientException() } } override suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { @@ -448,15 +449,14 @@ class RustMatrixClient( } } - override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) { + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) { runCatching { - when (roomIdOrAlias) { + val roomPreview = when (roomIdOrAlias) { is RoomIdOrAlias.Alias -> innerClient.getRoomPreviewFromRoomAlias(roomIdOrAlias.roomAlias.value) is RoomIdOrAlias.Id -> innerClient.getRoomPreviewFromRoomId(roomIdOrAlias.roomId.value, serverNames) - }.use { roomPreview -> - RoomPreviewInfoMapper.map(roomPreview.info()) } - } + RustRoomPreview(sessionId, roomPreview, roomMembershipObserver) + }.mapFailure { it.mapClientException() } } override fun syncService(): SyncService = rustSyncService @@ -495,6 +495,7 @@ class RustMatrixClient( override suspend fun logout(userInitiated: Boolean, ignoreSdkError: Boolean): String? { var result: String? = null + sessionCoroutineScope.cancel() // Remove current delegate so we don't receive an auth error clientDelegateTaskHandle?.cancelAndDestroy() clientDelegateTaskHandle = null diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt index d8bc9ccff7e..b721a3211c0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt @@ -15,6 +15,11 @@ fun Throwable.mapClientException(): ClientException { is RustClientException -> { when (this) { is RustClientException.Generic -> ClientException.Generic(msg) + is RustClientException.MatrixApi -> ClientException.MatrixApi( + kind = kind.map(), + code = code, + message = msg + ) } } else -> ClientException.Other(message ?: "Unknown error") diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ErrorKind.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ErrorKind.kt new file mode 100644 index 00000000000..12b15b64651 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ErrorKind.kt @@ -0,0 +1,63 @@ +/* + * 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.exception +import io.element.android.libraries.matrix.api.exception.ErrorKind +import org.matrix.rustcomponents.sdk.ErrorKind as RustErrorKind + +fun RustErrorKind.map(): ErrorKind { + return when (this) { + RustErrorKind.BadAlias -> ErrorKind.BadAlias + RustErrorKind.BadJson -> ErrorKind.BadJson + RustErrorKind.BadState -> ErrorKind.BadState + is RustErrorKind.BadStatus -> ErrorKind.BadStatus(status?.toInt(), body) + RustErrorKind.CannotLeaveServerNoticeRoom -> ErrorKind.CannotLeaveServerNoticeRoom + RustErrorKind.CannotOverwriteMedia -> ErrorKind.CannotOverwriteMedia + RustErrorKind.CaptchaInvalid -> ErrorKind.CaptchaInvalid + RustErrorKind.CaptchaNeeded -> ErrorKind.CaptchaNeeded + RustErrorKind.ConnectionFailed -> ErrorKind.ConnectionFailed + RustErrorKind.ConnectionTimeout -> ErrorKind.ConnectionTimeout + is RustErrorKind.Custom -> ErrorKind.Custom(errcode) + RustErrorKind.DuplicateAnnotation -> ErrorKind.DuplicateAnnotation + RustErrorKind.Exclusive -> ErrorKind.Exclusive + RustErrorKind.Forbidden -> ErrorKind.Forbidden + RustErrorKind.GuestAccessForbidden -> ErrorKind.GuestAccessForbidden + is RustErrorKind.IncompatibleRoomVersion -> ErrorKind.IncompatibleRoomVersion(roomVersion) + RustErrorKind.InvalidParam -> ErrorKind.InvalidParam + RustErrorKind.InvalidRoomState -> ErrorKind.InvalidRoomState + RustErrorKind.InvalidUsername -> ErrorKind.InvalidUsername + is RustErrorKind.LimitExceeded -> ErrorKind.LimitExceeded(retryAfterMs?.toLong()) + RustErrorKind.MissingParam -> ErrorKind.MissingParam + RustErrorKind.MissingToken -> ErrorKind.MissingToken + RustErrorKind.NotFound -> ErrorKind.NotFound + RustErrorKind.NotJson -> ErrorKind.NotJson + RustErrorKind.NotYetUploaded -> ErrorKind.NotYetUploaded + is RustErrorKind.ResourceLimitExceeded -> ErrorKind.ResourceLimitExceeded(adminContact) + RustErrorKind.RoomInUse -> ErrorKind.RoomInUse + RustErrorKind.ServerNotTrusted -> ErrorKind.ServerNotTrusted + RustErrorKind.ThreepidAuthFailed -> ErrorKind.ThreepidAuthFailed + RustErrorKind.ThreepidDenied -> ErrorKind.ThreepidDenied + RustErrorKind.ThreepidInUse -> ErrorKind.ThreepidInUse + RustErrorKind.ThreepidMediumNotSupported -> ErrorKind.ThreepidMediumNotSupported + RustErrorKind.ThreepidNotFound -> ErrorKind.ThreepidNotFound + RustErrorKind.TooLarge -> ErrorKind.TooLarge + RustErrorKind.UnableToAuthorizeJoin -> ErrorKind.UnableToAuthorizeJoin + RustErrorKind.UnableToGrantJoin -> ErrorKind.UnableToGrantJoin + RustErrorKind.Unauthorized -> ErrorKind.Unauthorized + RustErrorKind.Unknown -> ErrorKind.Unknown + is RustErrorKind.UnknownToken -> ErrorKind.UnknownToken(softLogout) + RustErrorKind.Unrecognized -> ErrorKind.Unrecognized + RustErrorKind.UnsupportedRoomVersion -> ErrorKind.UnsupportedRoomVersion + RustErrorKind.UrlNotSet -> ErrorKind.UrlNotSet + RustErrorKind.UserDeactivated -> ErrorKind.UserDeactivated + RustErrorKind.UserInUse -> ErrorKind.UserInUse + RustErrorKind.UserLocked -> ErrorKind.UserLocked + RustErrorKind.UserSuspended -> ErrorKind.UserSuspended + RustErrorKind.WeakPassword -> ErrorKind.WeakPassword + is RustErrorKind.WrongRoomKeysVersion -> ErrorKind.WrongRoomKeysVersion(currentVersion) + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt index 0be4ccbc67a..5b39595e203 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt @@ -37,7 +37,6 @@ class MatrixRoomInfoMapper { topic = it.topic, avatarUrl = it.avatarUrl, isDirect = it.isDirect, - isPublic = it.isPublic, joinRule = it.joinRule?.map(), isSpace = it.isSpace, isTombstoned = it.isTombstoned, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustPendingRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustPendingRoom.kt deleted file mode 100644 index f53cf957ac7..00000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustPendingRoom.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 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.libraries.matrix.impl.room - -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.api.room.PendingRoom -import io.element.android.libraries.matrix.api.room.RoomMembershipObserver -import org.matrix.rustcomponents.sdk.RoomPreview - -class RustPendingRoom( - override val sessionId: SessionId, - override val roomId: RoomId, - private val inner: RoomPreview, - private val roomMembershipObserver: RoomMembershipObserver, -) : PendingRoom { - override suspend fun leave(): Result = runCatching { - inner.leave() - }.onSuccess { - roomMembershipObserver.notifyUserLeftRoom(roomId) - } - - override fun close() { - inner.destroy() - } -} 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 f19d75e7522..4488b2c036b 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 @@ -16,8 +16,8 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.RoomPreview 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.roomlist.fullRoomWithTimeline @@ -28,7 +28,6 @@ import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import org.matrix.rustcomponents.sdk.Membership import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.RoomListException import org.matrix.rustcomponents.sdk.RoomListItem @@ -36,7 +35,6 @@ import timber.log.Timber import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService private const val CACHE_SIZE = 16 -private val PENDING_MEMBERSHIPS = setOf(Membership.INVITED, Membership.KNOCKED) class RustRoomFactory( private val sessionId: SessionId, @@ -125,7 +123,7 @@ class RustRoomFactory( } } - suspend fun createPendingRoom(roomId: RoomId): PendingRoom? = withContext(dispatcher) { + suspend fun createRoomPreview(roomId: RoomId): RoomPreview? = withContext(dispatcher) { if (isDestroyed) { Timber.d("Room factory is destroyed, returning null for $roomId") return@withContext null @@ -135,19 +133,18 @@ class RustRoomFactory( Timber.d("Room not found for $roomId") return@withContext null } - if (roomListItem.membership() !in PENDING_MEMBERSHIPS) { - Timber.d("Room $roomId is not in pending state") + if (roomListItem.membership() !in RustRoomPreview.ALLOWED_MEMBERSHIPS) { + Timber.d("Room $roomId is not in allowed membership") return@withContext null } val innerRoom = try { roomListItem.previewRoom(via = emptyList()) } catch (e: Exception) { - Timber.e(e, "Failed to get pending room for $roomId") + Timber.e(e, "Failed to get room preview for $roomId") return@withContext null } - RustPendingRoom( + RustRoomPreview( sessionId = sessionId, - roomId = roomId, inner = innerRoom, roomMembershipObserver = roomMembershipObserver, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomPreview.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomPreview.kt new file mode 100644 index 00000000000..0739a2cd0f5 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomPreview.kt @@ -0,0 +1,54 @@ +/* + * Copyright 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.libraries.matrix.impl.room + +import androidx.compose.runtime.Immutable +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.room.RoomMembershipDetails +import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper +import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewInfoMapper +import org.matrix.rustcomponents.sdk.Membership +import org.matrix.rustcomponents.sdk.RoomPreview as InnerRoomPreview + +@Immutable +class RustRoomPreview( + override val sessionId: SessionId, + private val inner: InnerRoomPreview, + private val roomMembershipObserver: RoomMembershipObserver?, +) : RoomPreview { + companion object { + val ALLOWED_MEMBERSHIPS = setOf(Membership.INVITED, Membership.KNOCKED, Membership.BANNED) + } + + override val info: RoomPreviewInfo = RoomPreviewInfoMapper.map(inner.info()) + + override suspend fun leave(): Result = runCatching { + inner.leave() + }.onSuccess { + roomMembershipObserver?.notifyUserLeftRoom(info.roomId) + } + + override suspend fun forget(): Result = runCatching { + inner.forget() + } + + override suspend fun membershipDetails(): Result = runCatching { + val details = inner.ownMembershipDetails() ?: return@runCatching null + RoomMembershipDetails( + currentUserMember = RoomMemberMapper.map(details.ownRoomMember), + senderMember = details.senderRoomMember?.let { RoomMemberMapper.map(it) }, + ) + } + + override fun close() { + inner.destroy() + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt index 5df7b6044b4..99fec55a02e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/member/RoomMemberMapper.kt @@ -25,6 +25,7 @@ object RoomMemberMapper { normalizedPowerLevel = roomMember.normalizedPowerLevel, isIgnored = roomMember.isIgnored, role = mapRole(roomMember.suggestedRoleForPowerLevel), + membershipChangeReason = roomMember.membershipChangeReason ) fun mapRole(role: RoomMemberRole): RoomMember.Role = diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt index c80ce425297..fd21548224e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt @@ -11,9 +11,8 @@ import io.element.android.libraries.core.bool.orFalse 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.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.impl.room.join.map import io.element.android.libraries.matrix.impl.room.map -import org.matrix.rustcomponents.sdk.JoinRule -import org.matrix.rustcomponents.sdk.Membership import org.matrix.rustcomponents.sdk.RoomPreviewInfo as RustRoomPreviewInfo object RoomPreviewInfoMapper { @@ -27,10 +26,8 @@ object RoomPreviewInfoMapper { numberOfJoinedMembers = info.numJoinedMembers.toLong(), roomType = info.roomType.map(), isHistoryWorldReadable = info.isHistoryWorldReadable.orFalse(), - isJoined = info.membership == Membership.JOINED, - isInvited = info.membership == Membership.INVITED, - isPublic = info.joinRule == JoinRule.Public, - canKnock = info.joinRule == JoinRule.Knock + membership = info.membership?.map(), + joinRule = info.joinRule.map(), ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt index 2cb1a4efa50..1fbfea7b13d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/RustTimeline.kt @@ -48,6 +48,7 @@ import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.Flow @@ -296,7 +297,7 @@ class RustTimeline( htmlBody: String?, intentionalMentions: List, ): Result = withContext(dispatcher) { - runCatching { + runCatching { val editedContent = EditedContent.RoomMessage( content = MessageEventContent.from( body = body, @@ -324,10 +325,12 @@ class RustTimeline( }, mentions = null, ) - inner.edit( - newContent = editedContent, - eventOrTransactionId = eventOrTransactionId.toRustEventOrTransactionId(), - ) + withContext(Dispatchers.IO) { + inner.edit( + newContent = editedContent, + eventOrTransactionId = eventOrTransactionId.toRustEventOrTransactionId(), + ) + } } } @@ -519,7 +522,7 @@ class RustTimeline( newContent = editedContent, eventOrTransactionId = RustEventOrTransactionId.EventId(pollStartId.value), ) - }.map { } + } } override suspend fun sendPollResponse( diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt index aaa8ecc9ec5..1befd53ae0e 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt @@ -85,7 +85,6 @@ class MatrixRoomInfoMapperTest { topic = "topic", avatarUrl = AN_AVATAR_URL, isDirect = true, - isPublic = false, isSpace = false, isTombstoned = false, isFavorite = false, @@ -167,7 +166,6 @@ class MatrixRoomInfoMapperTest { topic = null, avatarUrl = null, isDirect = false, - isPublic = true, joinRule = null, isSpace = false, isTombstoned = false, diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt index 11a851eee6f..4b832799cca 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt @@ -8,14 +8,16 @@ package io.element.android.libraries.matrix.impl.room.preview import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomPreviewInfo import io.element.android.libraries.matrix.test.A_ROOM_ALIAS import io.element.android.libraries.matrix.test.A_ROOM_ID import org.junit.Test -import org.matrix.rustcomponents.sdk.JoinRule import org.matrix.rustcomponents.sdk.Membership +import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule class RoomPreviewInfoMapperTest { @Test @@ -23,7 +25,7 @@ class RoomPreviewInfoMapperTest { assertThat( RoomPreviewInfoMapper.map( info = aRustRoomPreviewInfo( - membership = null, + membership = Membership.JOINED, ) ) ).isEqualTo( @@ -36,10 +38,8 @@ class RoomPreviewInfoMapperTest { numberOfJoinedMembers = 1L, roomType = RoomType.Room, isHistoryWorldReadable = true, - isJoined = false, - isInvited = false, - isPublic = true, - canKnock = false, + membership = CurrentUserMembership.JOINED, + joinRule = JoinRule.Public, ) ) } @@ -51,7 +51,7 @@ class RoomPreviewInfoMapperTest { info = aRustRoomPreviewInfo( canonicalAlias = null, membership = Membership.JOINED, - joinRule = JoinRule.Knock, + joinRule = RustJoinRule.Knock, ) ) ).isEqualTo( @@ -64,10 +64,8 @@ class RoomPreviewInfoMapperTest { numberOfJoinedMembers = 1L, roomType = RoomType.Room, isHistoryWorldReadable = true, - isJoined = true, - isInvited = false, - isPublic = false, - canKnock = true, + membership = CurrentUserMembership.JOINED, + joinRule = JoinRule.Knock, ) ) } 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 6cce2e2f985..93c2d4c075a 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 @@ -23,10 +23,9 @@ import io.element.android.libraries.matrix.api.notificationsettings.Notification import io.element.android.libraries.matrix.api.oidc.AccountManagementAction import io.element.android.libraries.matrix.api.pusher.PushersService import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver +import io.element.android.libraries.matrix.api.room.RoomPreview import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias -import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService import io.element.android.libraries.matrix.api.roomlist.RoomListService import io.element.android.libraries.matrix.api.roomlist.RoomSummary @@ -79,7 +78,7 @@ class FakeMatrixClient( Optional.of(ResolvedRoomAlias(A_ROOM_ID, emptyList())) ) }, - private val getRoomPreviewInfoResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) }, + private val getRoomPreviewResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) }, private val clearCacheLambda: () -> Unit = { lambdaError() }, private val userIdServerNameLambda: () -> String = { lambdaError() }, private val getUrlLambda: (String) -> Result = { lambdaError() }, @@ -105,7 +104,6 @@ class FakeMatrixClient( private var createDmResult: Result = Result.success(A_ROOM_ID) private var findDmResult: RoomId? = A_ROOM_ID private val getRoomResults = mutableMapOf() - val getPendingRoomResults = mutableMapOf() private val searchUserResults = mutableMapOf>() private val getProfileResults = mutableMapOf>() private var uploadMediaResult: Result = Result.success(AN_AVATAR_URL) @@ -132,8 +130,8 @@ class FakeMatrixClient( return getRoomResults[roomId] } - override suspend fun getPendingRoom(roomId: RoomId): PendingRoom? { - return getPendingRoomResults[roomId] + override suspend fun getPendingRoom(roomId: RoomId): RoomPreview? = simulateLongTask { + getRoomPreviewResult(RoomIdOrAlias.Id(roomId), emptyList()).getOrNull() } override suspend fun findDM(userId: UserId): RoomId? { @@ -313,8 +311,8 @@ class FakeMatrixClient( resolveRoomAliasResult(roomAlias) } - override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask { - getRoomPreviewInfoResult(roomIdOrAlias, serverNames) + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask { + getRoomPreviewResult(roomIdOrAlias, serverNames) } override suspend fun getRecentlyVisitedRooms(): Result> { diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakePendingRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakePendingRoom.kt deleted file mode 100644 index 79392cbc440..00000000000 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakePendingRoom.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 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.libraries.matrix.test.room - -import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.api.room.PendingRoom -import io.element.android.libraries.matrix.test.A_ROOM_ID -import io.element.android.libraries.matrix.test.A_SESSION_ID -import io.element.android.tests.testutils.lambda.lambdaError -import io.element.android.tests.testutils.simulateLongTask - -class FakePendingRoom( - override val sessionId: SessionId = A_SESSION_ID, - override val roomId: RoomId = A_ROOM_ID, - private val declineInviteResult: () -> Result = { lambdaError() } -) : PendingRoom { - override suspend fun leave(): Result = simulateLongTask { - declineInviteResult() - } - - override fun close() = Unit -} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeRoomPreview.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeRoomPreview.kt new file mode 100644 index 00000000000..80908c52288 --- /dev/null +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeRoomPreview.kt @@ -0,0 +1,40 @@ +/* + * Copyright 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.libraries.matrix.test.room + +import androidx.compose.runtime.Immutable +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.room.RoomMembershipDetails +import io.element.android.libraries.matrix.api.room.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.test.A_SESSION_ID +import io.element.android.tests.testutils.lambda.lambdaError +import io.element.android.tests.testutils.simulateLongTask + +@Immutable +class FakeRoomPreview( + override val sessionId: SessionId = A_SESSION_ID, + override val info: RoomPreviewInfo = aRoomPreviewInfo(), + private val declineInviteResult: () -> Result = { lambdaError() }, + private val forgetRoomResult: () -> Result = { lambdaError() }, + private val roomMembershipDetails: () -> Result = { lambdaError() }, +) : RoomPreview { + override suspend fun leave(): Result = simulateLongTask { + declineInviteResult() + } + + override suspend fun forget(): Result = simulateLongTask { + forgetRoomResult() + } + + override suspend fun membershipDetails(): Result = simulateLongTask { + roomMembershipDetails() + } + + override fun close() = Unit +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt index ed62d96d98b..50a4c30a853 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt @@ -34,7 +34,6 @@ fun aRoomInfo( topic: String? = A_ROOM_TOPIC, avatarUrl: String? = AN_AVATAR_URL, isDirect: Boolean = false, - isPublic: Boolean = true, joinRule: JoinRule? = JoinRule.Public, isSpace: Boolean = false, isTombstoned: Boolean = false, @@ -43,8 +42,8 @@ fun aRoomInfo( alternativeAliases: List = emptyList(), currentUserMembership: CurrentUserMembership = CurrentUserMembership.JOINED, inviter: RoomMember? = null, - activeMembersCount: Long = 1, - invitedMembersCount: Long = 0, + activeMembersCount: Long = 2, + invitedMembersCount: Long = 1, joinedMembersCount: Long = 1, highlightCount: Long = 0, notificationCount: Long = 0, @@ -67,7 +66,6 @@ fun aRoomInfo( topic = topic, avatarUrl = avatarUrl, isDirect = isDirect, - isPublic = isPublic, joinRule = joinRule, isSpace = isSpace, isTombstoned = isTombstoned, diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt index 9a8c35d86d4..f4f7f3d835b 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomMemberFixture.kt @@ -21,6 +21,7 @@ fun aRoomMember( normalizedPowerLevel: Long = 0L, isIgnored: Boolean = false, role: RoomMember.Role = RoomMember.Role.USER, + membershipChangeReason: String? = null, ) = RoomMember( userId = userId, displayName = displayName, @@ -31,4 +32,5 @@ fun aRoomMember( normalizedPowerLevel = normalizedPowerLevel, isIgnored = isIgnored, role = role, + membershipChangeReason = membershipChangeReason, ) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomPreviewInfoFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomPreviewInfoFixture.kt new file mode 100644 index 00000000000..ab52880ef7b --- /dev/null +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomPreviewInfoFixture.kt @@ -0,0 +1,61 @@ +/* + * Copyright 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.libraries.matrix.test.room + +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.SessionId +import io.element.android.libraries.matrix.api.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.RoomMembershipDetails +import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRule +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.test.AN_AVATAR_URL +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.matrix.test.A_ROOM_NAME +import io.element.android.libraries.matrix.test.A_ROOM_TOPIC +import io.element.android.libraries.matrix.test.A_SESSION_ID +import io.element.android.tests.testutils.lambda.lambdaError + +fun aRoomPreview( + sessionId: SessionId = A_SESSION_ID, + info: RoomPreviewInfo = aRoomPreviewInfo(), + declineInviteResult: () -> Result = { lambdaError() }, + forgetRoomResult: () -> Result = { lambdaError() }, + roomMembershipDetails: () -> Result = { lambdaError() }, +) = FakeRoomPreview( + sessionId = sessionId, + info = info, + declineInviteResult = declineInviteResult, + forgetRoomResult = forgetRoomResult, + roomMembershipDetails = roomMembershipDetails, +) + +fun aRoomPreviewInfo( + roomId: RoomId = A_ROOM_ID, + name: String? = A_ROOM_NAME, + topic: String? = A_ROOM_TOPIC, + avatarUrl: String? = AN_AVATAR_URL, + joinRule: JoinRule = JoinRule.Public, + isSpace: Boolean = false, + canonicalAlias: RoomAlias? = null, + currentUserMembership: CurrentUserMembership? = null, + numberOfJoinedMembers: Long = 1, + isHistoryWorldReadable: Boolean = true, +) = RoomPreviewInfo( + roomId = roomId, + name = name, + topic = topic, + avatarUrl = avatarUrl, + joinRule = joinRule, + canonicalAlias = canonicalAlias, + numberOfJoinedMembers = numberOfJoinedMembers, + roomType = if (isSpace) RoomType.Space else RoomType.Room, + isHistoryWorldReadable = isHistoryWorldReadable, + membership = currentUserMembership, +) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt index df34bcc734b..c85fe824d5f 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt @@ -47,7 +47,6 @@ fun aRoomSummary( topic: String? = A_ROOM_TOPIC, avatarUrl: String? = null, isDirect: Boolean = false, - isPublic: Boolean = true, joinRule: JoinRule? = JoinRule.Public, isSpace: Boolean = false, isTombstoned: Boolean = false, @@ -82,7 +81,6 @@ fun aRoomSummary( topic = topic, avatarUrl = avatarUrl, isDirect = isDirect, - isPublic = isPublic, joinRule = joinRule, isSpace = isSpace, isTombstoned = isTombstoned, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt index 936955008db..fa9cf5156ce 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarActionBottomSheet.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -97,7 +96,7 @@ private fun AvatarActionBottomSheetContent( Text( text = stringResource(action.titleResId), style = ElementTheme.typography.fontBodyLgRegular, - color = if (action.destructive) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary, + color = if (action.destructive) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textPrimary, ) }, leadingContent = ListItemContent.Icon(IconSource.Resource(action.iconResourceId)), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt index 9f7583972f5..1a0cd53f6d3 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -27,6 +26,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -79,7 +79,7 @@ fun EditableAvatarView( modifier = Modifier .align(Alignment.BottomEnd) .clip(CircleShape) - .background(MaterialTheme.colorScheme.primary) + .background(ElementTheme.colors.iconPrimary) .size(24.dp), contentAlignment = Alignment.Center, ) { @@ -87,7 +87,7 @@ fun EditableAvatarView( modifier = Modifier.size(16.dp), imageVector = CompoundIcons.EditSolid(), contentDescription = null, - tint = MaterialTheme.colorScheme.onPrimary, + tint = ElementTheme.colors.iconOnSolidPrimary, ) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt index a081a990a55..008438305d9 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @@ -40,7 +39,7 @@ fun InviteSenderView( Text( text = inviteSender.annotatedString(), style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, ) } } @@ -56,8 +55,9 @@ internal fun InviteSenderViewPreview() = ElementPreview { id = "@bob:example.com", name = "Bob", url = null, - size = AvatarSize.InviteSender - ) + size = AvatarSize.InviteSender, + ), + membershipChangeReason = null, ) ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt index 6aea3b6dfde..55833caf595 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt @@ -77,14 +77,14 @@ private fun MatrixUserHeaderContent( maxLines = 1, style = ElementTheme.typography.fontHeadingSmMedium, overflow = TextOverflow.Ellipsis, - color = ElementTheme.materialColors.primary, + color = ElementTheme.colors.textPrimary, ) // Id if (matrixUser.displayName.isNullOrEmpty().not()) { Text( text = matrixUser.userId.value, style = ElementTheme.typography.fontBodyMdRegular, - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt index e43c52f5b05..11f6b74b95c 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedRoom.kt @@ -26,6 +26,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter 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.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.CompositeAvatar @@ -65,21 +66,21 @@ fun SelectedRoom( ) } Surface( - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.iconPrimary, modifier = Modifier - .clip(CircleShape) - .size(20.dp) - .align(Alignment.TopEnd) - .clickable( - indication = ripple(), - interactionSource = remember { MutableInteractionSource() }, - onClick = { onRemoveRoom(roomInfo) } - ), + .clip(CircleShape) + .size(20.dp) + .align(Alignment.TopEnd) + .clickable( + indication = ripple(), + interactionSource = remember { MutableInteractionSource() }, + onClick = { onRemoveRoom(roomInfo) } + ), ) { Icon( imageVector = CompoundIcons.Close(), contentDescription = stringResource(id = CommonStrings.action_remove), - tint = MaterialTheme.colorScheme.onPrimary, + tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier.padding(2.dp) ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt index 028c31ec78f..dfccefa1167 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -58,7 +57,7 @@ fun UnresolvedUserRow( text = id, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyLgMedium, ) @@ -75,12 +74,11 @@ fun UnresolvedUserRow( .size(18.dp) .align(Alignment.Top) .padding(2.dp), - tint = MaterialTheme.colorScheme.error, + tint = ElementTheme.colors.iconCriticalPrimary, ) - Text( text = stringResource(CommonStrings.common_invite_unknown_profile), - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmRegular.copy(lineHeight = 16.sp), ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnsavedAvatar.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnsavedAvatar.kt index b78f256deb1..bbbf014e99d 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnsavedAvatar.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnsavedAvatar.kt @@ -67,7 +67,7 @@ fun UnsavedAvatar( modifier = Modifier .align(Alignment.Center) .size(40.dp), - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, ) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt index 2889c33f995..2f5874b664b 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UserRow.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -51,14 +50,14 @@ internal fun UserRow( text = name, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, style = ElementTheme.typography.fontBodyLgRegular, ) // Id subtext?.let { Text( text = subtext, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmRegular, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToView.kt index ed30daf76fe..3fb4ddd74a6 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/reply/InReplyToView.kt @@ -140,7 +140,7 @@ private fun ReplyToErrorContent( Text( text = data.message, style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.error, + color = ElementTheme.colors.textCriticalPrimary, maxLines = 2, overflow = TextOverflow.Ellipsis, ) @@ -171,7 +171,7 @@ private fun ReplyToContentText(metadata: InReplyToMetadata?) { if (iconResourceId != null) { Icon( resourceId = iconResourceId, - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, contentDescription = null, modifier = Modifier.size(16.dp) ) @@ -182,7 +182,7 @@ private fun ReplyToContentText(metadata: InReplyToMetadata?) { style = ElementTheme.typography.fontBodyMdRegular, fontStyle = fontStyle, textAlign = TextAlign.Start, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 2, overflow = TextOverflow.Ellipsis, ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt index 0c0f4e4e2db..d59e9cf24f0 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/sender/SenderName.kt @@ -10,7 +10,6 @@ package io.element.android.libraries.matrix.ui.messages.sender import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -77,7 +76,7 @@ private fun RowScope.MainText( val color = when (mode) { is SenderNameMode.Timeline -> mode.mainColor SenderNameMode.ActionList, - SenderNameMode.Reply -> MaterialTheme.colorScheme.primary + SenderNameMode.Reply -> ElementTheme.colors.textPrimary } Text( modifier = modifier.clipToBounds(), @@ -108,7 +107,7 @@ private fun RowScope.SecondaryText( modifier = modifier.clipToBounds(), text = text, style = style, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt index 265668f0f61..778d535fc63 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt @@ -7,7 +7,6 @@ package io.element.android.libraries.matrix.ui.model -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.ui.platform.LocalContext @@ -15,6 +14,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.UserId @@ -26,6 +26,7 @@ data class InviteSender( val userId: UserId, val displayName: String, val avatarData: AvatarData, + val membershipChangeReason: String?, ) { @Composable fun annotatedString(): AnnotatedString { @@ -37,7 +38,7 @@ data class InviteSender( AnnotatedString.Range( SpanStyle( fontWeight = FontWeight.Medium, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ), start = senderNameStart, end = senderNameStart + displayName.length @@ -52,4 +53,5 @@ fun RoomMember.toInviteSender() = InviteSender( userId = userId, displayName = displayName ?: "", avatarData = getAvatarData(size = AvatarSize.InviteSender), + membershipChangeReason = membershipChangeReason ) diff --git a/libraries/matrixui/src/main/res/values-cs/translations.xml b/libraries/matrixui/src/main/res/values-cs/translations.xml index 0e557cc546e..a8e82b288ce 100644 --- a/libraries/matrixui/src/main/res/values-cs/translations.xml +++ b/libraries/matrixui/src/main/res/values-cs/translations.xml @@ -1,4 +1,7 @@ + "Poslat pozvánku" + "Chcete začít chatovat s %1$s?" + "Poslat pozvánku?" "%1$s (%2$s) vás pozval(a)" diff --git a/libraries/matrixui/src/main/res/values-de/translations.xml b/libraries/matrixui/src/main/res/values-de/translations.xml index 591fe783280..67d42162c3e 100644 --- a/libraries/matrixui/src/main/res/values-de/translations.xml +++ b/libraries/matrixui/src/main/res/values-de/translations.xml @@ -1,4 +1,7 @@ + "Einladung senden" + "Möchten Sie einen Chat mit %1$s starten?" + "Einladung senden?" "%1$s (%2$s) hat dich eingeladen" diff --git a/libraries/matrixui/src/main/res/values-et/translations.xml b/libraries/matrixui/src/main/res/values-et/translations.xml index 5e36d57d33d..bd9840940e1 100644 --- a/libraries/matrixui/src/main/res/values-et/translations.xml +++ b/libraries/matrixui/src/main/res/values-et/translations.xml @@ -1,4 +1,7 @@ + "Saada kutse" + "Kas sa soovid alustada vestlust kasutajaga %1$s?" + "Kas saadame kutse?" "%1$s (%2$s) saatis sulle kutse" diff --git a/libraries/matrixui/src/main/res/values-fi/translations.xml b/libraries/matrixui/src/main/res/values-fi/translations.xml index abed5f4a884..156f7f2ac23 100644 --- a/libraries/matrixui/src/main/res/values-fi/translations.xml +++ b/libraries/matrixui/src/main/res/values-fi/translations.xml @@ -1,4 +1,6 @@ + "Lähetä kutsu" + "Lähetetäänkö kutsu?" "%1$s (%2$s) kutsui sinut" diff --git a/libraries/matrixui/src/main/res/values-fr/translations.xml b/libraries/matrixui/src/main/res/values-fr/translations.xml index fc024258fad..ca952f53c07 100644 --- a/libraries/matrixui/src/main/res/values-fr/translations.xml +++ b/libraries/matrixui/src/main/res/values-fr/translations.xml @@ -1,4 +1,7 @@ + "Envoyer l’invitation" + "Voulez-vous entamer une discussion avec %1$s ?" + "Envoyer l’invitation ?" "%1$s (%2$s) vous a invité(e)" diff --git a/libraries/matrixui/src/main/res/values-hu/translations.xml b/libraries/matrixui/src/main/res/values-hu/translations.xml index 573f8e1f10b..f22454cd169 100644 --- a/libraries/matrixui/src/main/res/values-hu/translations.xml +++ b/libraries/matrixui/src/main/res/values-hu/translations.xml @@ -1,4 +1,7 @@ + "Meghívó küldése" + "Csevegést kezd vele: %1$s?" + "Meghívó küldése?" "%1$s (%2$s) meghívta" diff --git a/libraries/matrixui/src/main/res/values-it/translations.xml b/libraries/matrixui/src/main/res/values-it/translations.xml index 5f31ef01ba9..eb9370de4b8 100644 --- a/libraries/matrixui/src/main/res/values-it/translations.xml +++ b/libraries/matrixui/src/main/res/values-it/translations.xml @@ -1,4 +1,6 @@ + "Invia invito" + "Inviare invito?" "%1$s (%2$s) ti ha invitato" diff --git a/libraries/matrixui/src/main/res/values-pl/translations.xml b/libraries/matrixui/src/main/res/values-pl/translations.xml index 3c5d9a0d7f8..caa2c0e07d7 100644 --- a/libraries/matrixui/src/main/res/values-pl/translations.xml +++ b/libraries/matrixui/src/main/res/values-pl/translations.xml @@ -1,4 +1,7 @@ + "Wyślij zaproszenie" + "Czy chcesz rozpocząć czat z %1$s?" + "Wysłać zaproszenie?" "%1$s (%2$s) zaprosił Cię" diff --git a/libraries/matrixui/src/main/res/values-pt/translations.xml b/libraries/matrixui/src/main/res/values-pt/translations.xml index 5b5f8269128..c3cb0dcbda8 100644 --- a/libraries/matrixui/src/main/res/values-pt/translations.xml +++ b/libraries/matrixui/src/main/res/values-pt/translations.xml @@ -1,4 +1,7 @@ + "Enviar convite" + "Gostarias de iniciar uma conversa com %1$s?" + "Enviar convite?" "%1$s (%2$s) convidou-te" diff --git a/libraries/matrixui/src/main/res/values-ru/translations.xml b/libraries/matrixui/src/main/res/values-ru/translations.xml index 4e076cde1d4..44c30532d0c 100644 --- a/libraries/matrixui/src/main/res/values-ru/translations.xml +++ b/libraries/matrixui/src/main/res/values-ru/translations.xml @@ -1,4 +1,7 @@ + "Отправить приглашение" + "Хотите начать чат с %1$s?" + "Отправить приглашение?" "%1$s (%2$s) пригласил вас" diff --git a/libraries/matrixui/src/main/res/values-sk/translations.xml b/libraries/matrixui/src/main/res/values-sk/translations.xml index 0fada643d59..57b644f1ee1 100644 --- a/libraries/matrixui/src/main/res/values-sk/translations.xml +++ b/libraries/matrixui/src/main/res/values-sk/translations.xml @@ -1,4 +1,7 @@ + "Odoslať pozvánku" + "Chceli by ste začať rozhovor s používateľom %1$s?" + "Poslať pozvánku?" "%1$s (%2$s) vás pozval/a" diff --git a/libraries/matrixui/src/main/res/values-tr/translations.xml b/libraries/matrixui/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..dc065e1d751 --- /dev/null +++ b/libraries/matrixui/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "Davet gönder" + "%1$s ile sohbet başlatmak ister misiniz?" + "Davet gönder?" + "%1$s (%2$s) sizi davet etti" + diff --git a/libraries/matrixui/src/main/res/values-uk/translations.xml b/libraries/matrixui/src/main/res/values-uk/translations.xml index 5b4209626ac..324bb960865 100644 --- a/libraries/matrixui/src/main/res/values-uk/translations.xml +++ b/libraries/matrixui/src/main/res/values-uk/translations.xml @@ -1,4 +1,7 @@ + "Надіслати запрошення" + "Хочете розпочати бесіду з %1$s?" + "Надіслати запрошення?" "%1$s (%2$s) запрошує вас" diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDeleteConfirmationBottomSheet.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDeleteConfirmationBottomSheet.kt index 451569233f9..2b3fcb144d1 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDeleteConfirmationBottomSheet.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDeleteConfirmationBottomSheet.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -141,7 +140,7 @@ private fun MediaRow( // Info Text( text = state.mediaInfo.mimeType + " - " + state.mediaInfo.formattedFileSize, - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodySmRegular, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt index 90baecb9889..5d4b67a411d 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/details/MediaDetailsBottomSheet.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -165,7 +164,7 @@ private fun SenderRow( // Id Text( text = mediaInfo.senderId?.value.orEmpty(), - color = MaterialTheme.colorScheme.secondary, + color = ElementTheme.colors.textSecondary, maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodyMdRegular, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt index 4449e5eefdd..8120788c5fe 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt @@ -14,6 +14,7 @@ import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.api.local.LocalMediaRenderer +import me.saket.telephoto.zoomable.OverzoomEffect import me.saket.telephoto.zoomable.ZoomSpec import me.saket.telephoto.zoomable.rememberZoomableState import javax.inject.Inject @@ -24,7 +25,7 @@ class DefaultLocalMediaRenderer @Inject constructor() : LocalMediaRenderer { override fun Render(localMedia: LocalMedia) { val localMediaViewState = rememberLocalMediaViewState( zoomableState = rememberZoomableState( - zoomSpec = ZoomSpec(maxZoomFactor = 4f, preventOverOrUnderZoom = false) + zoomSpec = ZoomSpec(maxZoomFactor = 4f, overzoomEffect = OverzoomEffect.NoLimits) ) ) LocalMediaView( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/audio/MediaAudioView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/audio/MediaAudioView.kt index 226aa85234e..119cf8d3e71 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/audio/MediaAudioView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/audio/MediaAudioView.kt @@ -25,7 +25,6 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.GraphicEq -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf @@ -261,13 +260,13 @@ private fun ExoPlayerMediaAudioView( modifier = Modifier .size(72.dp) .clip(CircleShape) - .background(MaterialTheme.colorScheme.onBackground), + .background(ElementTheme.colors.iconPrimary), contentAlignment = Alignment.Center, ) { Icon( imageVector = Icons.Outlined.GraphicEq, contentDescription = null, - tint = MaterialTheme.colorScheme.background, + tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier .size(32.dp), ) @@ -335,7 +334,7 @@ private fun AudioInfoView( style = ElementTheme.typography.fontBodyMdRegular, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ) } if (info != null) { @@ -346,7 +345,7 @@ private fun AudioInfoView( style = ElementTheme.typography.fontBodyLgRegular, overflow = TextOverflow.Ellipsis, textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ) Spacer(modifier = Modifier.height(4.dp)) Text( @@ -354,7 +353,7 @@ private fun AudioInfoView( style = ElementTheme.typography.fontBodyMdRegular, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ) } } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/file/MediaFileView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/file/MediaFileView.kt index 7cc48dbd698..7f8a7bd5ae8 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/file/MediaFileView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/file/MediaFileView.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.GraphicEq -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -72,13 +71,13 @@ fun MediaFileView( modifier = Modifier .size(72.dp) .clip(CircleShape) - .background(MaterialTheme.colorScheme.onBackground), + .background(ElementTheme.colors.iconPrimary), contentAlignment = Alignment.Center, ) { Icon( imageVector = if (isAudio) Icons.Outlined.GraphicEq else CompoundIcons.Attachment(), contentDescription = null, - tint = MaterialTheme.colorScheme.background, + tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier .size(32.dp) .rotate(if (isAudio) 0f else -45f), @@ -92,7 +91,7 @@ fun MediaFileView( style = ElementTheme.typography.fontBodyLgRegular, overflow = TextOverflow.Ellipsis, textAlign = TextAlign.Center, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ) Spacer(modifier = Modifier.height(4.dp)) Text( @@ -100,7 +99,7 @@ fun MediaFileView( style = ElementTheme.typography.fontBodyMdRegular, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.primary + color = ElementTheme.colors.textPrimary ) } } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt index 3ba57cae337..438e60ff6b7 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt @@ -81,6 +81,7 @@ import io.element.android.libraries.mediaviewer.impl.local.rememberLocalMediaVie import io.element.android.libraries.mediaviewer.impl.util.bgCanvasWithTransparency import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.delay +import me.saket.telephoto.zoomable.OverzoomEffect import me.saket.telephoto.zoomable.ZoomSpec import me.saket.telephoto.zoomable.rememberZoomableState @@ -297,7 +298,7 @@ private fun MediaViewerPage( ) { Box(contentAlignment = Alignment.Center) { val zoomableState = rememberZoomableState( - zoomSpec = ZoomSpec(maxZoomFactor = 4f, preventOverOrUnderZoom = false) + zoomSpec = ZoomSpec(maxZoomFactor = 4f, overzoomEffect = OverzoomEffect.NoLimits) ) val localMediaViewState = rememberLocalMediaViewState(zoomableState) val showThumbnail = !localMediaViewState.isReady diff --git a/libraries/mediaviewer/impl/src/main/res/values-cs/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-cs/translations.xml index 3cab2b499a8..bcb7b642377 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-cs/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-cs/translations.xml @@ -16,8 +16,6 @@ "Název souboru" "Žádné další soubory k zobrazení" "Žádná další média k zobrazení" - "Tento soubor bude odstraněn z místnosti a členové k němu nebudou mít přístup." - "Smazat soubor?" "Nahrál(a)" "Nahráno" diff --git a/libraries/mediaviewer/impl/src/main/res/values-de/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-de/translations.xml index f7cb2c9e606..e27fd3f1cc1 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-de/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-de/translations.xml @@ -16,8 +16,6 @@ "Dateiname" "Keine weiteren Dateien zum Anzeigen" "Keine weiteren Medien mehr zum Anzeigen" - "Diese Datei wird aus dem Chatroom entfernt und die Mitglieder werden keinen Zugriff mehr darauf haben." - "Datei löschen?" "Hochgeladen von" "Hochgeladen am" diff --git a/libraries/mediaviewer/impl/src/main/res/values-el/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-el/translations.xml index 8452eb9158d..3427270aae4 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-el/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-el/translations.xml @@ -11,8 +11,6 @@ "Πολυμέσα και αρχεία" "Μορφή αρχείου" "Όνομα αρχείου" - "Αυτό το αρχείο θα αφαιρεθεί από το δωμάτιο και τα μέλη δεν θα έχουν πρόσβαση σε αυτό." - "Διαγραφή αρχείου;" "Μεταφορτώθηκε από" "Μεταφορτώθηκε στις" diff --git a/libraries/mediaviewer/impl/src/main/res/values-et/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-et/translations.xml index d66433e52ec..63329a797d1 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-et/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-et/translations.xml @@ -16,8 +16,6 @@ "Failinimi" "Pole enam kuvatavaid faile" "Pole enam kuvatavat meediat" - "Järgnevaga eemaldame selle faili jututoast ja tema liikmed enam ei pääse failile ligi." - "Kas kustutame faili?" "Üleslaadija" "Üleslaaditud" diff --git a/libraries/mediaviewer/impl/src/main/res/values-fi/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-fi/translations.xml index b477b7c94fd..b3728cb9b7b 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-fi/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-fi/translations.xml @@ -16,8 +16,6 @@ "Tiedostonimi" "Ei enää näytettäviä tiedostoja" "Ei enää näytettävää mediaa" - "Tämä tiedosto poistetaan huoneesta, eikä jäsenillä ole enää pääsyä siihen." - "Poistetaanko tiedosto?" "Lähettäjä" "Lähetetty" diff --git a/libraries/mediaviewer/impl/src/main/res/values-fr/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-fr/translations.xml index 007356e3f6e..b6334095ab0 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-fr/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-fr/translations.xml @@ -16,8 +16,6 @@ "Nom du fichier" "Il n’y a plus de fichiers à montrer" "Il n’y a plus de médias à montrer" - "Ce fichier sera supprimé du salon et les membres n’y auront plus accès." - "Supprimer le fichier ?" "Envoyé par" "Envoyé le" diff --git a/libraries/mediaviewer/impl/src/main/res/values-hu/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-hu/translations.xml index 8876145e582..14cc11fb96c 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-hu/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-hu/translations.xml @@ -16,8 +16,6 @@ "Fájlnév" "Nincs több megjeleníthető fájl" "Nincs több megjeleníthető média" - "Ez a fájl el lesz távolítva a szobából, és a tagok nem férhetnek hozzá." - "Törli a fájlt?" "Feltöltötte:" "Feltöltve:" diff --git a/libraries/mediaviewer/impl/src/main/res/values-it/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-it/translations.xml index 1bdbfa08d93..72701194fc6 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-it/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-it/translations.xml @@ -16,8 +16,6 @@ "Nome del file" "Nessun altro file da mostrare" "Non ci sono più contenuti multimediali da mostrare" - "Questo file verrà rimosso dalla stanza e i membri non ne avranno accesso." - "Eliminare il file?" "Caricato da" "Caricato il" diff --git a/libraries/mediaviewer/impl/src/main/res/values-pl/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-pl/translations.xml index 289b75a4d86..c398123873b 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-pl/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-pl/translations.xml @@ -2,6 +2,7 @@ "Ten plik zostanie usunięty z pokoju, a członkowie nie będą mieli do niego dostępu." "Usunąć plik?" + "Sprawdź połączenie internetowe i spróbuj ponownie." "Dokumenty, pliki audio i wiadomości głosowe przesłane do tego pokoju będą wyświetlane tutaj." "Jeszcze nie przesłano plików" "Wczytywanie plików…" @@ -13,8 +14,8 @@ "Media i pliki" "Format pliku" "Nazwa pliku" - "Plik zostanie usunięty z pokoju, a członkowie nie będą mieli do niego dostępu." - "Usunąć plik?" + "Brak plików do pokazania" + "Brak mediów do pokazania" "Przesłane przez" "Przesłane w dniu" diff --git a/libraries/mediaviewer/impl/src/main/res/values-pt/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-pt/translations.xml index d36fb9cf83b..453a00969d5 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-pt/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-pt/translations.xml @@ -2,6 +2,9 @@ "Este ficheiro será removido da sala e os membros deixarão de o poder aceder." "Eliminar ficheiro?" + "Verifica a tua ligação à Internet e tenta novamente." + "Documentos, ficheiros de áudio e mensagens de voz carregados para esta sala serão mostrados aqui." + "Ainda sem qualquer ficheiro" "A carregar ficheiros…" "A carregar multimédia…" "Ficheiros" @@ -11,7 +14,8 @@ "Multimédia e ficheiros" "Formato do ficheiro" "Nome do ficheiro" - "Eliminar ficheiro?" + "Sem mais ficheiros para mostrar" + "Sem mais multimédia para mostrar" "Enviado por" "Enviado a" diff --git a/libraries/mediaviewer/impl/src/main/res/values-ru/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-ru/translations.xml index df898e332fd..0598d68fa54 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-ru/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-ru/translations.xml @@ -16,8 +16,6 @@ "Имя файла" "Больше нет файлов для показа" "Больше нет медиа для показа" - "Этот файл будет удален из комнаты и у участников не будет к нему доступа." - "Удалить файл?" "Загружено" "Загружено на" diff --git a/libraries/mediaviewer/impl/src/main/res/values-sk/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-sk/translations.xml index 2b9dbd39529..4cfc16b3b3e 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-sk/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-sk/translations.xml @@ -16,8 +16,6 @@ "Názov súboru" "Žiadne ďalšie súbory na zobrazenie" "Žiadne ďalšie médiá na zobrazenie" - "Tento súbor bude odstránený z miestnosti a členovia k nemu nebudú mať prístup." - "Vymazať súbor?" "Nahrané používateľom" "Nahrané dňa" diff --git a/libraries/mediaviewer/impl/src/main/res/values-sv/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-sv/translations.xml new file mode 100644 index 00000000000..29508b461a4 --- /dev/null +++ b/libraries/mediaviewer/impl/src/main/res/values-sv/translations.xml @@ -0,0 +1,16 @@ + + + "Den här filen kommer att tas bort från rummet och medlemmar kommer inte att ha tillgång till den." + "Radera fil?" + "Laddar in filer…" + "Läser in media…" + "Filer" + "Media" + "Bilder och videor som laddas upp till detta rum kommer att visas här." + "Ingen media uppladdad ännu" + "Media och filer" + "Filformat" + "Filnamn" + "Uppladdad av" + "Uppladdad på" + diff --git a/libraries/mediaviewer/impl/src/main/res/values-tr/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..30a1d13c4df --- /dev/null +++ b/libraries/mediaviewer/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,21 @@ + + + "Bu dosya odadan kaldırılır ve üyeler bu dosyaya erişemez." + "Dosyayı sil?" + "İnternet bağlantınızı kontrol edin ve tekrar deneyin." + "Bu odaya yüklenen belgeler, ses dosyaları ve sesli mesajlar burada gösterilecektir." + "Henüz yüklenen dosya yok" + "Dosyalar yükleniyor…" + "Medya yükleniyor…" + "Dosyalar" + "Medya" + "Bu odaya yüklenen resimler ve videolar burada gösterilecektir." + "Henüz yüklenen medya yok" + "Medya ve dosyalar" + "Dosya biçimi" + "Dosya adı" + "Gösterilecek daha fazla dosya yok" + "Gösterilecek daha fazla medya yok" + "Yükleyen:" + "Yüklendi" + diff --git a/libraries/mediaviewer/impl/src/main/res/values-uk/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-uk/translations.xml index 33bb4ed210d..45e1e1703be 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-uk/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-uk/translations.xml @@ -14,8 +14,8 @@ "Медіа та файли" "Формат файлу" "Назва файлу" - "Цей файл буде вилучено з кімнати, і учасники не матимуть доступу до нього." - "Видалити файл?" + "Більше немає файлів для показу" + "Більше немає медіа для показу" "Вивантажено користувачем" "Вивантажено" diff --git a/libraries/mediaviewer/impl/src/main/res/values-zh-rTW/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-zh-rTW/translations.xml index 41c45054193..9f0ec120112 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-zh-rTW/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-zh-rTW/translations.xml @@ -14,8 +14,6 @@ "媒體與檔案" "檔案格式" "檔案名稱" - "此檔案將會從聊天室中移除,成員將無法存取該檔案。" - "刪除檔案?" "上傳者:" "上傳於" diff --git a/libraries/mediaviewer/impl/src/main/res/values-zh/translations.xml b/libraries/mediaviewer/impl/src/main/res/values-zh/translations.xml index 0a8b73eb544..08b33993dc2 100644 --- a/libraries/mediaviewer/impl/src/main/res/values-zh/translations.xml +++ b/libraries/mediaviewer/impl/src/main/res/values-zh/translations.xml @@ -16,8 +16,6 @@ "文件名" "没有更多文件可显示了" "没有更多媒体可显示了" - "此文件将从房间中删除,并且成员将无法访问它。" - "删除文件?" "上传者:" "上传于" diff --git a/libraries/mediaviewer/impl/src/main/res/values/localazy.xml b/libraries/mediaviewer/impl/src/main/res/values/localazy.xml index 52a22183318..2982f8002fc 100644 --- a/libraries/mediaviewer/impl/src/main/res/values/localazy.xml +++ b/libraries/mediaviewer/impl/src/main/res/values/localazy.xml @@ -16,8 +16,6 @@ "File name" "No more files to show" "No more media to show" - "This file will be removed from the room and members won’t have access to it." - "Delete file?" "Uploaded by" "Uploaded on" diff --git a/libraries/permissions/api/src/main/res/values-tr/translations.xml b/libraries/permissions/api/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..20451d91cff --- /dev/null +++ b/libraries/permissions/api/src/main/res/values-tr/translations.xml @@ -0,0 +1,7 @@ + + + "Uygulamanın kamerayı kullanmasına izin vermek için lütfen sistem ayarlarından izin verin." + "Lütfen sistem ayarlarından izin verin." + "Uygulamanın mikrofonu kullanmasına izin vermek için lütfen sistem ayarlarından izin verin." + "Uygulamanın bildirimleri görüntülemesine izin vermek için lütfen sistem ayarlarından izin verin." + diff --git a/libraries/permissions/impl/src/main/res/values-tr/translations.xml b/libraries/permissions/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..84407bc0301 --- /dev/null +++ b/libraries/permissions/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,5 @@ + + + "Uygulamanın bildirimleri gösterebildiğini kontrol edin." + "İzinleri kontrol et" + diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt index 58e148c184a..8d1d866edd5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt @@ -13,7 +13,6 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.MatrixRoom -import io.element.android.libraries.matrix.api.sync.SyncService import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent @@ -21,7 +20,6 @@ import io.element.android.services.appnavstate.api.AppForegroundStateService import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull -import java.util.concurrent.atomic.AtomicInteger import javax.inject.Inject import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds @@ -32,27 +30,28 @@ class SyncOnNotifiableEvent @Inject constructor( private val appForegroundStateService: AppForegroundStateService, private val dispatchers: CoroutineDispatchers, ) { - private var syncCounter = AtomicInteger(0) - suspend operator fun invoke(notifiableEvent: NotifiableEvent) = withContext(dispatchers.io) { val isRingingCallEvent = notifiableEvent is NotifiableRingingCallEvent if (!featureFlagService.isFeatureEnabled(FeatureFlags.SyncOnPush) && !isRingingCallEvent) { return@withContext } val client = matrixClientProvider.getOrRestore(notifiableEvent.sessionId).getOrNull() ?: return@withContext + client.getRoom(notifiableEvent.roomId)?.use { room -> room.subscribeToSync() - // If the app is in foreground, sync is already running, so just add the subscription. + // If the app is in foreground, sync is already running, so we just add the subscription above. if (!appForegroundStateService.isInForeground.value) { - val syncService = client.syncService() - syncService.startSyncIfNeeded() if (isRingingCallEvent) { room.waitsUntilUserIsInTheCall(timeout = 60.seconds) } else { - room.waitsUntilEventIsKnown(eventId = notifiableEvent.eventId, timeout = 10.seconds) + try { + appForegroundStateService.updateIsSyncingNotificationEvent(true) + room.waitsUntilEventIsKnown(eventId = notifiableEvent.eventId, timeout = 10.seconds) + } finally { + appForegroundStateService.updateIsSyncingNotificationEvent(false) + } } - syncService.stopSyncIfNeeded() } } } @@ -81,16 +80,4 @@ class SyncOnNotifiableEvent @Inject constructor( } } } - - private suspend fun SyncService.startSyncIfNeeded() { - if (syncCounter.getAndIncrement() == 0) { - startSync() - } - } - - private suspend fun SyncService.stopSyncIfNeeded() { - if (syncCounter.decrementAndGet() == 0 && !appForegroundStateService.isInForeground.value) { - stopSync() - } - } } diff --git a/libraries/push/impl/src/main/res/values-cs/translations.xml b/libraries/push/impl/src/main/res/values-cs/translations.xml index 15a5d22de92..cc312757836 100644 --- a/libraries/push/impl/src/main/res/values-cs/translations.xml +++ b/libraries/push/impl/src/main/res/values-cs/translations.xml @@ -16,7 +16,7 @@ "%d oznámení" "Oznámení" - "Příchozí hovor" + "📹 Příchozí hovor" "** Nepodařilo se odeslat - otevřete prosím místnost" "Vstoupit" "Odmítnout" diff --git a/libraries/push/impl/src/main/res/values-fi/translations.xml b/libraries/push/impl/src/main/res/values-fi/translations.xml index 61c0890fd3c..dab7f15fc0b 100644 --- a/libraries/push/impl/src/main/res/values-fi/translations.xml +++ b/libraries/push/impl/src/main/res/values-fi/translations.xml @@ -14,7 +14,7 @@ "%d ilmoitusta" "Ilmoitus" - "Saapuva puhelu" + "📹 Saapuva puhelu" "** Lähetys epäonnistui - avaa huone" "Liity" "Hylkää" diff --git a/libraries/push/impl/src/main/res/values-fr/translations.xml b/libraries/push/impl/src/main/res/values-fr/translations.xml index eb386ed459f..a198daec642 100644 --- a/libraries/push/impl/src/main/res/values-fr/translations.xml +++ b/libraries/push/impl/src/main/res/values-fr/translations.xml @@ -14,7 +14,7 @@ "%d notifications" "Notification" - "Appel entrant" + "📹 Appel entrant" "** Échec de l’envoi - veuillez ouvrir le salon" "Rejoindre" "Rejeter" diff --git a/libraries/push/impl/src/main/res/values-pl/translations.xml b/libraries/push/impl/src/main/res/values-pl/translations.xml index 1cd641e6f21..ee79042700c 100644 --- a/libraries/push/impl/src/main/res/values-pl/translations.xml +++ b/libraries/push/impl/src/main/res/values-pl/translations.xml @@ -16,7 +16,7 @@ "%d powiadomień" "Powiadomienie" - "Przychodzące połączenie" + "📹 Połączenie przychodzące" "** Nie udało się wysłać - proszę otworzyć pokój" "Dołącz" "Odrzuć" diff --git a/libraries/push/impl/src/main/res/values-pt/translations.xml b/libraries/push/impl/src/main/res/values-pt/translations.xml index 49fa8271313..24ddc2f2162 100644 --- a/libraries/push/impl/src/main/res/values-pt/translations.xml +++ b/libraries/push/impl/src/main/res/values-pt/translations.xml @@ -14,7 +14,7 @@ "%d notificações" "Notificação" - "Chamada recebida" + "📹 A receber chamada" "** Falha no envio - por favor abre a sala" "Entrar" "Rejeitar" diff --git a/libraries/push/impl/src/main/res/values-ru/translations.xml b/libraries/push/impl/src/main/res/values-ru/translations.xml index 0387c42f2d8..5b7167a787c 100644 --- a/libraries/push/impl/src/main/res/values-ru/translations.xml +++ b/libraries/push/impl/src/main/res/values-ru/translations.xml @@ -16,7 +16,7 @@ "%d уведомлений" "Уведомление" - "Входящий вызов" + "📹 Входящий вызов" "** Не удалось отправить - пожалуйста, откройте комнату" "Присоединиться" "Отклонить" diff --git a/libraries/push/impl/src/main/res/values-sv/translations.xml b/libraries/push/impl/src/main/res/values-sv/translations.xml index d9c096af3d9..f0ed7547323 100644 --- a/libraries/push/impl/src/main/res/values-sv/translations.xml +++ b/libraries/push/impl/src/main/res/values-sv/translations.xml @@ -14,7 +14,7 @@ "%d aviseringar" "notis" - "Inkommande samtal" + "📹 Inkommande samtal" "** Misslyckades att skicka - vänligen öppna rummet" "Gå med" "Avvisa" diff --git a/libraries/push/impl/src/main/res/values-tr/translations.xml b/libraries/push/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..06f21783be4 --- /dev/null +++ b/libraries/push/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,81 @@ + + + "Çağrı" + "Etkinlikleri dinlemek" + "Gürültülü bildirimler" + "Çalan aramalar" + "Sessiz bildirimler" + + "%1$s: %2$d mesaj" + "%1$s: %2$d mesaj" + + + "%d bildirim" + "%d bildirim" + + "Bildirim" + "📹 Gelen çağrı" + "** Gönderilemedi - lütfen odayı açın" + "Katıl" + "Reddet" + + "%d davet" + "%d davet" + + "Sizi sohbete davet etti" + "%1$s sizi sohbete davet etti" + "Senden bahsettim: %1$s" + "Yeni Mesajlar" + + "%d yeni mesaj" + "%d yeni mesaj" + + "%1$s ile tepki verildi" + "Okundu olarak işaretle" + "Hızlı cevap" + "Sizi odaya katılmaya davet etti" + "%1$s sizi odaya katılmaya davet etti" + "Ben" + "%1$s belirtildi veya yanıtlandı" + "Bildirimi görüntülüyorsunuz! Beni tıklayın!" + "%1$s: %2$s" + "%1$s: %2$s %3$s" + + "%d okunmamış mesaj bildirimi" + "%d okunmamış mesaj bildirimi" + + "%1$s ve %2$s" + "%1$s içinde %2$s" + "%1$s içinde %2$s ve %3$s" + + "%d oda" + "%d oda" + + "Arkaplan senkronizasyonu" + "Google Hizmetleri" + "Geçerli bir Google Play Hizmeti bulunamadı. Bildirimler düzgün çalışmayabilir." + "Geçerli sağlayıcının adını al." + "Hiçbir gönderme sağlayıcısı seçilmedi." + "Geçerli gönderme sağlayıcısı: %1$s." + "Geçerli gönderme sağlayıcısı" + "Uygulamanın en az bir gönderme sağlayıcısına sahip olduğundan emin olun." + "Gönderim sağlayıcısı bulunamadı." + + "%1$d gönderme sağlayıcısı bulundu: %2$s" + "%1$d gönderme sağlayıcısı bulundu: %2$s" + + "Gönderme sağlayıcılarını tespit et" + "Uygulamanın bildirim görüntüleyebildiğini kontrol edin." + "Bildirime tıklanmadı." + "Bildirim görüntülenemiyor." + "Bildirime tıklandı!" + "Bildirimi görüntüle" + "Teste devam etmek için lütfen bildirime tıklayın." + "Uygulamanın push aldığından emin olun." + "Hata: itici isteği reddetti." + "Hata: %1$s." + "Hata, itme test edilemiyor." + "Hata, push beklenirken zaman aşımı oluştu." + "Geri itme döngüsü %1$d ms sürdü." + "Test Geri İtme döngüsü" + diff --git a/libraries/push/impl/src/main/res/values-uk/translations.xml b/libraries/push/impl/src/main/res/values-uk/translations.xml index 71e8f14d613..22f3b6e2ec6 100644 --- a/libraries/push/impl/src/main/res/values-uk/translations.xml +++ b/libraries/push/impl/src/main/res/values-uk/translations.xml @@ -16,7 +16,7 @@ "%d сповіщень" "Сповіщення" - "Вхідний виклик" + "📹 Вхідний виклик" "** Не вдалося надіслати - відкрийте кімнату" "Доєднатися" "Відхилити" diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEventTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEventTest.kt index 08b14e5680a..35dddbce6fe 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEventTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEventTest.kt @@ -7,6 +7,8 @@ package io.element.android.libraries.push.impl.push +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.MatrixClient @@ -17,6 +19,7 @@ import io.element.android.libraries.matrix.test.A_UNIQUE_ID import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.FakeMatrixClientProvider import io.element.android.libraries.matrix.test.room.FakeMatrixRoom +import io.element.android.libraries.matrix.test.room.aRoomInfo import io.element.android.libraries.matrix.test.sync.FakeSyncService import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem @@ -26,13 +29,16 @@ import io.element.android.services.appnavstate.test.FakeAppForegroundStateServic import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.testCoroutineDispatchers -import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.runTest import org.junit.Test +import java.util.concurrent.atomic.AtomicBoolean +import kotlin.time.Duration.Companion.seconds class SyncOnNotifiableEventTest { private val timelineItems = MutableStateFlow>(emptyList()) @@ -73,60 +79,98 @@ class SyncOnNotifiableEventTest { assert(subscribeToSyncLambda).isNeverCalled() } + @OptIn(ExperimentalCoroutinesApi::class) @Test - fun `when feature flag is enabled, a ringing call starts and stops the sync`() = runTest { - val sut = createSyncOnNotifiableEvent(client = client, isAppInForeground = false, isSyncOnPushEnabled = true) + fun `when feature flag is enabled, a ringing call waits until the room is in 'in-call' state`() = runTest { + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + ) + val sut = createSyncOnNotifiableEvent(client = client, appForegroundStateService = appForegroundStateService, isSyncOnPushEnabled = true) + val unlocked = AtomicBoolean(false) + launch { + advanceTimeBy(1.seconds) + unlocked.set(true) + room.givenRoomInfo(aRoomInfo(hasRoomCall = true)) + } sut(incomingCallNotifiableEvent) - assert(startSyncLambda).isCalledOnce() - assert(stopSyncLambda).isCalledOnce() - assert(subscribeToSyncLambda).isCalledOnce() + // The process was completed before the timeout + assertThat(unlocked.get()).isTrue() } + @OptIn(ExperimentalCoroutinesApi::class) @Test - fun `when feature flag is disabled, a ringing call starts and stops the sync`() = runTest { - val sut = createSyncOnNotifiableEvent(client = client, isAppInForeground = false, isSyncOnPushEnabled = false) + fun `when feature flag is enabled, a ringing call waits until the room is in 'in-call' state or timeouts`() = runTest { + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + ) + val sut = createSyncOnNotifiableEvent(client = client, appForegroundStateService = appForegroundStateService, isSyncOnPushEnabled = true) + val unlocked = AtomicBoolean(false) + launch { + advanceTimeBy(120.seconds) + unlocked.set(true) + room.givenRoomInfo(aRoomInfo(hasRoomCall = true)) + } sut(incomingCallNotifiableEvent) - assert(startSyncLambda).isCalledOnce() - assert(stopSyncLambda).isCalledOnce() - assert(subscribeToSyncLambda).isCalledOnce() + // Didn't unlock before the timeout + assertThat(unlocked.get()).isFalse() } @Test fun `when feature flag is enabled and app is in foreground, sync is not started`() = runTest { - val sut = createSyncOnNotifiableEvent(client = client, isAppInForeground = true, isSyncOnPushEnabled = true) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = true, + ) + val sut = createSyncOnNotifiableEvent(client = client, appForegroundStateService = appForegroundStateService, isSyncOnPushEnabled = true) - sut(notifiableEvent) - sut(incomingCallNotifiableEvent) + appForegroundStateService.isSyncingNotificationEvent.test { + sut(notifiableEvent) + sut(incomingCallNotifiableEvent) - assert(startSyncLambda).isNeverCalled() - assert(stopSyncLambda).isNeverCalled() - assert(subscribeToSyncLambda).isCalledExactly(2) + // It's initially false + assertThat(awaitItem()).isFalse() + // It never becomes true + ensureAllEventsConsumed() + } } @Test fun `when feature flag is enabled and app is in background, sync is started and stopped`() = runTest { - val sut = createSyncOnNotifiableEvent(client = client, isAppInForeground = false, isSyncOnPushEnabled = true) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + ) + val sut = createSyncOnNotifiableEvent(client = client, appForegroundStateService = appForegroundStateService, isSyncOnPushEnabled = true) timelineItems.emit( listOf(MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem())) ) - syncService.emitSyncState(SyncState.Running) - sut(notifiableEvent) - assert(startSyncLambda).isCalledOnce() - assert(stopSyncLambda).isCalledOnce() - assert(subscribeToSyncLambda).isCalledOnce() + appForegroundStateService.isSyncingNotificationEvent.test { + syncService.emitSyncState(SyncState.Running) + sut(notifiableEvent) + + // It's initially false + assertThat(awaitItem()).isFalse() + // Then it becomes true when we receive the push + assertThat(awaitItem()).isTrue() + // It becomes false once when the push is processed + assertThat(awaitItem()).isFalse() + + ensureAllEventsConsumed() + } } @Test fun `when feature flag is enabled and app is in background, running multiple time only call once`() = runTest { - val sut = createSyncOnNotifiableEvent(client = client, isAppInForeground = false, isSyncOnPushEnabled = true) + val appForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = false, + ) + val sut = createSyncOnNotifiableEvent(client = client, appForegroundStateService = appForegroundStateService, isSyncOnPushEnabled = true) - coroutineScope { + appForegroundStateService.isSyncingNotificationEvent.test { launch { sut(notifiableEvent) } launch { sut(notifiableEvent) } launch { @@ -135,26 +179,30 @@ class SyncOnNotifiableEventTest { listOf(MatrixTimelineItem.Event(A_UNIQUE_ID, anEventTimelineItem())) ) } - } - assert(startSyncLambda).isCalledOnce() - assert(stopSyncLambda).isCalledOnce() - assert(subscribeToSyncLambda).isCalledExactly(2) + // It's initially false + assertThat(awaitItem()).isFalse() + // Then it becomes true once, for the first received push + assertThat(awaitItem()).isTrue() + // It becomes false once all pushes are processed + assertThat(awaitItem()).isFalse() + + ensureAllEventsConsumed() + } } private fun TestScope.createSyncOnNotifiableEvent( client: MatrixClient = FakeMatrixClient(), isSyncOnPushEnabled: Boolean = true, - isAppInForeground: Boolean = true, + appForegroundStateService: FakeAppForegroundStateService = FakeAppForegroundStateService( + initialForegroundValue = true, + ) ): SyncOnNotifiableEvent { val featureFlagService = FakeFeatureFlagService( initialState = mapOf( FeatureFlags.SyncOnPush.key to isSyncOnPushEnabled ) ) - val appForegroundStateService = FakeAppForegroundStateService( - initialValue = isAppInForeground - ) val matrixClientProvider = FakeMatrixClientProvider { Result.success(client) } return SyncOnNotifiableEvent( matrixClientProvider = matrixClientProvider, diff --git a/libraries/pushproviders/firebase/src/main/res/values-tr/translations.xml b/libraries/pushproviders/firebase/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..af9b7c2318e --- /dev/null +++ b/libraries/pushproviders/firebase/src/main/res/values-tr/translations.xml @@ -0,0 +1,11 @@ + + + "Firebase\'in kullanılabilir olduğundan emin olun." + "Firebase kullanılamıyor." + "Firebase kullanılabilir." + "Firebase\'i kontrol et" + "Firebase belirtecinin mevcut olduğundan emin olun." + "Firebase belirteci bilinmiyor." + "Firebase belirteci: %1$s." + "Firebase jetonunu kontrol edin" + diff --git a/libraries/pushproviders/unifiedpush/src/main/res/values-tr/translations.xml b/libraries/pushproviders/unifiedpush/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..5fee0a69386 --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/main/res/values-tr/translations.xml @@ -0,0 +1,10 @@ + + + "UnifiedPush distribütörlerinin mevcut olduğundan emin olun." + "İtme dağıtıcı bulunamadı." + + "%1$d dağıtıcı bulundu: %2$s." + "%1$d dağıtıcı bulundu: %2$s." + + "UnifiedPush\'u kontrol edin" + diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ComposerModeView.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ComposerModeView.kt index bd5451b397b..1299f994632 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ComposerModeView.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ComposerModeView.kt @@ -88,7 +88,7 @@ private fun EditingModeView( Icon( imageVector = CompoundIcons.Edit(), contentDescription = null, - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .padding(vertical = 8.dp) .size(16.dp), @@ -97,7 +97,7 @@ private fun EditingModeView( text = text, style = ElementTheme.typography.fontBodySmRegular, textAlign = TextAlign.Start, - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, modifier = Modifier .padding(vertical = 8.dp) .weight(1f) @@ -105,7 +105,7 @@ private fun EditingModeView( Icon( imageVector = CompoundIcons.Close(), contentDescription = stringResource(CommonStrings.action_close), - tint = ElementTheme.materialColors.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .padding(top = 8.dp, bottom = 8.dp, start = 16.dp, end = 12.dp) .size(16.dp) @@ -140,7 +140,7 @@ private fun ReplyToModeView( Icon( imageVector = CompoundIcons.Close(), contentDescription = stringResource(CommonStrings.action_close), - tint = MaterialTheme.colorScheme.secondary, + tint = ElementTheme.colors.iconSecondary, modifier = Modifier .padding(end = 4.dp, top = 4.dp, start = 8.dp, bottom = 16.dp) .size(16.dp) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ElementRichTextEditorStyle.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ElementRichTextEditorStyle.kt index f7ff275e3a5..bf13b8016c1 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ElementRichTextEditorStyle.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/ElementRichTextEditorStyle.kt @@ -27,9 +27,9 @@ object ElementRichTextEditorStyle { return baseStyle.copy( text = baseStyle.text.copy( color = if (hasFocus) { - ElementTheme.materialColors.primary + ElementTheme.colors.textPrimary } else { - ElementTheme.materialColors.secondary + ElementTheme.colors.textSecondary }, lineHeight = TextUnit.Unspecified, includeFontPadding = true, diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt index 4e69a1b6a6c..d965a3d0d6d 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/VoiceMessagePreview.kt @@ -84,7 +84,7 @@ internal fun VoiceMessagePreview( Text( text = time.formatShort(), - color = ElementTheme.materialColors.secondary, + color = ElementTheme.colors.textSecondary, style = ElementTheme.typography.fontBodySmMedium, maxLines = 1, overflow = TextOverflow.Ellipsis, diff --git a/libraries/textcomposer/impl/src/main/res/values-hu/translations.xml b/libraries/textcomposer/impl/src/main/res/values-hu/translations.xml index 0353dca4196..2b61cbd50f9 100644 --- a/libraries/textcomposer/impl/src/main/res/values-hu/translations.xml +++ b/libraries/textcomposer/impl/src/main/res/values-hu/translations.xml @@ -4,7 +4,7 @@ "Felsorolás be/ki" "Formázási beállítások bezárása" "Kódblokk be/ki" - "Nem kötelező felirat…" + "Felirat hozzáadása…" "Üzenet…" "Hivatkozás létrehozása" "Hivatkozás szerkesztése" diff --git a/libraries/textcomposer/impl/src/main/res/values-nb/translations.xml b/libraries/textcomposer/impl/src/main/res/values-nb/translations.xml index 4dcab4e7553..90601b710dd 100644 --- a/libraries/textcomposer/impl/src/main/res/values-nb/translations.xml +++ b/libraries/textcomposer/impl/src/main/res/values-nb/translations.xml @@ -1,5 +1,7 @@ + "Aktiver/deaktiver punktliste" + "Aktiver kodeblokk" "Melding…" "Opprett en lenke" "Rediger lenke" @@ -10,6 +12,8 @@ "Innrykk" "Bruk inline-kodeformat" "Angi lenke" + "Aktiver/deaktiver nummerert liste" + "Slå på sitat" "Fjern lenke" "Fjern innrykk" "Lenke" diff --git a/libraries/textcomposer/impl/src/main/res/values-sv/translations.xml b/libraries/textcomposer/impl/src/main/res/values-sv/translations.xml index 02f5ede9f5c..ca402f750ba 100644 --- a/libraries/textcomposer/impl/src/main/res/values-sv/translations.xml +++ b/libraries/textcomposer/impl/src/main/res/values-sv/translations.xml @@ -4,6 +4,7 @@ "Växla punktlista" "Stäng formateringsalternativ" "Växla kodblock" + "Lägg till en bildtext" "Meddelande …" "Skapa en länk" "Redigera länk" diff --git a/libraries/textcomposer/impl/src/main/res/values-tr/translations.xml b/libraries/textcomposer/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..95796c5174e --- /dev/null +++ b/libraries/textcomposer/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,26 @@ + + + "Ek ekle" + "Madde işaretli listeyi aç/kapat" + "Biçimlendirme seçeneklerini kapat" + "Kod Bloğunu Aç/Kapat" + "Açıklama ekle" + "Mesaj…" + "Bir bağlantı oluştur" + "Bağlantıyı Düzenle" + "Kalın biçimi uygula" + "İtalik biçimi uygula" + "Üstü çizili biçimi uygula" + "Altı çizili biçimi uygula" + "Tam ekran modunu aç/kapat" + "Girinti" + "Satır içi kod biçimini uygula" + "Bağlantıyı ayarla" + "Numaralı listeyi aç/kapat" + "Oluşturma seçeneklerini aç" + "Alıntıyı Aç/Kapat" + "Bağlantıyı kaldır" + "Girintiyi kaldır" + "Bağlantı" + "Kaydetmek için basılı tut" + diff --git a/libraries/troubleshoot/impl/src/main/res/values-tr/translations.xml b/libraries/troubleshoot/impl/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..24dba503e1a --- /dev/null +++ b/libraries/troubleshoot/impl/src/main/res/values-tr/translations.xml @@ -0,0 +1,11 @@ + + + "Testleri çalıştır" + "Testleri yeniden çalıştır" + "Bazı testler başarısız oldu. Lütfen ayrıntıları kontrol edin." + "Yapılandırmanızda bildirimlerin beklendiği gibi davranmamasına neden olabilecek herhangi bir sorunu algılamak için testleri çalıştırın." + "Düzeltmeye çalışın" + "Tüm testler başarıyla geçti." + "Sorun Giderme Bildirimleri" + "Bazı testlere bakmanız gerekiyor. Lütfen ayrıntıları kontrol edin." + 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 43806c92150..bd2647b3181 100644 --- a/libraries/ui-strings/src/main/res/values-cs/translations.xml +++ b/libraries/ui-strings/src/main/res/values-cs/translations.xml @@ -145,7 +145,7 @@ "Zkopírováno do schránky" "Autorská práva" "Vytváření místnosti…" - "Opustit místnost" + "Místnost opuštěna" "Tmavé" "Chyba dešifrování" "Možnosti pro vývojáře" @@ -196,6 +196,7 @@ Důvod: %1$s." "Zpráva byla odstraněna" "Moderní" "Ztlumit" + "%1$s (%2$s)" "Žádné výsledky" "Žádný název místnosti" "Offline" @@ -245,7 +246,7 @@ Důvod: %1$s." "Nastavení" "Sdílená poloha" "Odhlašování" - "Něco se pokazilo" + "Něco se nepovedlo" "Zahajování chatu…" "Nálepka" "Úspěch" @@ -274,6 +275,7 @@ Důvod: %1$s." "Ověřeno" "Ověřit zařízení" "Ověření totožnosti" + "Ověřit uživatele" "Video" "Hlasová zpráva" "Čekání…" @@ -300,6 +302,7 @@ Důvod: %1$s." "%1$s nemá oprávnění k přístupu k vaší poloze. Přístup můžete povolit v Nastavení." "%1$s nemá oprávnění k přístupu k vaší poloze. Povolit přístup níže." "%1$s nemá oprávnění k přístupu k mikrofonu. Povolte přístup k nahrávání hlasové zprávy." + "Může to být způsobeno problémy se sítí nebo serverem." "Tato adresa místnosti již existuje, zkuste prosím upravit pole adresy místnosti nebo změnit název místnosti" "Některé znaky nejsou povoleny. Podporovány jsou pouze písmena, číslice a následující symboly ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Některé zprávy nebyly odeslány" 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 d9c55b2819e..540b6ae5668 100644 --- a/libraries/ui-strings/src/main/res/values-de/translations.xml +++ b/libraries/ui-strings/src/main/res/values-de/translations.xml @@ -193,6 +193,7 @@ Grund: %1$s." "Nachricht entfernt" "Modern" "Stumm" + "%1$s(%2$s)" "Keine Ergebnisse" "Kein Raumname" "Offline" @@ -270,6 +271,7 @@ Grund: %1$s." "Verifiziert" "Gerät verifizieren" "Identität überprüfen" + "Benutzer verifizieren" "Video" "Sprachnachricht" "Warten…" @@ -278,6 +280,7 @@ Grund: %1$s." "%1$s\'s Identität has sich offenbar geändert. %2$s" "%1$s\'s %2$s Identität hat sich offenbar geändert. %3$s" "(%1$s)" + "Die verifizierte Identität von %1$s hat sich geändert." "Die verifizierte Identität von %1$s\'s %2$s hat sich geändert. %3$s" "Verifizierung zurückziehen" "Bestätigung" @@ -296,6 +299,7 @@ Grund: %1$s." "%1$s hat keine Erlaubnis, auf deinen Standort zuzugreifen. Du kannst den Zugriff in den Einstellungen aktivieren." "%1$s hat keine Erlaubnis, auf deinen Standort zuzugreifen. Aktiviere unten den Zugriff." "%1$s hat nicht die Erlaubnis auf dein Mikrofon zuzugreifen. Aktiviere den Zugriff, um eine Sprachnachricht aufzunehmen." + "Dies kann auf Netzwerk- oder Serverprobleme zurückzuführen sein." "Diese Chatroomadresse existiert bereits. Bitte versuchen Sie, das Adressenfeld des Chatrooms zu bearbeiten oder den Namen des Chatrooms zu ändern" "Einige Zeichen sind nicht erlaubt. Es werden nur Buchstaben, Ziffern und die folgenden Symbole unterstützt: ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Einige Nachrichten wurden nicht gesendet" @@ -338,7 +342,7 @@ Grund: %1$s." "Nachricht wird geladen…" "Alle anzeigen" "Chat" - "Beitrittsanfrage gesendet" + "Beitrittsanfrage geschickt" "Standort teilen" "Meinen Standort teilen" "In Apple Maps öffnen" 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 47b4bcae03f..46cb0e4d6dc 100644 --- a/libraries/ui-strings/src/main/res/values-et/translations.xml +++ b/libraries/ui-strings/src/main/res/values-et/translations.xml @@ -193,6 +193,7 @@ Põhjus: %1$s." "Sõnum on eemaldatud" "Kaasaegne" "Summutatud" + "%1$s (%2$s)" "Otsingul pole tulemusi" "Jututoal puudub nimi" "Võrgust väljas" @@ -270,6 +271,7 @@ Põhjus: %1$s." "Verifitseeritud" "Verifitseeri seade" "Verifitseeri võrguidentiteet" + "Verifitseeri kasutaja" "Video" "Häälsõnum" "Ootame…" @@ -278,6 +280,7 @@ Põhjus: %1$s." "Kasutaja %1$s võrguidentiteet tundub olema muutunud. %2$s" "Kasutaja %1$s %2$s võrguidentiteet tundub olema muutunud. %3$s" "(%1$s)" + "%1$s kasutaja verifitseeritud identiteet on muutunud." "%1$s kasutaja (%2$s kasutajanimi) verifitseeritud identiteet on muutunud. %3$s" "Võta verifitseerimine tagasi" "Kinnitus" @@ -296,6 +299,7 @@ Põhjus: %1$s." "Rakendusel %1$s puudub õigus sinu asukohta tuvastada. Sa saad seda lubada süsteemi seadistustest." "Rakendusel %1$s puudub õigus sinu asukohta tuvastada. Järgnevalt anna vastavad õigused." "Rakendusel %1$s puudub õigus sinu nutiseadme mikrofoni kasutada. Järgnevalt anna õigused heli salvestamiseks." + "See võib olla põhjustatud võrgu- või serverivigadest." "Selline jututoa aadress on juba olemas. Palun proovi muuta kas aadressi või jututoa nime" "Mõned tähemärgid pole lubatud. Kasuta vaid tähti, numbreid ja neid kirjavahemärke ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Mõned sõnumid on saatmata" @@ -338,7 +342,7 @@ Põhjus: %1$s." "Laadime sõnumit…" "Näita kõiki" "Vestlus" - "Liitumispäring on saadetud" + "Liitumispalve on saadetud" "Jaga asukohta" "Jaga minu asukohta" "Ava Apple Mapsis" 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 6d3c873dce1..5f25de7ce4e 100644 --- a/libraries/ui-strings/src/main/res/values-fr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml @@ -193,6 +193,7 @@ Raison : %1$s." "Message supprimé" "Moderne" "Mettre en sourdine" + "%1$s (%2$s)" "Aucun résultat" "Salon sans nom" "Hors ligne" @@ -270,6 +271,7 @@ Raison : %1$s." "Vérifié(e)" "Vérifier la session" "Vérifier l’identité" + "Vérifier l’utilisateur" "Vidéo" "Message vocal" "En attente…" @@ -278,6 +280,7 @@ Raison : %1$s." "L’identité de %1$s semble avoir changé. %2$s" "L’identité de %1$s %2$s semble avoir changé. %3$s" "(%1$s)" + "L’identité vérifiée de l’utilisateur %1$s a changé." "L’identité vérifiée de %1$s %2$s a changé. %3$s" "Révoquer la vérification" "Confirmation" @@ -296,6 +299,7 @@ Raison : %1$s." "%1$s n’est pas autorisé à accéder à votre position. Vous pouvez activer l’accès dans les Paramètres." "%1$s n’est pas autorisé à accéder à votre position. Activez l’accès ci-dessous." "%1$s n’a pas l’autorisation d’utiliser le microphone. Autorisez l’utilisation pour enregistrer un message vocal." + "Cela peut être dû à des problèmes de réseau ou de serveur." "Cette adresse de salon existe déjà, veuillez essayer de modifier le champ d’adresse de salon ou de modifier le nom du salon" "Certains caractères ne sont pas autorisés. Seuls les lettres, les chiffres et les symboles suivants sont utilisables ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Certains messages n’ont pas été envoyés" @@ -338,7 +342,7 @@ Raison : %1$s." "Chargement du message…" "Voir tout" "Discussion" - "Demande d’adhésion envoyée" + "Demande de rejoindre le salon envoyée" "Partage de position" "Partager ma position" "Ouvrir dans Apple Maps" 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 a74d0a2ed08..60259c0c42c 100644 --- a/libraries/ui-strings/src/main/res/values-hu/translations.xml +++ b/libraries/ui-strings/src/main/res/values-hu/translations.xml @@ -193,6 +193,7 @@ Ok: %1$s." "Üzenet eltávolítva" "Modern" "Némítás" + "%1$s (%2$s)" "Nincs találat" "Nincs szobanév" "Kapcsolat nélkül" @@ -270,6 +271,7 @@ Ok: %1$s." "Ellenőrizve" "Eszköz ellenőrzése" "Személyazonosság ellenőrzése" + "Felhasználó ellenőrzése" "Videó" "Hangüzenet" "Várakozás…" @@ -278,6 +280,7 @@ Ok: %1$s." "Úgy tűnik, hogy %1$s személyazonossága megváltozott. %2$s" "Úgy tűnik, hogy %1$s %2$s személyazonossága megváltozott. %3$s" "(%1$s)" + "%1$s ellenőrzött személyazonossága megváltozott." "%1$s, %2$s ellenőrzött személyazonossága megváltozott. %3$s" "Ellenőrzés visszavonása" "Megerősítés" @@ -296,6 +299,7 @@ Ok: %1$s." "Az %1$snek nincs engedélye, hogy hozzáférjen a tartózkodási helyéhez. Ezt a beállításokban engedélyezheti." "Az %1$snek nincs engedélye, hogy hozzáférjen a tartózkodási helyéhez. Engedélyezze alább az elérését." "Az %1$snek nincs engedélye, hogy hozzáférjen a mikrofonhoz. Engedélyezze, hogy tudjon hangüzenetet felvenni." + "Ennek oka hálózati vagy kiszolgálóprobléma lehet." "Ez a szobacím már létezik. Próbálja meg szerkeszteni a szobacím mezőt, vagy módosítsa a szoba nevét." "Egyes karakterek nem engedélyezettek. Csak a betűk, a számjegyek és a következő szimbólumok támogatottak: $ & \'() * +/; =? @ [] - . _" "Néhány üzenet nem került elküldésre" 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 94542dfb2e2..287bc116f40 100644 --- a/libraries/ui-strings/src/main/res/values-nb/translations.xml +++ b/libraries/ui-strings/src/main/res/values-nb/translations.xml @@ -145,6 +145,7 @@ "Mislyktes" "Favoritt" "Fil" + "Fil lagret i Nedlastinger" "GIF" "Bilde" "Som svar på %1$s" @@ -220,6 +221,7 @@ "Tekst" "Tråd" "Emne" + "Hva er dette rommet for?" "Kan ikke dekryptere" "Du har ikke tilgang til denne meldingen" "Avsenderens verifiserte identitet er endret" @@ -254,6 +256,10 @@ "🔐️ Bli med meg på %1$s" "Hei, snakk med meg på %1$s: %2$s" "%1$s Android" + "Kunne ikke velge medium, prøv igjen." + "Kunne ikke behandle media for opplasting, vennligst prøv igjen." + "Opplasting av media mislyktes, vennligst prøv igjen." + "Kunne ikke behandle media for opplasting, vennligst prøv igjen." "Kunne ikke hente brukerdetaljer" "Åpne i Apple Maps" "Åpne i Google Maps" 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 b9a672e706b..6059e4c54eb 100644 --- a/libraries/ui-strings/src/main/res/values-nl/translations.xml +++ b/libraries/ui-strings/src/main/res/values-nl/translations.xml @@ -309,6 +309,7 @@ Reden: %1$s." "Bericht laden…" "Bekijk alles" "Chat" + "Verzoek om toe te treden verzonden" "Locatie delen" "Deel mijn locatie" "Openen in Apple Maps" 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 e6a643b21fb..21056c4569b 100644 --- a/libraries/ui-strings/src/main/res/values-pl/translations.xml +++ b/libraries/ui-strings/src/main/res/values-pl/translations.xml @@ -31,6 +31,7 @@ "Pokaż hasło" "Rozpocznij rozmowę" "Menu użytkownika" + "Wyświetl szczegóły" "Nagraj wiadomość głosową." "Zatrzymaj nagrywanie" "Akceptuj" @@ -151,6 +152,7 @@ "ID urządzenia" "Czat prywatny" "Nie pokazuj ponownie" + "Błąd pobierania" "Pobieram" "(edytowane)" "Edytowanie" @@ -168,6 +170,8 @@ Powód: %1$s." "Ulubione" "Ulubione" "Plik" + "Plik usunięty" + "Plik zapisany" "Plik zapisany do folderu Pobrane" "Przekaż wiadomość" "Często używane" @@ -180,6 +184,7 @@ Powód: %1$s." "Jasny" "Link został skopiowany do schowka" "Ładowanie…" + "Ładuję więcej…" "%1$d członek" "%1$d członki" @@ -191,6 +196,7 @@ Powód: %1$s." "Wiadomość usunięta" "Nowoczesny" "Wycisz" + "%1$s (%2$s)" "Brak wyników" "Brak nazwy pokoju" "Offline" @@ -227,7 +233,7 @@ Powód: %1$s." "Zapisano zmiany" "Zapisywanie" "Blokada ekranu" - "Wyszukaj kogoś" + "Szukaj osób" "Wyniki wyszukiwania" "Bezpieczeństwo" "Wyświetlone przez" @@ -269,6 +275,7 @@ Powód: %1$s." "Zweryfikowano" "Weryfikuj urządzenie" "Zweryfikuj tożsamość" + "Zweryfikuj użytkownika" "Film" "Wiadomość głosowa" "Oczekiwanie…" @@ -277,6 +284,8 @@ Powód: %1$s." "Tożsamość %1$s mogła ulec zmianie. %2$s" "Wygląda na to, że tożsamość %1$s %2$s uległa zmianie. %3$s" "(%1$s)" + "Zweryfikowana tożsamość %1$s %2$s uległa zmianie. %3$s" + "Wycofaj weryfikację" "Potwierdzenie" "Błąd" "Sukces" @@ -293,6 +302,7 @@ Powód: %1$s." "%1$s nie uzyskało uprawnienia do dostępu do twojej lokalizacji. Możesz włączyć dostęp w Ustawieniach." "%1$s nie ma uprawnień dostępu do Twojej lokalizacji. Włącz dostęp poniżej." "%1$s nie ma uprawnień dostępu do Twojego mikrofonu. Włącz dostęp, aby nagrać wiadomość głosową." + "Może to być spowodowane problemami z siecią lub serwerem." "Ten adres pokoju już istnieje. Spróbuj zmienić adres lub nazwę pokoju" "Niektóre znaki są niedozwolone. Obsługiwane są tylko litery, cyfry i następujące symbole ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Niektóre wiadomości nie zostały wysłane" 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 516e7cdf0fc..d135c01517e 100644 --- a/libraries/ui-strings/src/main/res/values-pt/translations.xml +++ b/libraries/ui-strings/src/main/res/values-pt/translations.xml @@ -29,6 +29,7 @@ "Mostrar senha" "Iniciar chamada" "Menu de utilizador" + "Ver detalhes" "Gravar mensagem de voz." "Parar gravação" "Aceitar" @@ -127,6 +128,7 @@ "Ver na cronologia" "Ver fonte" "Sim" + "Sim, tentar novamente" "Sobre" "Política de utilização aceitável" "A adicionar legenda" @@ -148,12 +150,13 @@ "ID do dispositivo" "Conversa direta" "Não mostrar novamente" + "Descarga falhada" "A descarregar" "(editada)" "A editar" "A editar legenda" "* %1$s %2$s" - "Encriptação" + "Cifragem" "Cifragem ativada" "Introduz o teu PIN" "Erro" @@ -165,6 +168,8 @@ Razão: %1$s." "Marcar como favorita" "Favoritas" "Ficheiro" + "Ficheiro eliminado" + "Ficheiro guardado" "Ficheiro guardado nas Transferências" "Reencaminhar mensagem" "Frequentemente utilizado" @@ -177,6 +182,7 @@ Razão: %1$s." "Claro" "Ligação copiada para a área de transferência" "A carregar…" + "A carregar mais…" "%1$d membro" "%1$d membros" @@ -187,6 +193,7 @@ Razão: %1$s." "Mensagem removida" "Moderno" "Silenciar" + "%1$s (%2$s)" "Sem resultados" "Sala sem nome" "Desligado" @@ -264,6 +271,7 @@ Razão: %1$s." "Verificado" "Verificar o dispositivo" "Verifica a identidade" + "Verificar utilizador" "Vídeo" "Mensagem de voz" "A aguardar…" @@ -272,6 +280,9 @@ Razão: %1$s." "A identidade de %1$s parece ter mudado. %2$s" "A identidade de %1$s (username: %2$s ) aparenta ter mudado. %3$s" "(%1$s)" + "A identidade verificada de %1$s foi alterada." + "A identidade verificada de %1$s %2$s foi alterada. %3$s" + "Retirar verificação" "Confirmação" "Erro" "Sucesso" @@ -288,6 +299,7 @@ Razão: %1$s." "A %1$s não tem permissão para aceder à tua localização. Podes ativar o acesso nas Definições." "A %1$s não tem permissão para aceder à tua localização. Continua para ativares o acesso." "A %1$s não tem permissão para aceder ao teu microfone. Permite o acesso para gravar uma mensagem de voz." + "Isto pode dever-se a problemas na rede ou no servidor." "Este endereço de sala já existe, tente editar o campo de endereço da sala ou altere o nome da sala" "Alguns caracteres não são permitidos. Apenas letras, dígitos e os seguintes símbolos são suportados! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Algumas mensagens não foram enviadas" @@ -344,6 +356,8 @@ Razão: %1$s." "Versão: %1$s (%2$s)" "pt" "O histórico de mensagens não está disponível neste dispositivo" + "É necessário verificares este dispositivos para acederes a mensagens antigas" + "Não tens acesso a esta mensagem" "Impossível decifrar mensagem" "Esta mensagem foi bloqueada ou porque ainda não verificaste este dispositivo ou porque o remetente necessita de verificar a tua identidade." 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 db85cb90f87..cfa3a490557 100644 --- a/libraries/ui-strings/src/main/res/values-ru/translations.xml +++ b/libraries/ui-strings/src/main/res/values-ru/translations.xml @@ -196,6 +196,7 @@ "Сообщение удалено" "Современный" "Выкл. звук" + "%1$s (%2$s)" "Ничего не найдено" "Название комнаты отсутствует" "Не в сети" 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 ef239dad16b..ea0a11c2357 100644 --- a/libraries/ui-strings/src/main/res/values-sk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sk/translations.xml @@ -196,6 +196,7 @@ Dôvod: %1$s." "Správa odstránená" "Moderné" "Stlmiť" + "%1$s (%2$s)" "Žiadne výsledky" "Žiadny názov miestnosti" "Offline" @@ -274,6 +275,7 @@ Dôvod: %1$s." "Overené" "Overiť zariadenie" "Overiť totožnosť" + "Overiť používateľa" "Video" "Hlasová správa" "Čaká sa…" @@ -282,6 +284,7 @@ Dôvod: %1$s." "Zdá sa, že totožnosť používateľa %1$s sa zmenila.%2$s" "Zdá sa, že identita %2$s používateľa %1$s sa zmenila. %3$s" "(%1$s)" + "Overená totožnosť používateľa %1$s sa zmenila." "Overená identita používateľa %1$s %2$s sa zmenila. %3$s" "Zrušiť overenie" "Potvrdenie" @@ -300,6 +303,7 @@ Dôvod: %1$s." "%1$s nemá povolenie na prístup k vašej polohe. Prístup môžete zapnúť v Nastaveniach." "%1$s nemá povolenie na prístup k vašej polohe. Povoľte prístup nižšie." "%1$s nemá povolenie na prístup k vášmu mikrofónu. Povoľte prístup na nahrávanie hlasovej správy." + "Môže to byť spôsobené problémami so sieťou alebo serverom." "Táto adresa miestnosti už existuje, skúste upraviť pole adresy miestnosti alebo zmeňte názov miestnosti" "Niektoré znaky nie sú povolené. Podporované sú iba písmená, číslice a nasledujúce symboly ! $ & \'() * +/; =? @ [] - . _" "Niektoré správy neboli odoslané" @@ -343,7 +347,7 @@ Dôvod: %1$s." "Načítava sa správa…" "Zobraziť všetko" "Konverzácia" - "Žiadosť o vstup odoslaná" + "Žiadosť o pripojenie bola odoslaná" "Zdieľať polohu" "Zdieľať moju polohu" "Otvoriť v Apple Maps" 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 44f84c1bd2b..1cd14eb5f67 100644 --- a/libraries/ui-strings/src/main/res/values-sv/translations.xml +++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml @@ -32,6 +32,7 @@ "Spela in röstmeddelande." "Stoppa inspelning" "Godkänn" + "Lägg till bildtext" "Lägg till i tidslinjen" "Tillbaka" "Ring" @@ -45,8 +46,10 @@ "Bekräfta lösenord" "Fortsätt" "Kopiera" + "Kopiera bildtext" "Kopiera länk" "Kopiera länk till meddelande" + "Kopiera text" "Skapa" "Skapa ett rum" "Inaktivera" @@ -57,6 +60,7 @@ "Kassera" "Klar" "Redigera" + "Redigera bildtext" "Redigera omröstning" "Aktivera" "Avsluta omröstning" @@ -91,6 +95,8 @@ "Reagera" "Avvisa" "Ta bort" + "Ta bort bildtext" + "Ta bort meddelande" "Svara" "Svara i tråd" "Rapportera bugg" @@ -123,6 +129,7 @@ "Ja" "Om" "Policy för godtagbar användning" + "Lägga till bildtext" "Avancerade inställningar" "Analysdata" "Utseende" @@ -141,9 +148,12 @@ "Enhets-ID" "Direktchatt" "Visa inte detta igen" + "Laddar ner" "(redigerad)" "Redigerar" + "Redigera bildtext" "* %1$s %2$s" + "Kryptering" "Kryptering aktiverad" "Ange din PIN-kod" "Fel" @@ -157,6 +167,7 @@ Anledning:%1$s." "Fil" "Fil sparad i Download" "Vidarebefordra meddelande" + "Används ofta" "GIF" "Bild" "Som svar på %1$s" @@ -237,11 +248,14 @@ Anledning:%1$s." "Ämne" "Vad handlar det här rummet om?" "Kan inte avkryptera" + "Skickad från en osäker enhet" "Du har inte tillgång till det här meddelandet" + "Avsändarens verifierade identitet har ändrats" "Inbjudan kunde inte skickas till en eller flera användare." "Kunde inte skicka inbjudningar" "Lås upp" "Avtysta" + "Samtal som inte stöds" "Händelse som inte stöds" "Användarnamn" "Verifiering avbruten" @@ -249,6 +263,7 @@ Anledning:%1$s." "Verifiering misslyckades" "Verifierad" "Verifiera enheten" + "Verifiera identitet" "Video" "Röstmeddelande" "Väntar …" @@ -273,6 +288,8 @@ Anledning:%1$s." "%1$s är inte behörig att komma åt din plats. Du kan aktivera åtkomst i Inställningar." "%1$s är inte behörig att komma åt din plats. Aktivera åtkomst nedan." "%1$s är inte behörig att komma åt din mikrofon. Aktivera åtkomst för att spela in ett röstmeddelande." + "Den här rumsadressen finns redan. Försök att redigera adressfältet för rummet eller ändra rummets namn" + "Vissa tecken är inte tillåtna. Endast bokstäver, siffror och följande symboler stöds ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Vissa meddelanden har inte skickats" "Tyvärr, ett fel uppstod" "Detta krypterade meddelandes äkthet kan inte garanteras på den här enheten." @@ -286,6 +303,7 @@ Anledning:%1$s." "%1$s Android" "Raseriskaka för att rapportera bugg" "Misslyckades att välja media, vänligen pröva igen." + "Bildtexter kanske inte är synliga för personer som använder äldre appar." "Misslyckades att bearbeta media för uppladdning, vänligen pröva igen." "Misslyckades att ladda upp media, vänligen pröva igen." "Tryck på ett meddelande och välj ”%1$s” för att inkludera det här." @@ -312,6 +330,7 @@ Anledning:%1$s." "Laddar meddelande …" "Visa alla" "Chatt" + "Begäran om att gå med skickad" "Dela plats" "Dela min plats" "Öppna i Apple Maps" @@ -324,4 +343,8 @@ Anledning:%1$s." "Plats" "Version: %1$s (%2$s)" "sv" + "Historiska meddelanden är inte tillgängliga på den här enheten" + "Du har inte tillgång till det här meddelandet" + "Det gick inte att dekryptera meddelandet" + "Det här meddelandet blockerades antingen för att du inte verifierade din enhet eller för att avsändaren måste verifiera din identitet." diff --git a/libraries/ui-strings/src/main/res/values-tr/translations.xml b/libraries/ui-strings/src/main/res/values-tr/translations.xml new file mode 100644 index 00000000000..a82c09e5538 --- /dev/null +++ b/libraries/ui-strings/src/main/res/values-tr/translations.xml @@ -0,0 +1,363 @@ + + + "Sil" + + "%1$d basamak girildi" + "%1$d basamak girildi" + + "Şifreyi gizle" + "Aşağıya atla" + "Yalnızca bahsetmeler" + "Sessiz" + "Sayfa %1$d" + "Duraklat" + "PIN alanı" + "Oynat" + "Anket" + "Anket sona erdi" + "%1$s ile tepki verin" + "Diğer emojilerle tepki verin" + "Okuyan %1$s ve %2$s" + + "%1$s ve %2$d diğer kişi tarafından okundu" + "%1$s ve %2$d diğer kişi tarafından okundu" + + "Okuyan %1$s" + "Tümünü göstermek için dokunun" + "Tepkimeyi kaldır %1$s" + "Dosyaları gönder" + "Şifreyi göster" + "Bir arama başlatın" + "Kullanıcı menüsü" + "Ayrıntıları görüntüle" + "Sesli mesajı kaydedin." + "Kaydı durdur" + "Kabul et" + "Açıklama ekle" + "Zaman çizelgesine ekle" + "Geri" + "Çağrı" + "İptal" + "Şimdilik iptal et" + "Fotoğraf seç" + "Temizle" + "Kapat" + "Doğrulamayı tamamlayın" + "Onayla" + "Şifreyi onayla" + "Devam et" + "Kopyala" + "Açıklamayı kopyala" + "Bağlantıyı kopyala" + "Bağlantıyı mesaja kopyala" + "Metni kopyala" + "Oluştur" + "Bir oda oluştur" + "Devre dışı bırak" + "Hesabı devre dışı bırak" + "Reddet" + "Anketi Sil" + "Devre dışı" + "Vazgeç" + "Bitti" + "Düzenle" + "Açıklamayı düzenle" + "Anketi düzenle" + "Etkinleştir" + "Anketi sonlandır" + "PIN girin" + "Parolanızı mı unuttunuz?" + "İleri" + "Geri dön" + "Yoksay" + "Davet et" + "İnsanları davet et" + "İnsanları davet et %1$s" + "İnsanları davet et %1$s" + "Davetiyeler" + "Katıl" + "Daha fazla bilgi" + "Ayrıl" + "Sohbeti bırak" + "Odadan ayrıl" + "Daha fazla yükle" + "Hesabı yönet" + "Cihazları yönet" + "Mesaj" + "Sonraki" + "Hayır" + "Şimdi değil" + "TAMAM" + "Ayarlar" + "İle aç" + "Pin" + "Hızlı cevap" + "Alıntı" + "Tepki" + "Reddet" + "Kaldır" + "Açıklamayı kaldır" + "Mesajı kaldır" + "Yanıtla" + "Konuya cevap ver" + "Hata bildir" + "İçeriği bildir" + "Sıfırla" + "Kimliği sıfırla" + "Yeniden dene" + "Şifre çözmeyi tekrar deneyin" + "Kaydet" + "Ara" + "Gönder" + "Mesaj gönder" + "Paylaş" + "Linki paylaş" + "Göster" + "Tekrar oturum açın" + "Oturumu kapat" + "Yine de çıkış yap" + "Atla" + "Başlat" + "Sohbeti başlat" + "Doğrulamayı başlat" + "Haritayı yüklemek için dokunun" + "Fotoğraf çek" + "Seçenekler için dokunun" + "Tekrar deneyin" + "Sabitlemeyi kaldır" + "Zaman çizelgesinde görüntüle" + "Kaynağı görüntüle" + "Evet" + "Evet, tekrar dene" + "Hakkında" + "Kabul edilebilir kullanım politikası" + "Açıklama ekleme" + "Gelişmiş Ayarlar" + "Analizler" + "Görünüm" + "Ses" + "Engellenen kullanıcılar" + "Kabarcıklar" + "Çağrı başladı" + "Sohbet yedekleme" + "Panoya kopyalandı" + "Telif Hakkı" + "Oda yaratmak…" + "Sol oda" + "Koyu" + "Şifre çözme hatası" + "Geliştirici seçenekleri" + "Cihaz Kimliği" + "Doğrudan sohbet" + "Bunu bir daha gösterme" + "İndirme başarısız oldu" + "İndiriliyor" + "(düzenlendi)" + "Düzenleme" + "Açıklamayı düzenleme" + "* %1$s %2$s" + "Şifreleme" + "Şifreleme etkin" + "PIN\'inizi girin" + "Hata" + "Bir hata oluştu, yeni mesajlar için bildirim alamayabilirsiniz. Lütfen ayarlardan bildirimlerle ilgili sorunları giderin. + +Neden: %1$s." + "Herkes" + "Başarısız" + "Favori" + "Favorilere eklendi" + "Dosya" + "Dosya silindi" + "Dosya kaydedildi" + "Dosya İndirilenler\'e kaydedildi" + "Mesajı ilet" + "Sık kullanılanlar" + "GIF" + "Resim" + "Cevap olarak %1$s" + "APK\'yı yükleyin" + "Bu Matrix Kimliği bulunamıyor, bu nedenle davet alınmayabilir." + "Odadan ayrılma" + "Aydınlık" + "Bağlantı panoya kopyalandı" + "Yükleniyor…" + "Daha fazla yükleniyor…" + + "%1$d üye" + "%1$d üye" + + "Mesaj" + "Mesaj eylemleri" + "Mesaj düzeni" + "Mesaj kaldırıldı" + "Modern" + "Sessiz" + "%1$s (%2$s)" + "Sonuç yok" + "Oda adı yok" + "Çevrimdışı" + "Açık kaynak lisansları" + "veya" + "Şifre" + "Kişiler" + "Kalıcı bağlantı" + "İzin" + "Sabitlendi" + "Lütfen bekleyin…" + "Bu anketi sonlandırmak istediğinizden emin misiniz?" + "Anket: %1$s" + "Toplam oy: %1$s" + "Sonuçlar anket sona erdikten sonra gösterilecektir" + + "%d oy" + "%d oy" + + "Gizlilik Politikası" + "Tepki" + "Tepkiler" + "Kurtarma anahtarı" + "Yenileniyor…" + "Cevaplamak için %1$s" + "Hata bildir" + "Sorun bildir" + "Rapor gönderildi" + "Zengin metin editörü" + "Oda" + "Oda adı" + "örn. proje adınız" + "Kaydedilen değişiklikler" + "Kaydediliyor" + "Ekran kilidi" + "Birini arayın" + "Arama sonuçları" + "Güvenlik" + "Tarafından görüldü" + "Şuraya gönder" + "Gönderiliyor…" + "Gönderme başarısız oldu" + "Gönderildi" + "Sunucu desteklenmiyor" + "Sunucu URL\'si" + "Ayarlar" + "Paylaşılan konum" + "Oturumu kapatma" + "Bir şeyler ters gitti" + "Sohbet başlatılıyor…" + "Çıkartma" + "Başarılı" + "Öneriler" + "Senkronizasyon" + "Sistem" + "Metin" + "Üçüncü taraf bildirimleri" + "Konu" + "Konu" + "Bu oda ne hakkında?" + "Şifre çözülemiyor" + "Güvenli olmayan bir cihazdan gönderildi" + "Bu mesaja erişiminiz yok" + "Gönderenin doğrulanmış kimliği değişti" + "Davetler bir veya daha fazla kullanıcıya gönderilemedi." + "Davetiye(ler) gönderilemedi" + "Kilidi aç" + "Sesi aç" + "Desteklenmeyen çağrı" + "Desteklenmeyen etkinlik" + "Kullanıcı adı" + "Doğrulama iptal edildi" + "Doğrulama tamamlandı" + "Doğrulama başarısız" + "Doğrulandı" + "Cihazı doğrula" + "Kimliği doğrula" + "Kullanıcıyı Doğrula" + "Video" + "Sesli Mesaj" + "Bekleniyor…" + "Bu mesajı bekliyorum" + "Sen" + "%1$s kişinin kimliği değişmiş gibi görünüyor. %2$s" + "%1$s\'ın %2$s kimliği değişmiş gibi görünüyor. %3$s" + "(%1$s)" + "%1$s kullanıcısının doğrulanmış kimliği değişti." + "%1$s kullanıcısının %2$s doğrulanmış kimliği değişti. %3$s" + "Doğrulamayı iptal et" + "Onaylama" + "Hata" + "Başarılı" + "Uyarı" + "Değişiklikleriniz kaydedilmedi. Geri dönmek istediğinden emin misin?" + "Değişiklikleri Kaydet?" + "Ana sunucunuzun Matrix Authentication Service ve hesap oluşturmayı destekleyecek şekilde güncellenmesi gerekiyor." + "Kalıcı bağlantı oluşturulamadı" + "%1$s harita yüklenemedi. Lütfen daha sonra tekrar deneyin." + "Mesajlar yüklenemedi" + "%1$s konumunuza erişemedi. Lütfen daha sonra tekrar deneyin." + "Sesli mesajınız yüklenemedi." + "Mesaj bulunamadı" + "%1$s konumunuza erişim iznine sahip değil. Erişimi Ayarlar\'dan etkinleştirebilirsiniz." + "%1$s konumunuza erişim iznine sahip değil. Aşağıdan erişimi etkinleştirin." + "%1$s mikrofonunuza erişim izni yok. Sesli mesaj kaydetmek için erişimi etkinleştirin." + "Bunun nedeni ağ veya sunucu sorunları olabilir." + "Bu oda adresi zaten mevcut. Lütfen oda adres alanını düzenlemeyi deneyin veya oda adını değiştirin" + "Bazı karakterlere izin verilmez. Yalnızca harfler, rakamlar ve aşağıdaki semboller desteklenir ! $ & \' ( ) * + / ; = ? @ [ ] - . _" + "Bazı mesajlar gönderilmedi" + "Üzgünüz, bir hata oluştu" + "Bu şifrelenmiş mesajın doğruluğu bu cihazda garanti edilemez." + "Daha önce doğrulanmış bir kullanıcı tarafından şifrelenmiştir." + "Şifrelenmemiş." + "Bilinmeyen veya silinmiş bir cihaz tarafından şifrelenmiştir." + "Sahibi tarafından doğrulanmamış bir cihaz tarafından şifrelenmiştir." + "Doğrulanmamış bir kullanıcı tarafından şifrelenmiştir." + "🔐️ Bana katılın %1$s" + "Hey, benimle konuş %1$s: %2$s" + "%1$s Android" + "Hata bildirmek için Rageshake" + "Medya seçilemedi, lütfen tekrar deneyin." + "Açıklamalar, eski uygulamaları kullanan kişiler tarafından görülemeyebilir." + "Medya yüklenemedi, lütfen tekrar deneyin." + "Medya yüklenemedi, lütfen tekrar deneyin." + "Bir mesaja basın ve buraya eklemek için “%1$s” yi seçin." + "Önemli mesajları kolayca keşfedilebilmeleri için sabitleyin" + + "%1$d Sabitlenmiş mesaj" + "%1$d Sabitlenmiş mesajlar" + + "Sabitlenmiş mesajlar" + "Kimliğinizi sıfırlamak için %1$s hesabınıza gitmek üzeresiniz. Daha sonra uygulamaya geri döneceksiniz." + "Onaylayamıyor musunuz? Kimliğinizi sıfırlamak için hesabınıza gidin." + "Doğrulamayı geri çek ve gönder" + "Doğrulamanızı geri çekebilir ve yine de bu mesajı gönderebilir veya şimdilik iptal edebilir ve %1$s yeniden doğruladıktan sonra daha sonra tekrar deneyebilirsiniz." + "%1$s kullanıcısının doğrulanmış kimliği değiştiği için mesajınız gönderilmedi" + "Yine de mesaj gönder" + "%1$s bir veya daha fazla doğrulanmamış cihaz kullanıyor. Mesajı yine de gönderebilir veya şimdilik iptal edebilir ve %2$s tüm cihazlarını doğruladıktan sonra tekrar deneyebilirsiniz." + "%1$s tüm cihazları doğrulamadığı için mesajınız gönderilmedi" + "Bir veya daha fazla cihazınız doğrulanmamış. Mesajı yine de gönderebilir veya şimdilik iptal edip tüm cihazlarınızı doğruladıktan sonra tekrar deneyebilirsiniz." + "Bir veya daha fazla cihazınızı doğrulamadığınız için mesajınız gönderilmedi" + "Medya yüklenemedi, lütfen tekrar deneyin." + "Kullanıcı ayrıntıları alınamadı" + "%1$s / %2$s" + "%1$s Sabitlenmiş mesajlar" + "Mesaj yükleniyor…" + "Tümünü görüntüle" + "Sohbet" + "Katılma isteği gönderildi" + "Konum paylaş" + "Konumumu paylaş" + "Apple Maps\'de aç" + "Google Maps\'te aç" + "OpenStreetMap\'te aç" + "Bu konumu paylaş" + "%1$s kullanıcısının doğrulanmış kimliği değiştiği için ileti gönderilmedi." + "%1$s tüm cihazları doğrulamadığı için mesaj gönderilmedi." + "Bir veya daha fazla cihazınızı doğrulamadığınız için mesaj gönderilmedi." + "Konum" + "Sürüm: %1$s (%2$s)" + "tr" + "Geçmiş mesajlar bu cihazda kullanılamıyor" + "Geçmiş mesajlara erişim için bu cihazı doğrulamanız gerekir" + "Bu mesaja erişiminiz yok" + "Mesaj şifresi çözülemedi" + "Bu mesaj, cihazınızı doğrulamadığınız veya gönderenin kimliğinizi doğrulaması gerektiği için engellendi." + 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 12245254252..4189f550681 100644 --- a/libraries/ui-strings/src/main/res/values-uk/translations.xml +++ b/libraries/ui-strings/src/main/res/values-uk/translations.xml @@ -184,6 +184,7 @@ "Світла" "Посилання скопійовано в буфер обміну" "Завантаження" + "Завантаження наступних…" "%1$d учасник" "%1$d учасники" @@ -195,6 +196,7 @@ "Повідомлення вилучено" "Модерн" "Вимкнути звук" + "%1$s (%2$s)" "Немає результатів" "Немає назви кімнати" "Не в мережі" @@ -273,6 +275,7 @@ "Перевірено" "Верифікувати пристрій" "Підтвердити особу" + "Верифікувати користувача" "Відео" "Голосове повідомлення" "Очікування…" @@ -299,6 +302,7 @@ "%1$s не має дозволу на доступ до вашого розташування. Увімкнути доступ можна в Налаштуваннях." "%1$s не має дозволу на доступ до вашого розташування. Увімкніть доступ нижче." "%1$s не має доступу до вашого мікрофона. Надайте доступ, щоб записати голосове повідомлення." + "Це може бути пов\'язано з проблемами мережі або сервера." "Ця адреса кімнати вже існує, будь ласка, спробуйте відредагувати поле адреси кімнати або змінити назву кімнати" "Деякі символи не допускаються. Підтримуються тільки букви, цифри і наступні символи! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Деякі повідомлення не були надіслані" 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 76ba789f3ca..f7fb6ac66b8 100644 --- a/libraries/ui-strings/src/main/res/values-zh/translations.xml +++ b/libraries/ui-strings/src/main/res/values-zh/translations.xml @@ -190,6 +190,7 @@ "消息已移除" "现代" "静音" + "%1$s (%2$s)" "没有结果" "无聊天室名" "离线" diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 9430f509d7e..1637d8d7bac 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -271,6 +271,7 @@ Reason: %1$s." "Verified" "Verify device" "Verify identity" + "Verify user" "Video" "Voice message" "Waiting…" @@ -279,6 +280,7 @@ Reason: %1$s." "%1$s\'s identity appears to have changed. %2$s" "%1$s’s %2$s identity appears to have changed. %3$s" "(%1$s)" + "%1$s’s verified identity has changed." "%1$s’s %2$s verified identity has changed. %3$s" "Withdraw verification" "Confirmation" @@ -297,6 +299,7 @@ Reason: %1$s." "%1$s does not have permission to access your location. You can enable access in Settings." "%1$s does not have permission to access your location. Enable access below." "%1$s does not have permission to access your microphone. Enable access to record a voice message." + "This may be due to network or server issues." "This room address already exists. Please try editing the room address field or change the room name" "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _" "Some messages have not been sent" diff --git a/plugins/src/main/kotlin/extension/KoverExtension.kt b/plugins/src/main/kotlin/extension/KoverExtension.kt index 35aa9042446..c361aeba52e 100644 --- a/plugins/src/main/kotlin/extension/KoverExtension.kt +++ b/plugins/src/main/kotlin/extension/KoverExtension.kt @@ -54,7 +54,6 @@ fun Project.setupKover() { description = "Verifies the code coverage of all subprojects." val dependencies = listOf(":app:koverVerifyGplayDebug") + koverVariants.map { ":app:koverVerify${it.replaceFirstChar(Char::titlecase)}" } dependsOn(dependencies) - } // https://kotlin.github.io/kotlinx-kover/ // Run `./gradlew :app:koverHtmlReport` to get report at ./app/build/reports/kover @@ -180,7 +179,9 @@ fun Project.setupKover() { "io.element.android.libraries.matrix.api.timeline.item.event.OtherState$*", "io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState*", "io.element.android.libraries.mediaviewer.impl.local.pdf.PdfViewerState", + "io.element.android.libraries.mediaviewer.impl.local.player.MediaPlayerControllerState", "io.element.android.libraries.textcomposer.model.TextEditorState", + "io.element.android.libraries.textcomposer.components.FormattingOptionState", ) includes.classes("*State") } diff --git a/plugins/src/main/kotlin/extension/locales.kt b/plugins/src/main/kotlin/extension/locales.kt index 4b83bac32ae..ef842dbb1f0 100644 --- a/plugins/src/main/kotlin/extension/locales.kt +++ b/plugins/src/main/kotlin/extension/locales.kt @@ -28,6 +28,7 @@ val locales = setOf( "ru", "sk", "sv", + "tr", "uk", "uz", "zh-rCN", diff --git a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_0_de.png b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_0_de.png index 202f5ec9037..dbe48bd5106 100644 --- a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_0_de.png +++ b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2683c2af9b6e03d8a63478a277bc08fee3938a48cf446e81fee14b8177a7a0e5 -size 17005 +oid sha256:d67dd602ead4c0c58b91aa388d4b25edfb1cbb083272d68d242f76cba8013206 +size 16813 diff --git a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_1_de.png b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_1_de.png index 20fb2fd98d5..df53bac8bad 100644 --- a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_1_de.png +++ b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabdf30f91e5d14fdb41a78f337adc1781e572bbdb346be34b6de1738362b577 -size 26228 +oid sha256:a613158ae574adcf48344204588d854c04bd95cdb3dc6700058f579e64550dd6 +size 26099 diff --git a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_3_de.png b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_3_de.png index 27a46e84842..425510fe877 100644 --- a/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_3_de.png +++ b/screenshots/de/features.createroom.impl.addpeople_AddPeopleView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00a2119357556362eea4ffc31e982e87e0a2e18af95ab713b433851d5ad99d39 -size 44744 +oid sha256:bd241e34e59cb9a80d8fabe4584ea53af7e8f439ea9b8be1e370fe33c6f44f39 +size 44585 diff --git a/screenshots/de/features.createroom.impl.components_UserListView_Day_0_de.png b/screenshots/de/features.createroom.impl.components_UserListView_Day_0_de.png index d2a66523698..b01e8f3daa3 100644 --- a/screenshots/de/features.createroom.impl.components_UserListView_Day_0_de.png +++ b/screenshots/de/features.createroom.impl.components_UserListView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a883439100e721d0749da6690882dad0decd6962ee82599fc7902746415d63d -size 9596 +oid sha256:1f3d3e011b7b2fd9f0732e9632333d65c6f22ddb4df448128ad18bce05fdea19 +size 9392 diff --git a/screenshots/de/features.createroom.impl.components_UserListView_Day_1_de.png b/screenshots/de/features.createroom.impl.components_UserListView_Day_1_de.png index 39a409488ef..71d58d0eb70 100644 --- a/screenshots/de/features.createroom.impl.components_UserListView_Day_1_de.png +++ b/screenshots/de/features.createroom.impl.components_UserListView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9a7ec6c7c6406da82cbc68a31e1ac6af0c7cd4fcb9a162f2f222a0b98d43ace -size 20914 +oid sha256:0678bcfff323a0fa3991d45c36d45d9d16e97e6c670be714d6de612440b22bef +size 20710 diff --git a/screenshots/de/features.createroom.impl.components_UserListView_Day_9_de.png b/screenshots/de/features.createroom.impl.components_UserListView_Day_9_de.png index 82cb2036e17..821662ba5f0 100644 --- a/screenshots/de/features.createroom.impl.components_UserListView_Day_9_de.png +++ b/screenshots/de/features.createroom.impl.components_UserListView_Day_9_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89fecc1b67392dae4b62e99963c440db63adddcc0c9c4f6d81408560063b870d -size 37718 +oid sha256:95148a84c9a1d4574bfbf995a15d2711f59a26015fa6b928207b5e1266b72adb +size 37540 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png index 00bec43e133..0ecc776a1f2 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:457363c25841925076aaad53d728e631427f699cfb7545b8e1abb94fb6a2e774 -size 36741 +oid sha256:f311fd6462e979e179245d6ef1451918736770d1c2c187b126a2b36298163fe5 +size 36258 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png index e09d9d4951b..a065983d391 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baf2c57107cd2f639535fc6fdf5b9885224c0f839d78fdbc85e14398f7439cd2 -size 49576 +oid sha256:0238457029de9b2bcb7835b6092a2e97674fcd90f31ce93658cd96ecb94c74f5 +size 49129 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png index ba26587c923..715a6fee1e8 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eba277a783d50012cf4a51ec93c4cf02394befc9c5d04edd27ac8113e9257539 -size 63564 +oid sha256:2b2217c0206ff2a96efa24ec94d84ede4ed55bba8d0b879c233e6953d66f1cac +size 63126 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png index 09b64115e15..56fbc94f190 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1f26d21ba37d244fcc5adb5b7580856f8e1a7670fd2defcd4befa3e2d07b8b6 -size 63685 +oid sha256:453fd456a574edc265563d4d6e27b09a050b26df402675de07f2f28ba76f8708 +size 63213 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png index 81b004f86b6..f6a95e3575c 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52f75d9234a0eace30ec10cbdeda6314cea0634d0ccbd2b8f453ec184a35cd13 -size 63592 +oid sha256:4e5ad97aa8f61c06b74c93d913d5b78629d0600b7c72fd6a97abd99032740124 +size 63118 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png index 5308d79c1e9..119f85a43a1 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c28710d2afe583078a26c8b56c331a942c250cb599d4c00f9dc4cf04286c811 -size 63082 +oid sha256:d9e9109d76921acca7cbc99fb0394d8033340cf847c60417a1421d4f7b2765c3 +size 62610 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png index 1f6bca734e3..512433de00b 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b449faf40487c6f34253b0157ae14c3df6a8a782b2af18fcd2b6f80198fa7d2 -size 37688 +oid sha256:f078b697c04a8bb129295b07f14464415a640990544fd4314d3034ab15a7be5b +size 37230 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png index ba57e7b40be..fe97eb211fe 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09596614dfe191f7eb046aff9d44642e6ecbbf3fbdcb89181bae75c16d6ba72d -size 50492 +oid sha256:1535997d0af95e3e7f40437e2015c28d4acf6acb8b1ce31df28086f4ee79cba7 +size 50048 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png index 08823300da9..9945778f017 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae642483fc05fb50555e2fa5b83ac12d84a064c4b840a53a4ebf53d419f87242 -size 65036 +oid sha256:2e180746bac90d0227c6d39727dc3d1fbb00c316e37fa5b09f5bb710b7438377 +size 64595 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png index 3b9922cb362..ca120a72aee 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28606cedfc76d8600f8e935a42c4e98dc13c0b1d1733856bc20d064f99a39c5b -size 65826 +oid sha256:a18c0dac1ad5f1f66e4a1eb7540c70f06b4dd25a847771441324d4faf27beb35 +size 65387 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png index 837e2badf78..3ba9b83e5b3 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3128a8b8ca419b6862d1e5a3e8713f4aefd6fccd494babf006ccbbe15391c956 -size 65747 +oid sha256:dde0ccc0574d99c4cfe78d6d8ab666759800be526f34a6c0ff5ea6814015cd47 +size 65302 diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png index 7acd884662d..b83f6d2530d 100644 --- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png +++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54396bda85421376b596d885a43f67a19b06e9d7980d01112b90849ae08568e1 -size 65181 +oid sha256:eebbb8402c34342de27f6d187d52c24b89ccd01e11a2c334e9a1c90301d2c39d +size 64733 diff --git a/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_0_de.png b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_0_de.png index 2d07ffb504a..225b7cb14b7 100644 --- a/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_0_de.png +++ b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b34cd0b4ea524e88df1185ed2223dcce00fb7efb7582f52dece9876b188a4cc -size 21796 +oid sha256:329d29a976cea60e562443f2aa3dce5dc2a403c4924dc27f83f2ea56e3018678 +size 21604 diff --git a/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_3_de.png b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_3_de.png index 874582fed6d..b78d6d4e52d 100644 --- a/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_3_de.png +++ b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b5433313f6359603e64477fc7cdebb10782cbe3c2a9ac8087ff2252c11ece55 -size 48294 +oid sha256:efba431d869044b1f671ebbf36f395d34b1f019d8409204dbe861ea8f53a0d6e +size 48096 diff --git a/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_4_de.png b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_4_de.png new file mode 100644 index 00000000000..8a4eb88b0a3 --- /dev/null +++ b/screenshots/de/features.createroom.impl.root_CreateRoomRootView_Day_4_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f116908e30f3eae509ab91f269daaff5397373ed73546b698bc8358153a019e8 +size 44462 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_10_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_10_de.png index 5cd0ea0b22f..dce73bf2b51 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_10_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_10_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de336859078455943d159d4d5d7fe710ecbce95baff983c4b74fab67ba6c16df -size 109581 +oid sha256:a399a5f72fd163ad19d6959fbc9f66248301f7b600394ae41712426f9a370921 +size 50313 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_11_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_11_de.png index 1f682b74ffa..a1eb4e56278 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_11_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_11_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19de55a1492cdbb55219720334ac6f5432518462e5a19c4783a32828d7fac899 -size 110605 +oid sha256:330bd1fac2bc5e29713804f6059f9fa8fb0bb0913fe892b0ca5296f6af9cd2a4 +size 48355 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_12_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_12_de.png index afb6b330059..7b9b11004ad 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_12_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_12_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32c5e9a456ea8a2718e50eea5a90f719eff659ed9ada2ab2a9f8da23b2344644 -size 123199 +oid sha256:bfc6154b6ababf2057b430b8e5e91ac36db56d2e7c25542e4673d37d956e8be9 +size 49603 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_13_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_13_de.png new file mode 100644 index 00000000000..e915cbfd564 --- /dev/null +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_13_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d73caacbe926aafac405dbe24cc3adbe64adcbb14d6a189a1e565e4001e2043 +size 34791 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_14_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_14_de.png new file mode 100644 index 00000000000..64c6fecfcb4 --- /dev/null +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_14_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f91934bed9fcd2fbee19ad1905ae4e6ebd4d54fb6228f19635ff9d0272f6c93 +size 31595 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_15_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_15_de.png new file mode 100644 index 00000000000..039a18afba5 --- /dev/null +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_15_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32c249acf87d53f5f388a841c2bf56cee3a5d6feae59d98bcbe18e65b1db32ed +size 41299 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_16_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_16_de.png new file mode 100644 index 00000000000..5be5f707317 --- /dev/null +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_16_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:174fe7d3e527a760dfec6ee4ea08808c701bc03a41b024994e9475232d0d5aa6 +size 52860 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_1_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_1_de.png index 147fc99887e..d4ef1b6d4d3 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_1_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d233e3dedc7fd2e0876243e250c24e2cf5e3bfa7ade8f3615c641e781c04ad0 -size 113116 +oid sha256:b60a08065ce81f4ec5e4767311299e5130822fbb2657d52ed5d78cb12850bfb0 +size 42551 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_2_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_2_de.png index 4c40910f490..bddece65961 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_2_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da133e7680d61beb4367513f324ee9800bfaa6df338a3fec46ee6b69ef370566 -size 99473 +oid sha256:bde6c76f079cb2d234e626dd06ce12810567290f0a63edc5da006b7d47ecd59f +size 44360 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_3_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_3_de.png index 2fbecb35de4..2e41e77fe3e 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_3_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:203615332f2a04e244e1642e5216cf1fbe587451b4e6ef0928a02a8dbdfc83d4 -size 111758 +oid sha256:d6d386b185708760a4ce00aaeef6fc129a54599d7ea8773a57e21b584b48192a +size 32600 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_4_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_4_de.png index a0cee32c3de..7ede2d9d1db 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_4_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45d925186a619b7fbe19211ddfc8c052a3571b53ea6fbc914d819473aed9328f -size 112045 +oid sha256:dced13f8f9c27554dd1a7307bd45533c5d46671549e40f6b2d7a648880d501c2 +size 47897 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_5_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_5_de.png index 623dada791a..9ae277ec441 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_5_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cbf98f8a0c6208379c64f62c2c49a858d67a60469f0001e496c248736a2e82f -size 120862 +oid sha256:a7215d224c586efad218d642d76792b258e784c1a8430bc9ad9e2d058e9f23c4 +size 33308 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_6_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_6_de.png index 73ad652a384..34dde50b7dc 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_6_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_6_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e79835f689801de55e6c0b0db98b642d58e235d205f23e76c8eca383cbcfa1f4 -size 97392 +oid sha256:5d5e76a8e1c2532b8841f3d7f439674053095d7b8fe2b96292b7a5093191dd2f +size 27503 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_7_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_7_de.png index afba2b6c291..f618849d4e7 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_7_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_7_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb15d62e0dd87f76ce8c9f8e2909c4f4a5711cfcae89a81cef2bab0468db5054 -size 101310 +oid sha256:84b9ea337a2cd46f34da8ff08e838c38b46bd306f0cb11722290a4065a3e6d01 +size 36941 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_8_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_8_de.png index a3aaef18244..e3c6c5bff3c 100644 --- a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_8_de.png +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_8_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a975e41d142e75969ca6e4148c5a87acc57c3fc78c1a1bac65207b09ce3fe38 -size 113797 +oid sha256:787f2a7755a4675f3ca3e897553fdf83bc11dcb0357d0bd2615dfc8e52c47cb3 +size 34939 diff --git a/screenshots/de/features.joinroom.impl_JoinRoomView_Day_9_de.png b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_9_de.png new file mode 100644 index 00000000000..5c8f515821a --- /dev/null +++ b/screenshots/de/features.joinroom.impl_JoinRoomView_Day_9_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16f7dbc7fba02c10ae6479078eaf4cbe6fc4cde5fbb6b5da1e0343e0dde29774 +size 35629 diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_3_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_3_de.png index f99d9c7d6d5..76f714c982b 100644 --- a/screenshots/de/features.messages.impl_MessagesView_Day_3_de.png +++ b/screenshots/de/features.messages.impl_MessagesView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d529b4fd0e5b5ba965bfcd6ebaebc3a00e85d06d56ece90e00c9a64bcef4d966 -size 60422 +oid sha256:f81a39d96eb3d1932f00efd8ada780609edc75db69288960829dd4be4551f100 +size 60411 diff --git a/screenshots/de/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_de.png b/screenshots/de/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_de.png index 98a0ae335fe..f1a58048a0a 100644 --- a/screenshots/de/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_de.png +++ b/screenshots/de/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d47da269f00ff61627923ac38c863decf3b764e95c2d96c460673bff36d79879 -size 21824 +oid sha256:9f47404776f784b39bde50217ce260943fecfe0ca8f57756391785b1b7f227f8 +size 21823 diff --git a/screenshots/de/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_de.png b/screenshots/de/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_de.png index c70824b12d6..348564e8b39 100644 --- a/screenshots/de/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_de.png +++ b/screenshots/de/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:641167924c8b1ce1485a4c2d8f5c62d80c00b26920e7fd8878728b1c5d776766 -size 48691 +oid sha256:eca84ceab1901c61ae1200b8dcb7eb1230daa0cb3f47cd65d85a538f8e515500 +size 48685 diff --git a/screenshots/de/features.poll.api.pollcontent_PollContentViewEnded_Day_0_de.png b/screenshots/de/features.poll.api.pollcontent_PollContentViewEnded_Day_0_de.png index c70824b12d6..348564e8b39 100644 --- a/screenshots/de/features.poll.api.pollcontent_PollContentViewEnded_Day_0_de.png +++ b/screenshots/de/features.poll.api.pollcontent_PollContentViewEnded_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:641167924c8b1ce1485a4c2d8f5c62d80c00b26920e7fd8878728b1c5d776766 -size 48691 +oid sha256:eca84ceab1901c61ae1200b8dcb7eb1230daa0cb3f47cd65d85a538f8e515500 +size 48685 diff --git a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_2_de.png b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_2_de.png index 7167008af83..9bcdda534e1 100644 --- a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_2_de.png +++ b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a43926c96a5cfefe179091e79083ea3148b4f6d66c4f8356168ce8ba165d6a1 -size 75125 +oid sha256:8667989a8e4791ec4949543251bf72c1de93628ea635ad543030d3b96b6c4dd9 +size 75335 diff --git a/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_de.png b/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_de.png new file mode 100644 index 00000000000..e3c6c5bff3c --- /dev/null +++ b/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:787f2a7755a4675f3ca3e897553fdf83bc11dcb0357d0bd2615dfc8e52c47cb3 +size 34939 diff --git a/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_de.png b/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_de.png index 49f1b7fc83e..5a362ae5345 100644 --- a/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_de.png +++ b/screenshots/de/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb04686d6e7c4e26edacc4cf24a4e29adfcbff0527be23e89f58b7b09aea152f -size 101743 +oid sha256:1a35596ef35cd3fac5b9deb82df89b7066949c8c272bcb484c6ca52434b61a06 +size 27031 diff --git a/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_de.png index 28b48c96729..59148bdc374 100644 --- a/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_de.png +++ b/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c8c2f78930685af16b95527f5781783693f0be8280808b412d8bfa581013aba -size 15649 +oid sha256:e12074298b55bc1e79d39dbf7200933653698417fc3bf9a40775989f33c0d114 +size 15458 diff --git a/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_de.png b/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_de.png index 22bd6ac780c..13d90fca34e 100644 --- a/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_de.png +++ b/screenshots/de/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd1a9370e7482947abe8d9ac447116683db85aa8ebc8cca99d12d5cc3246fdca -size 26222 +oid sha256:fe94e25696521e9ed30951109002523f03c27d5bc8c12e934e1e987d3df159b8 +size 26098 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_de.png index 9a6ec6a07a5..305047698a8 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2c4d3664c29c0260da80d9e10784ee79f7697da67ef07b56a44385961bdddd0 -size 34061 +oid sha256:060b934a586c09671d8d9a8cf836f509cc69119b458a7ab11be295374c3de9a5 +size 33881 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_de.png index 296d5e1fe3a..eba88dc95e0 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9050c23765ecd53f43848512031e9b49dfc07369cb107cbf35538bbfba80ed73 -size 34359 +oid sha256:dd5c940af37b03268f32d57e43d35eec59261fa9674d89ba09d2a234d5427e7b +size 34176 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_de.png index 9894e670596..e50613340c4 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:492892e916387121192876e1e90e8a2a8862f65179e166910e87cf7ba67a2ef5 -size 25745 +oid sha256:bea5fe491eef49d520d53021f3ac2a4184b4b50422be6439f3822200643034ca +size 25558 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_0_de.png index 1abe5f31555..f0078197358 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_0_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:471fbb4c02418814037434bda896789e60b0fd7d0d63579b6e368eb1b57a1eb9 -size 47040 +oid sha256:0b8333deb905a5e1431597f59fe58b14591cb2fc424c80804fbb1ce340ce8bb8 +size 46941 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_1_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_1_de.png index c71d234d43f..c7ee196df8e 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_1_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20f7a2b75af02a76ef6d3ca99e5babeca32e1a25de075385e0a7f0965d6dee80 -size 12708 +oid sha256:c263b0b8fd4c6bdf53118aa5ed06ef919ae5973ed370580cd3d6290c455f9c39 +size 12524 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_2_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_2_de.png index 86a2ae8a043..4bdd05fb187 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_2_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:545e31ee319083c052eb97fb54cac5e4f97ac3d199289bdb544dda908fc2e941 -size 14062 +oid sha256:1fc655569ee74f678cf7355bc2cd69349d119c5bee233604f4c11815766371e8 +size 13876 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_3_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_3_de.png index c71d234d43f..c7ee196df8e 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_3_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20f7a2b75af02a76ef6d3ca99e5babeca32e1a25de075385e0a7f0965d6dee80 -size 12708 +oid sha256:c263b0b8fd4c6bdf53118aa5ed06ef919ae5973ed370580cd3d6290c455f9c39 +size 12524 diff --git a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_8_de.png b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_8_de.png index 8055489688b..9886eb1f07d 100644 --- a/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_8_de.png +++ b/screenshots/de/features.roomdetails.impl.members_RoomMemberListView_Day_8_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f36c4fc25cfc9ba31e564d5c0f5520f4f3b08eb7bf839d6ed35bc4e1e1c9898 -size 21857 +oid sha256:7f29deb95619350659f5c1932c72d06edb952c06bb894d2afec87282503ce266 +size 21647 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_de.png index 88f9bc02cc7..ed7482c50a1 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:821fffec529240bef83cb0230fd262fa8775d07fbf9775e5af4bced0597b7384 -size 16283 +oid sha256:5a2c8c098a7d8f23342f561de6ab7f6edacdbe4fe5eeec53428e19a2ff2dd078 +size 16089 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_de.png index f4da3cdc35a..71af31f332f 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2400bc1dd8fc0b1a8fe9b31724f28cbcdc26cf7824ae3ac49f289e9192fba5eb -size 51854 +oid sha256:133864d58cc04374073951dc02d58662260bdd9c2017a09f4049fc346ce3550b +size 51721 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_de.png index 0ceaad45679..1e4f2970134 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72a5fff0aa68f63d730611c91f9a83092bb9ff93c398e04c33f434e4bc55ef59 -size 73466 +oid sha256:6e964c116b3dd244021abbeb70e0a612e1d913b306f7d5aaab759f6fb101d086 +size 73293 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_de.png index 152d19c0d4f..6a4b90c0a79 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc88eb3057bb53e39f63b66d9f209ab1a0ff1baf981c708291c10d0924f12e3d -size 66529 +oid sha256:18fe56867c3d0efc4e17b2d08c195fd66ebb4f27df0d6ce567bf5c6133ae42b2 +size 66339 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_de.png index 9a3f586b9a8..cf912dd5cdb 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66e47c84c4eb0235a3f6b6e3525d0dd0b4df538f74a530042b9f07ee6632101f -size 66347 +oid sha256:d327354425d4fe637dfa63e2cc95931dc9f40a75ce88201248e069b06df29a4d +size 66150 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_de.png index b11456191e4..c285ad9b0a7 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f7137edd680e494c65683501a1b763c8ed60c19a0746ebc4f62204713945247 -size 61311 +oid sha256:b8de342bd67e9dddc743f8716da6c41dffa6e8c1d3fdc64bb092a3561170f71a +size 61148 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_de.png index 58931853338..ad6ccc4c983 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b0c5481c868eb7dc61aca6b5f0232aa1bda2db9f144b2ec3c5b9af38a8d45d1 -size 64488 +oid sha256:02d1579b6994061a9e397049cd7b446a98c9505dd13d72e159e91902928ea889 +size 64377 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_de.png index b669e7a0dbe..859c7c4641c 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e20fcee247e6481b0a8572e62406a6ca1860c213d21c6fa0d5dac0c96fd31516 -size 65931 +oid sha256:2c482326554e6872e8aef8cafb0fb5c568ce04749894856bae671b218066555f +size 65834 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_de.png index b7f4ba7952d..ef70ed71645 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06cfe3f276744cdc2e062713a5f0740fb4f3183e25d9c6e774d03c54b4e0834f -size 55992 +oid sha256:d51626bc080f77c4cfd8166780a4cca6cfb6f587beab7c88cebf131d8d606db6 +size 55879 diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_de.png index 2fa5bd13f9d..76a4d898a59 100644 --- a/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_de.png +++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8246376167a0ec50efc38d493304380a6c3b74d472d44525001a75f4ca6b5ead -size 68844 +oid sha256:1b2f7973608d2a6cf008240270f42621f6d90640df828f892777ac0b477d11b2 +size 68666 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_de.png index 72994deb643..8633ecc2d8c 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14d765a01eae72aac266ed43f76dc90d22b7266d7101d0ff0375e57659024b1d -size 47752 +oid sha256:f383344042f1bb7d43d0e3a833a752037027fb0001ebd6cc40ff021d3ba6e46c +size 48565 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_de.png index 7b08fa1778b..5055643be0a 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9175dd8bae4d6b6e3dc083df268d54614be201dc892d092920b270159eb21a6f -size 70104 +oid sha256:7cc757a69788e3eb07e4c87bc2dc1aaf71b5ceac308abf5241b3c96855293d37 +size 71472 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_de.png index c4bcab84d1b..fc337bf4544 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25913f33e8fea06f17385015b5b1a88c98b34d99438baea85909c46d7b1b82a0 -size 70236 +oid sha256:784fac4a85c0d55c442662a7fdc98d98c9f7c1169bbbcab6f7bb89aea1b1209c +size 71604 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_de.png index c9daaac280b..aa7bdb9646d 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23d85d68bc2dc825d6805623dbd193a5ef1b412a5cdf900441f01fcb2e318348 -size 68328 +oid sha256:f75d12955843c54ac735cb0b331f99b759355f40e590eccb3cdc773aed70a81f +size 69637 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_de.png index 0cc055f73cb..1420e7677fb 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:502681d6b4b59763d7d5a82297431bbaf1ce3d80f355d778df24ce627dfb8a7c -size 69739 +oid sha256:312e50890a21e2a79d39fb768800cccf674628b5b3b66ca05e470063c394a735 +size 71119 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_de.png index bf80d60947d..7ee9e9d9e4f 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2949e189567007b37f6c81e281a8669318db77f3d02457efb544905a010b5354 -size 47515 +oid sha256:2c00b5f7bce75d364cb46d4cfe1f63bd6a9d003fb3f68e32486bd6f60520ae4f +size 48341 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_de.png index bf80d60947d..7ee9e9d9e4f 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2949e189567007b37f6c81e281a8669318db77f3d02457efb544905a010b5354 -size 47515 +oid sha256:2c00b5f7bce75d364cb46d4cfe1f63bd6a9d003fb3f68e32486bd6f60520ae4f +size 48341 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_de.png index 26a397618f9..613aff3c948 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12cd5e58293045f53097220dabe12cc112b58e048baace0fe16441d882fdb3b6 -size 50175 +oid sha256:536fb85bdbc3e2660db78007728f0fc2f7830a0def406cc7214d484285c19fe2 +size 50439 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_de.png index 0a0c20b3ef6..084e63091e4 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fb0f53a1226c45749c3c5a610f6b61bc2f32735cd8a8191dba789be6bc233ef -size 41812 +oid sha256:a260d5bda02a37ed6b69370d12b4520c6031bb8934f09e46443b062abd71ffbd +size 42447 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_de.png index 76af4e60a95..68c28f0a015 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87fe0c72b32ec3763e55e006ef2e8cd4fa136fe51909c1e2a014acbdf67f5acb -size 49984 +oid sha256:bbeda1904ab02151d6a80c32f0e9402327a06dfc4611d1d7d83bb44b52aed864 +size 50596 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_de.png index f0cddc93c07..626117ba587 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20f6f802c0efde55dede378f3931ba91954a343b85e20622254edb9536eb8520 -size 72749 +oid sha256:12c6583a8adcbbe73757d872e29c39c5baab4361424e87a79fff34a9f3dee050 +size 74113 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_de.png index 5d7c7fa59fd..67a0be42e5d 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c86e60565c0c48536af6eb9335c6fbf8787338f40942873c6e9761546ae69fe -size 72980 +oid sha256:5e1ee6be576030ab071bfbee60b0b6d6f1e81e525e4ba04c84ef7768621be61b +size 74344 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_de.png index a7601a169fe..0bec6dfb4a5 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44c111edf5a396ca4f8e2ec330a4ad911a74c031ff338936c629271831e8c4f6 -size 70624 +oid sha256:81949b7dc7f89b0a3941a853a1ce19e1d184a21d4d1c449b7f052277afed2c16 +size 72031 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_de.png index 4d3fed3a267..39f27fa76b7 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7771b32497709c40670f60d5fd8f7d8690ced4970944780f9ac300fd616aff2e -size 72328 +oid sha256:6118f7f47e086bfe78ef529f0f5ed3ca71172c4b43787b04046b6afa1f4e54fa +size 73692 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_de.png index 783d558a72d..2a51f8cb63b 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a5fac2cbe4257347412c281d4bee85ecce39045630a20516290dc120a75eb96 -size 49835 +oid sha256:b76f848c6cd6cd9a5b06a32c56d36d5c988ee26b75540c5794172bac8bc1a3fd +size 50568 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_de.png index 783d558a72d..2a51f8cb63b 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a5fac2cbe4257347412c281d4bee85ecce39045630a20516290dc120a75eb96 -size 49835 +oid sha256:b76f848c6cd6cd9a5b06a32c56d36d5c988ee26b75540c5794172bac8bc1a3fd +size 50568 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_de.png index cfca1deb8f6..45780e9eb1c 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33974316edc62a80fa1279aebaf875449b721826c0696f0f280c7f966195dfa5 -size 52473 +oid sha256:025c1831c0817136766324c982006a8a8c075845fdf27557155d06edb24f9bf0 +size 52759 diff --git a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_de.png b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_de.png index 3382031c79e..a0b9e5d6563 100644 --- a/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_de.png +++ b/screenshots/de/features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:308c12cb5c1db09b7cb0ae42504b9f5df790f03e142ff023480451adeaa2f102 -size 43148 +oid sha256:db1a8f64d38169318cc4cfeaa743693d4aa5749275fbde0e531ba5ddc2752521 +size 43844 diff --git a/screenshots/de/features.userprofile.shared_UserProfileView_Day_8_de.png b/screenshots/de/features.userprofile.shared_UserProfileView_Day_8_de.png new file mode 100644 index 00000000000..2f6c5ca8415 --- /dev/null +++ b/screenshots/de/features.userprofile.shared_UserProfileView_Day_8_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9bee04a897472cb60541b6598fff904138061be4021d01b3ee65264868dc47e +size 37343 diff --git a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_6_de.png b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_6_de.png index d7e91ecc8c7..b1a584694ac 100644 --- a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_6_de.png +++ b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_6_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c02bd36e06f22e03032829e6bc3a291bf8706fda27e5cbd56138c3cd036e14ea -size 34833 +oid sha256:c9c7c1d0b44e6b64d3e8a9122bbd928996140b35c963ccf4bcfc89414e796c7d +size 34784 diff --git a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_7_de.png b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_7_de.png index d7e91ecc8c7..b1a584694ac 100644 --- a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_7_de.png +++ b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_7_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c02bd36e06f22e03032829e6bc3a291bf8706fda27e5cbd56138c3cd036e14ea -size 34833 +oid sha256:c9c7c1d0b44e6b64d3e8a9122bbd928996140b35c963ccf4bcfc89414e796c7d +size 34784 diff --git a/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_de.png b/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_de.png new file mode 100644 index 00000000000..57e38e94ac3 --- /dev/null +++ b/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93dfdc0e4adfe743a67dd0bf94f651f032c31deee64ca6345a82a1b664f7b117 +size 28570 diff --git a/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_de.png b/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_de.png new file mode 100644 index 00000000000..517fe0fa4f7 --- /dev/null +++ b/screenshots/de/libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_de.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eab77026323f4221a228c446703b565044e143dc5688269a77966d605464343c +size 26943 diff --git a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_0_de.png b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_0_de.png index b6d92817467..3b66447591a 100644 --- a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_0_de.png +++ b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd763383c2d6f47b24dfe3f47d278973e29b00450096ff6f949931aa09ca75f8 -size 14089 +oid sha256:6ff19ac2b9dbf379714490d1c8b6b7a84e88f2227bcbb3fd693729cf97ce397c +size 13959 diff --git a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_2_de.png b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_2_de.png index ace652b5df4..48294c4a85a 100644 --- a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_2_de.png +++ b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0bfdf376aea0bd2954f29415ae0f494a18d7182b6da2cb71a2199ff4e53a380 -size 32427 +oid sha256:5b11f9a61532b3b5b7179bbae28cd9834128ed31b5b2d6fa18a5b58b87840c6d +size 32291 diff --git a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_5_de.png b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_5_de.png index 4cce3588aa0..cee48fe4c4c 100644 --- a/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_5_de.png +++ b/screenshots/de/libraries.roomselect.impl_RoomSelectView_Day_5_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98501963992b0a158c299eaba73af2d3de09c8d73e6ef35b7042c291ce21c32e -size 30102 +oid sha256:3f506cdaf8275b1174541b7f50e19f5a2b7f6bd07136333392fbeac8449b8f38 +size 29963 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index 9fa9c532361..2f1ee47dfb0 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1,60 +1,60 @@ // 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",20119,], +["features.preferences.impl.about_AboutView_Day_0_en","features.preferences.impl.about_AboutView_Night_0_en",20132,], ["features.invite.impl.response_AcceptDeclineInviteView_Day_0_en","features.invite.impl.response_AcceptDeclineInviteView_Night_0_en",0,], -["features.invite.impl.response_AcceptDeclineInviteView_Day_1_en","features.invite.impl.response_AcceptDeclineInviteView_Night_1_en",20119,], -["features.invite.impl.response_AcceptDeclineInviteView_Day_2_en","features.invite.impl.response_AcceptDeclineInviteView_Night_2_en",20119,], -["features.invite.impl.response_AcceptDeclineInviteView_Day_3_en","features.invite.impl.response_AcceptDeclineInviteView_Night_3_en",20119,], -["features.invite.impl.response_AcceptDeclineInviteView_Day_4_en","features.invite.impl.response_AcceptDeclineInviteView_Night_4_en",20119,], -["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20119,], -["features.logout.impl_AccountDeactivationView_Day_1_en","features.logout.impl_AccountDeactivationView_Night_1_en",20119,], -["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20119,], -["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20119,], -["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20119,], +["features.invite.impl.response_AcceptDeclineInviteView_Day_1_en","features.invite.impl.response_AcceptDeclineInviteView_Night_1_en",20132,], +["features.invite.impl.response_AcceptDeclineInviteView_Day_2_en","features.invite.impl.response_AcceptDeclineInviteView_Night_2_en",20132,], +["features.invite.impl.response_AcceptDeclineInviteView_Day_3_en","features.invite.impl.response_AcceptDeclineInviteView_Night_3_en",20132,], +["features.invite.impl.response_AcceptDeclineInviteView_Day_4_en","features.invite.impl.response_AcceptDeclineInviteView_Night_4_en",20132,], +["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20132,], +["features.logout.impl_AccountDeactivationView_Day_1_en","features.logout.impl_AccountDeactivationView_Night_1_en",20132,], +["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20132,], +["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20132,], +["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20132,], ["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",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20119,], +["features.messages.impl.actionlist_ActionListViewContent_Day_10_en","features.messages.impl.actionlist_ActionListViewContent_Night_10_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20132,], ["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",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20119,], -["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20119,], -["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20119,], -["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20119,], -["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20119,], -["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20119,], -["features.preferences.impl.advanced_AdvancedSettingsView_Day_0_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_0_en",20119,], -["features.preferences.impl.advanced_AdvancedSettingsView_Day_1_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_1_en",20119,], -["features.preferences.impl.advanced_AdvancedSettingsView_Day_2_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_2_en",20119,], -["features.preferences.impl.advanced_AdvancedSettingsView_Day_3_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_3_en",20119,], -["features.preferences.impl.advanced_AdvancedSettingsView_Day_4_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_4_en",20119,], -["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20119,], -["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20119,], -["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20119,], -["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20119,], -["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20119,], +["features.messages.impl.actionlist_ActionListViewContent_Day_2_en","features.messages.impl.actionlist_ActionListViewContent_Night_2_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20132,], +["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20132,], +["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20132,], +["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20132,], +["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20132,], +["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20132,], +["features.preferences.impl.advanced_AdvancedSettingsView_Day_0_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_0_en",20132,], +["features.preferences.impl.advanced_AdvancedSettingsView_Day_1_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_1_en",20132,], +["features.preferences.impl.advanced_AdvancedSettingsView_Day_2_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_2_en",20132,], +["features.preferences.impl.advanced_AdvancedSettingsView_Day_3_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_3_en",20132,], +["features.preferences.impl.advanced_AdvancedSettingsView_Day_4_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_4_en",20132,], +["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20132,], +["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20132,], +["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20132,], +["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20132,], +["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20132,], ["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",20119,], +["services.apperror.impl_AppErrorView_Day_0_en","services.apperror.impl_AppErrorView_Night_0_en",20132,], ["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",20119,], +["libraries.designsystem.components.async_AsyncActionView_Day_1_en","libraries.designsystem.components.async_AsyncActionView_Night_1_en",20132,], ["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",20119,], +["libraries.designsystem.components.async_AsyncActionView_Day_3_en","libraries.designsystem.components.async_AsyncActionView_Night_3_en",20132,], ["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",20119,], +["libraries.designsystem.components.async_AsyncFailure_Day_0_en","libraries.designsystem.components.async_AsyncFailure_Night_0_en",20132,], ["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",20119,], +["features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Day_0_en","features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Night_0_en",20132,], ["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,], @@ -64,18 +64,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","",20119,], -["features.messages.impl.attachments.preview_AttachmentsView_1_en","",20119,], -["features.messages.impl.attachments.preview_AttachmentsView_2_en","",20119,], -["features.messages.impl.attachments.preview_AttachmentsView_3_en","",20119,], -["features.messages.impl.attachments.preview_AttachmentsView_4_en","",20119,], -["features.messages.impl.attachments.preview_AttachmentsView_5_en","",20119,], +["features.messages.impl.attachments.preview_AttachmentsView_0_en","",20132,], +["features.messages.impl.attachments.preview_AttachmentsView_1_en","",20132,], +["features.messages.impl.attachments.preview_AttachmentsView_2_en","",20132,], +["features.messages.impl.attachments.preview_AttachmentsView_3_en","",20132,], +["features.messages.impl.attachments.preview_AttachmentsView_4_en","",20132,], +["features.messages.impl.attachments.preview_AttachmentsView_5_en","",20132,], ["features.messages.impl.attachments.preview_AttachmentsView_6_en","",0,], -["features.messages.impl.attachments.preview_AttachmentsView_7_en","",20119,], +["features.messages.impl.attachments.preview_AttachmentsView_7_en","",20132,], ["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",20119,], +["libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_en","libraries.matrix.ui.components_AvatarActionBottomSheet_Night_0_en",20132,], ["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,], @@ -171,19 +171,22 @@ export const screenshots = [ ["libraries.designsystem.components.avatar_Avatar_Avatars_84_en","",0,], ["libraries.designsystem.components.avatar_Avatar_Avatars_85_en","",0,], ["libraries.designsystem.components.avatar_Avatar_Avatars_86_en","",0,], +["libraries.designsystem.components.avatar_Avatar_Avatars_87_en","",0,], +["libraries.designsystem.components.avatar_Avatar_Avatars_88_en","",0,], +["libraries.designsystem.components.avatar_Avatar_Avatars_89_en","",0,], ["libraries.designsystem.components.avatar_Avatar_Avatars_8_en","",0,], ["libraries.designsystem.components.avatar_Avatar_Avatars_9_en","",0,], ["libraries.designsystem.components.button_BackButton_Buttons_en","",0,], ["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",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20119,], -["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20119,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_0_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_0_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20132,], +["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20132,], ["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,], @@ -194,123 +197,126 @@ 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",20119,], -["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20119,], -["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20119,], -["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20119,], -["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20119,], +["features.rageshake.impl.bugreport_BugReportView_Day_0_en","features.rageshake.impl.bugreport_BugReportView_Night_0_en",20132,], +["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20132,], +["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20132,], +["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20132,], +["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components_CallMenuItem_Day_3_en","features.messages.impl.timeline.components_CallMenuItem_Night_3_en",20119,], +["features.messages.impl.timeline.components_CallMenuItem_Day_2_en","features.messages.impl.timeline.components_CallMenuItem_Night_2_en",20132,], +["features.messages.impl.timeline.components_CallMenuItem_Day_3_en","features.messages.impl.timeline.components_CallMenuItem_Night_3_en",20132,], ["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",20119,], -["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20119,], -["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20119,], -["libraries.textcomposer_CaptionWarningBottomSheet_Day_0_en","libraries.textcomposer_CaptionWarningBottomSheet_Night_0_en",20119,], -["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20119,], -["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20119,], +["features.call.impl.ui_CallScreenView_Day_1_en","features.call.impl.ui_CallScreenView_Night_1_en",20132,], +["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20132,], +["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20132,], +["libraries.textcomposer_CaptionWarningBottomSheet_Day_0_en","libraries.textcomposer_CaptionWarningBottomSheet_Night_0_en",20132,], +["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20132,], +["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20132,], ["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",20119,], -["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20119,], +["features.login.impl.changeserver_ChangeServerView_Day_1_en","features.login.impl.changeserver_ChangeServerView_Night_1_en",20132,], +["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20132,], ["libraries.matrix.ui.components_CheckableResolvedUserRow_en","",0,], -["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20119,], +["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20132,], ["libraries.designsystem.theme.components_Checkboxes_Toggles_en","",0,], ["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",20119,], -["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20119,], -["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20119,], +["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_0_en",20132,], +["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20132,], +["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20132,], ["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.textcomposer.components_ComposerOptionsButton_Day_0_en","libraries.textcomposer.components_ComposerOptionsButton_Night_0_en",0,], ["libraries.designsystem.components.avatar_CompositeAvatar_Avatars_en","",0,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en","",20119,], -["features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en","",20119,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20119,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20119,], -["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20119,], -["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20119,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en","",20132,], +["features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en","",20132,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20132,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20132,], +["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20132,], +["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20132,], ["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",20119,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20119,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20119,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20119,], -["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20119,], -["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20119,], -["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20119,], -["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20119,], -["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20119,], -["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20119,], -["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20119,], -["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20119,], -["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20119,], -["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20119,], -["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20119,], -["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20119,], -["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20119,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_0_en","",20119,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_1_en","",20119,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_2_en","",20119,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_3_en","",20119,], -["libraries.dateformatter.impl.previews_DateFormatterModeView_4_en","",20119,], +["features.rageshake.api.crash_CrashDetectionView_Day_0_en","features.rageshake.api.crash_CrashDetectionView_Night_0_en",20132,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20132,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20132,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20132,], +["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20132,], +["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_0_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_0_en",20136,], +["libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Day_1_en","libraries.matrix.ui.components_CreateDmConfirmationBottomSheet_Night_1_en",20136,], +["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20132,], +["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20132,], +["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20132,], +["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20132,], +["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20132,], +["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20132,], +["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20132,], +["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20132,], +["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20132,], +["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20132,], +["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20132,], +["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20132,], +["features.createroom.impl.root_CreateRoomRootView_Day_4_en","features.createroom.impl.root_CreateRoomRootView_Night_4_en",20136,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_0_en","",20132,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_1_en","",20132,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_2_en","",20132,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_3_en","",20132,], +["libraries.dateformatter.impl.previews_DateFormatterModeView_4_en","",20132,], ["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","",20119,], -["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_en","",20119,], +["libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_en","",20132,], +["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_en","",20132,], ["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",20119,], -["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20119,], -["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20119,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_1_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_1_en",20132,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20132,], +["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20132,], ["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",20119,], -["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20119,], -["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20119,], +["features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Day_0_en","features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Night_0_en",20132,], +["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20132,], +["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20132,], ["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",20119,], -["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20119,], -["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20119,], -["features.licenses.impl.list_DependencyLicensesListView_Day_3_en","features.licenses.impl.list_DependencyLicensesListView_Night_3_en",20119,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20119,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20119,], -["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20119,], +["features.licenses.impl.list_DependencyLicensesListView_Day_0_en","features.licenses.impl.list_DependencyLicensesListView_Night_0_en",20132,], +["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20132,], +["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20132,], +["features.licenses.impl.list_DependencyLicensesListView_Day_3_en","features.licenses.impl.list_DependencyLicensesListView_Night_3_en",20132,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20132,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20132,], +["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20132,], ["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,], @@ -323,17 +329,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",20119,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20119,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20119,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20119,], -["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20119,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_0_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_0_en",20122,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_1_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_1_en",20122,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_2_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_2_en",20122,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_3_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_3_en",20122,], -["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_4_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_4_en",20122,], -["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20119,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_0_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_0_en",20132,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20132,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20132,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20132,], +["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20132,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_0_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_0_en",20132,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_1_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_1_en",20132,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_2_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_2_en",20132,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_3_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_3_en",20132,], +["features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Day_4_en","features.roomdetails.impl.securityandprivacy.editroomaddress_EditRoomAddressView_Night_4_en",20132,], +["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20132,], ["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,], @@ -343,9 +349,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","",20119,], -["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20119,], -["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20119,], +["libraries.designsystem.components.dialogs_ErrorDialogContent_Dialogs_en","",20132,], +["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20132,], +["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20132,], ["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,], @@ -363,15 +369,15 @@ 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",20119,], -["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20119,], -["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20119,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_1_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_1_en",20132,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20132,], +["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20132,], ["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",20119,], -["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20119,], +["features.messages.impl.forward_ForwardMessagesView_Day_3_en","features.messages.impl.forward_ForwardMessagesView_Night_3_en",20132,], +["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20132,], ["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,], @@ -383,8 +389,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,], @@ -393,8 +399,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",20119,], -["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20119,], +["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en",20132,], +["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20132,], ["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,], @@ -402,63 +408,68 @@ 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",20119,], +["libraries.matrix.ui.messages.reply_InReplyToView_Day_4_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_4_en",20132,], ["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",20119,], +["libraries.matrix.ui.messages.reply_InReplyToView_Day_8_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_8_en",20132,], ["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",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_0_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_0_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20119,], -["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20119,], +["features.call.impl.ui_IncomingCallScreen_Day_0_en","features.call.impl.ui_IncomingCallScreen_Night_0_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_0_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_0_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20132,], +["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20132,], +["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",20119,], +["libraries.matrix.ui.components_InviteSenderView_Day_0_en","libraries.matrix.ui.components_InviteSenderView_Night_0_en",20132,], ["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",20119,], -["features.joinroom.impl_JoinRoomView_Day_11_en","features.joinroom.impl_JoinRoomView_Night_11_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_12_en","features.joinroom.impl_JoinRoomView_Night_12_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20119,], -["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",0,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_0_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_0_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_1_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_1_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_2_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_2_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_3_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_3_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_4_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_4_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_5_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_5_en",20119,], -["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_6_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_6_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_0_en","features.knockrequests.impl.list_KnockRequestsListView_Night_0_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_10_en","features.knockrequests.impl.list_KnockRequestsListView_Night_10_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_1_en","features.knockrequests.impl.list_KnockRequestsListView_Night_1_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_2_en","features.knockrequests.impl.list_KnockRequestsListView_Night_2_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_3_en","features.knockrequests.impl.list_KnockRequestsListView_Night_3_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_4_en","features.knockrequests.impl.list_KnockRequestsListView_Night_4_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_5_en","features.knockrequests.impl.list_KnockRequestsListView_Night_5_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_6_en","features.knockrequests.impl.list_KnockRequestsListView_Night_6_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_7_en","features.knockrequests.impl.list_KnockRequestsListView_Night_7_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_8_en","features.knockrequests.impl.list_KnockRequestsListView_Night_8_en",20119,], -["features.knockrequests.impl.list_KnockRequestsListView_Day_9_en","features.knockrequests.impl.list_KnockRequestsListView_Night_9_en",20119,], +["features.joinroom.impl_JoinRoomView_Day_10_en","features.joinroom.impl_JoinRoomView_Night_10_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_11_en","features.joinroom.impl_JoinRoomView_Night_11_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_12_en","features.joinroom.impl_JoinRoomView_Night_12_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_13_en","features.joinroom.impl_JoinRoomView_Night_13_en",20136,], +["features.joinroom.impl_JoinRoomView_Day_14_en","features.joinroom.impl_JoinRoomView_Night_14_en",20136,], +["features.joinroom.impl_JoinRoomView_Day_15_en","features.joinroom.impl_JoinRoomView_Night_15_en",20136,], +["features.joinroom.impl_JoinRoomView_Day_16_en","features.joinroom.impl_JoinRoomView_Night_16_en",20136,], +["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20132,], +["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",20136,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_0_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_0_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_1_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_1_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_2_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_2_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_3_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_3_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_4_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_4_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_5_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_5_en",20132,], +["features.knockrequests.impl.banner_KnockRequestsBannerView_Day_6_en","features.knockrequests.impl.banner_KnockRequestsBannerView_Night_6_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_0_en","features.knockrequests.impl.list_KnockRequestsListView_Night_0_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_10_en","features.knockrequests.impl.list_KnockRequestsListView_Night_10_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_1_en","features.knockrequests.impl.list_KnockRequestsListView_Night_1_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_2_en","features.knockrequests.impl.list_KnockRequestsListView_Night_2_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_3_en","features.knockrequests.impl.list_KnockRequestsListView_Night_3_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_4_en","features.knockrequests.impl.list_KnockRequestsListView_Night_4_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_5_en","features.knockrequests.impl.list_KnockRequestsListView_Night_5_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_6_en","features.knockrequests.impl.list_KnockRequestsListView_Night_6_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_7_en","features.knockrequests.impl.list_KnockRequestsListView_Night_7_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_8_en","features.knockrequests.impl.list_KnockRequestsListView_Night_8_en",20132,], +["features.knockrequests.impl.list_KnockRequestsListView_Day_9_en","features.knockrequests.impl.list_KnockRequestsListView_Night_9_en",20132,], ["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",20119,], -["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20119,], -["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20119,], -["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20119,], -["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20119,], -["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20119,], +["features.leaveroom.api_LeaveRoomView_Day_1_en","features.leaveroom.api_LeaveRoomView_Night_1_en",20132,], +["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20132,], +["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20132,], +["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20132,], +["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20132,], +["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20132,], ["libraries.designsystem.background_LightGradientBackground_Day_0_en","libraries.designsystem.background_LightGradientBackground_Night_0_en",0,], ["libraries.designsystem.theme.components_LinearProgressIndicator_Progress_Indicators_en","",0,], ["libraries.designsystem.components.dialogs_ListDialogContent_Dialogs_en","",0,], @@ -515,29 +526,29 @@ 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",20119,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20119,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20119,], -["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20119,], +["appnav.room.joined_LoadingRoomNodeView_Day_1_en","appnav.room.joined_LoadingRoomNodeView_Night_1_en",20132,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20132,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20132,], +["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20132,], ["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",20119,], -["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20119,], -["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20119,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20119,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20119,], -["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20119,], -["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20119,], -["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20119,], -["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20119,], -["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20119,], -["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20119,], -["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20119,], -["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20119,], -["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20119,], -["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20119,], -["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20119,], +["appnav.loggedin_LoggedInView_Day_1_en","appnav.loggedin_LoggedInView_Night_1_en",20132,], +["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20132,], +["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20132,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20132,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20132,], +["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20132,], +["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20132,], +["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20132,], +["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20132,], +["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20132,], +["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20132,], +["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20132,], +["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20132,], +["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20132,], +["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20132,], +["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20132,], ["libraries.designsystem.components.button_MainActionButton_Buttons_en","",0,], -["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20119,], +["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20132,], ["libraries.textcomposer.components.markdown_MarkdownTextInput_Day_0_en","libraries.textcomposer.components.markdown_MarkdownTextInput_Night_0_en",0,], ["libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en","libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en",0,], ["libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en","libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en",0,], @@ -549,22 +560,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",20119,], -["libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Night_0_en",20119,], +["libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDeleteConfirmationBottomSheet_Night_0_en",20132,], +["libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Day_0_en","libraries.mediaviewer.impl.details_MediaDetailsBottomSheet_Night_0_en",20132,], ["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",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_10_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_10_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_11_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_11_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_12_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_12_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_1_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_1_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_2_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_2_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_3_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_3_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_4_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_4_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_5_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_5_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_6_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_6_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_7_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_7_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_8_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_8_en",20119,], -["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_9_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_9_en",20119,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_0_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_0_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_10_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_10_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_11_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_11_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_12_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_12_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_1_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_1_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_2_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_2_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_3_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_3_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_4_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_4_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_5_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_5_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_6_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_6_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_7_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_7_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_8_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_8_en",20132,], +["libraries.mediaviewer.impl.gallery_MediaGalleryView_Day_9_en","libraries.mediaviewer.impl.gallery_MediaGalleryView_Night_9_en",20132,], ["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,], @@ -572,13 +583,13 @@ 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","",20119,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_12_en","",20119,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_11_en","",20132,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_12_en","",20132,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_13_en","",0,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_14_en","",20122,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_14_en","",20132,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_15_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_1_en","",0,], -["libraries.mediaviewer.impl.viewer_MediaViewerView_2_en","",20119,], +["libraries.mediaviewer.impl.viewer_MediaViewerView_2_en","",20132,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_3_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_4_en","",0,], ["libraries.mediaviewer.impl.viewer_MediaViewerView_5_en","",0,], @@ -590,7 +601,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",20119,], +["features.messages.impl.messagecomposer_MessageComposerView_Day_0_en","features.messages.impl.messagecomposer_MessageComposerView_Night_0_en",20132,], ["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,], @@ -607,7 +618,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",20119,], +["features.messages.impl.timeline.components_MessageShieldView_Day_0_en","features.messages.impl.timeline.components_MessageShieldView_Night_0_en",20132,], ["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,], @@ -615,23 +626,23 @@ 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",20119,], -["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20119,], -["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20119,], -["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20119,], -["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20119,], -["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20119,], -["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20119,], -["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20119,], -["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20119,], -["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20119,], -["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20119,], -["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20119,], -["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20119,], -["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20119,], -["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20119,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en",20132,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20132,], +["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20132,], +["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20132,], +["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20132,], +["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20132,], +["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20132,], +["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20132,], +["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20132,], +["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20132,], +["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20132,], +["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20132,], +["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20132,], +["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20132,], +["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20132,], ["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",20119,], +["features.migration.impl_MigrationView_Day_1_en","features.migration.impl_MigrationView_Night_1_en",20132,], ["libraries.designsystem.theme.components_ModalBottomSheetDark_Bottom_Sheets_en","",0,], ["libraries.designsystem.theme.components_ModalBottomSheetLight_Bottom_Sheets_en","",0,], ["appicon.element_MonochromeIcon_en","",0,], @@ -640,28 +651,28 @@ 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.roomlist.impl.components_NativeSlidingSyncMigrationBanner_Day_0_en","features.roomlist.impl.components_NativeSlidingSyncMigrationBanner_Night_0_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20119,], -["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20119,], -["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20119,], +["features.roomlist.impl.components_NativeSlidingSyncMigrationBanner_Day_0_en","features.roomlist.impl.components_NativeSlidingSyncMigrationBanner_Night_0_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20132,], +["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20132,], +["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20132,], ["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",20119,], -["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20119,], -["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20119,], -["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20119,], +["features.onboarding.impl_OnBoardingView_Day_0_en","features.onboarding.impl_OnBoardingView_Night_0_en",20132,], +["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20132,], +["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20132,], +["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20132,], ["libraries.designsystem.background_OnboardingBackground_Day_0_en","libraries.designsystem.background_OnboardingBackground_Night_0_en",0,], ["libraries.designsystem.theme.components_OutlinedButtonLargeLowPadding_Buttons_en","",0,], ["libraries.designsystem.theme.components_OutlinedButtonLarge_Buttons_en","",0,], @@ -675,65 +686,65 @@ export const screenshots = [ ["libraries.designsystem.components_PageTitleWithIconFull_Day_4_en","libraries.designsystem.components_PageTitleWithIconFull_Night_4_en",0,], ["libraries.designsystem.components_PageTitleWithIconFull_Day_5_en","libraries.designsystem.components_PageTitleWithIconFull_Night_5_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",20119,], -["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20119,], -["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20119,], -["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20119,], -["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20119,], -["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20119,], +["libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Day_0_en","libraries.mediaviewer.impl.local.pdf_PdfPagesErrorView_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20132,], +["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20132,], +["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20132,], +["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20132,], +["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20132,], ["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",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20119,], -["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20119,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_0_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_0_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20132,], +["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20132,], ["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",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20119,], -["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20119,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20119,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20119,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20119,], -["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20119,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_10_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_10_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20132,], +["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20132,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20132,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20132,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20132,], +["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20132,], ["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",20119,], -["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20119,], -["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20119,], -["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20119,], -["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20119,], +["features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Night_0_en",20132,], +["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20132,], +["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20132,], +["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20132,], +["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20132,], ["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",20119,], -["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20119,], -["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20119,], -["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20119,], -["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20119,], -["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20119,], -["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20119,], -["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20119,], -["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20119,], -["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20119,], -["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20119,], +["features.poll.api.pollcontent_PollContentViewCreatorEditable_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEditable_Night_0_en",20132,], +["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20132,], +["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20132,], +["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20132,], +["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20132,], +["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20132,], +["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20132,], +["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20132,], +["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20132,], +["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20132,], +["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20132,], ["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,], @@ -751,202 +762,202 @@ export const screenshots = [ ["libraries.designsystem.components.preferences_PreferenceTextLight_Preferences_en","",0,], ["libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_Preferences_en","",0,], ["libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_Preferences_en","",0,], -["features.preferences.impl.root_PreferencesRootViewDark_0_en","",20119,], -["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20119,], -["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20119,], -["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20119,], +["features.preferences.impl.root_PreferencesRootViewDark_0_en","",20132,], +["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20132,], +["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20132,], +["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20132,], ["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","",20119,], -["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20119,], -["features.messages.impl.timeline.protection_ProtectedView_Day_0_en","features.messages.impl.timeline.protection_ProtectedView_Night_0_en",20119,], -["features.messages.impl.timeline.protection_ProtectedView_Day_1_en","features.messages.impl.timeline.protection_ProtectedView_Night_1_en",20119,], -["features.messages.impl.timeline.protection_ProtectedView_Day_2_en","features.messages.impl.timeline.protection_ProtectedView_Night_2_en",20119,], -["features.messages.impl.timeline.protection_ProtectedView_Day_3_en","features.messages.impl.timeline.protection_ProtectedView_Night_3_en",20119,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20119,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20119,], -["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20119,], -["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20119,], -["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20119,], -["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20119,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20119,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20119,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20119,], -["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20119,], +["libraries.designsystem.components_ProgressDialogContent_Dialogs_en","",20132,], +["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20132,], +["features.messages.impl.timeline.protection_ProtectedView_Day_0_en","features.messages.impl.timeline.protection_ProtectedView_Night_0_en",20132,], +["features.messages.impl.timeline.protection_ProtectedView_Day_1_en","features.messages.impl.timeline.protection_ProtectedView_Night_1_en",20132,], +["features.messages.impl.timeline.protection_ProtectedView_Day_2_en","features.messages.impl.timeline.protection_ProtectedView_Night_2_en",20132,], +["features.messages.impl.timeline.protection_ProtectedView_Day_3_en","features.messages.impl.timeline.protection_ProtectedView_Night_3_en",20132,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20132,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20132,], +["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20132,], +["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20132,], +["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20132,], +["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20132,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20132,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20132,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20132,], +["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20132,], ["libraries.designsystem.theme.components_RadioButton_Toggles_en","",0,], -["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20119,], -["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20119,], +["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20132,], +["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20119,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20119,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20119,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20119,], -["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20119,], -["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20119,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_0_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_0_en",20132,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20132,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20132,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20132,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20132,], +["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20132,], +["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20132,], ["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",20119,], -["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20119,], -["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20119,], -["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20119,], -["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20119,], -["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20119,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20119,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20119,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20119,], -["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20119,], -["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20119,], -["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20119,], +["features.messages.impl.report_ReportMessageView_Day_0_en","features.messages.impl.report_ReportMessageView_Night_0_en",20132,], +["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20132,], +["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20132,], +["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20132,], +["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20132,], +["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20132,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20132,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20132,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20132,], +["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20132,], +["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20132,], +["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20132,], ["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",20119,], -["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20119,], -["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20119,], -["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20119,], -["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20119,], +["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_1_en",20132,], +["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20132,], +["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20132,], +["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20132,], +["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20132,], ["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",0,], -["features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en",20119,], -["features.roomdetails.impl_RoomDetailsDark_0_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_10_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_11_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_12_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_13_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_14_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_15_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_1_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_2_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_3_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_4_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_5_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_6_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_7_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_8_en","",20119,], -["features.roomdetails.impl_RoomDetailsDark_9_en","",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20119,], -["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20119,], -["features.roomdetails.impl_RoomDetails_0_en","",20119,], -["features.roomdetails.impl_RoomDetails_10_en","",20119,], -["features.roomdetails.impl_RoomDetails_11_en","",20119,], -["features.roomdetails.impl_RoomDetails_12_en","",20119,], -["features.roomdetails.impl_RoomDetails_13_en","",20119,], -["features.roomdetails.impl_RoomDetails_14_en","",20119,], -["features.roomdetails.impl_RoomDetails_15_en","",20119,], -["features.roomdetails.impl_RoomDetails_1_en","",20119,], -["features.roomdetails.impl_RoomDetails_2_en","",20119,], -["features.roomdetails.impl_RoomDetails_3_en","",20119,], -["features.roomdetails.impl_RoomDetails_4_en","",20119,], -["features.roomdetails.impl_RoomDetails_5_en","",20119,], -["features.roomdetails.impl_RoomDetails_6_en","",20119,], -["features.roomdetails.impl_RoomDetails_7_en","",20119,], -["features.roomdetails.impl_RoomDetails_8_en","",20119,], -["features.roomdetails.impl_RoomDetails_9_en","",20119,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20119,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20119,], -["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20119,], -["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20119,], -["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20119,], -["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20119,], +["features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en",20136,], +["features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en",20132,], +["features.roomdetails.impl_RoomDetailsDark_0_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_10_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_11_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_12_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_13_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_14_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_15_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_1_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_2_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_3_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_4_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_5_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_6_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_7_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_8_en","",20132,], +["features.roomdetails.impl_RoomDetailsDark_9_en","",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20132,], +["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20132,], +["features.roomdetails.impl_RoomDetails_0_en","",20132,], +["features.roomdetails.impl_RoomDetails_10_en","",20132,], +["features.roomdetails.impl_RoomDetails_11_en","",20132,], +["features.roomdetails.impl_RoomDetails_12_en","",20132,], +["features.roomdetails.impl_RoomDetails_13_en","",20132,], +["features.roomdetails.impl_RoomDetails_14_en","",20132,], +["features.roomdetails.impl_RoomDetails_15_en","",20132,], +["features.roomdetails.impl_RoomDetails_1_en","",20132,], +["features.roomdetails.impl_RoomDetails_2_en","",20132,], +["features.roomdetails.impl_RoomDetails_3_en","",20132,], +["features.roomdetails.impl_RoomDetails_4_en","",20132,], +["features.roomdetails.impl_RoomDetails_5_en","",20132,], +["features.roomdetails.impl_RoomDetails_6_en","",20132,], +["features.roomdetails.impl_RoomDetails_7_en","",20132,], +["features.roomdetails.impl_RoomDetails_8_en","",20132,], +["features.roomdetails.impl_RoomDetails_9_en","",20132,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20132,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20132,], +["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20132,], +["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20132,], +["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20132,], +["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20132,], ["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",20119,], -["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20119,], -["features.roomlist.impl.components_RoomListContentView_Day_5_en","features.roomlist.impl.components_RoomListContentView_Night_5_en",20119,], -["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20119,], -["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20119,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20119,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20119,], -["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20119,], +["features.roomlist.impl.components_RoomListContentView_Day_3_en","features.roomlist.impl.components_RoomListContentView_Night_3_en",20132,], +["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20132,], +["features.roomlist.impl.components_RoomListContentView_Day_5_en","features.roomlist.impl.components_RoomListContentView_Night_5_en",20132,], +["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20132,], +["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20132,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20132,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20132,], +["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20132,], ["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",20119,], -["features.roomlist.impl.search_RoomListSearchContent_Day_2_en","features.roomlist.impl.search_RoomListSearchContent_Night_2_en",20119,], -["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20119,], -["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20119,], -["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20119,], -["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20119,], -["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20119,], -["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20119,], -["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20119,], -["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20119,], -["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20119,], +["features.roomlist.impl.search_RoomListSearchContent_Day_1_en","features.roomlist.impl.search_RoomListSearchContent_Night_1_en",20132,], +["features.roomlist.impl.search_RoomListSearchContent_Day_2_en","features.roomlist.impl.search_RoomListSearchContent_Night_2_en",20132,], +["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20132,], +["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20132,], +["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20132,], +["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20132,], +["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20132,], +["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20132,], +["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20132,], +["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20132,], +["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20132,], ["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",20119,], -["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20119,], -["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20119,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en",20132,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20132,], +["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20132,], ["features.roomdetails.impl.members_RoomMemberListView_Day_5_en","features.roomdetails.impl.members_RoomMemberListView_Night_5_en",0,], -["features.roomdetails.impl.members_RoomMemberListView_Day_6_en","features.roomdetails.impl.members_RoomMemberListView_Night_6_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20119,], -["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20119,], +["features.roomdetails.impl.members_RoomMemberListView_Day_6_en","features.roomdetails.impl.members_RoomMemberListView_Night_6_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20132,], +["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20132,], ["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",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20119,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_0_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20132,], ["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_5_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_5_en",0,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_6_en",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_7_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_7_en",20119,], -["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20119,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_6_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_7_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_7_en",20132,], +["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20132,], ["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_9_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_9_en",0,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Night_0_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20119,], -["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20119,], -["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20119,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Night_0_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20132,], +["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20132,], +["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20132,], ["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,], @@ -969,12 +980,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",20119,], -["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20119,], -["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20119,], -["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20119,], -["features.roomlist.impl.components_RoomSummaryRow_Day_32_en","features.roomlist.impl.components_RoomSummaryRow_Night_32_en",20119,], -["features.roomlist.impl.components_RoomSummaryRow_Day_33_en","features.roomlist.impl.components_RoomSummaryRow_Night_33_en",20119,], +["features.roomlist.impl.components_RoomSummaryRow_Day_29_en","features.roomlist.impl.components_RoomSummaryRow_Night_29_en",20132,], +["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20132,], +["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20132,], +["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20132,], +["features.roomlist.impl.components_RoomSummaryRow_Day_32_en","features.roomlist.impl.components_RoomSummaryRow_Night_32_en",20132,], +["features.roomlist.impl.components_RoomSummaryRow_Day_33_en","features.roomlist.impl.components_RoomSummaryRow_Night_33_en",20132,], ["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,], @@ -982,77 +993,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",20119,], -["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20119,], -["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20119,], +["appnav.root_RootView_Day_0_en","appnav.root_RootView_Night_0_en",20132,], +["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20132,], +["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20132,], ["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",20119,], -["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20119,], -["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20119,], +["features.verifysession.impl.emoji_SasEmojis_Day_0_en","features.verifysession.impl.emoji_SasEmojis_Night_0_en",20132,], +["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20132,], +["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20132,], ["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","",20119,], +["libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search_views_en","",20132,], ["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","",20119,], -["features.createroom.impl.components_SearchSingleUserResultItem_en","",20119,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20119,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20119,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20119,], -["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20119,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20119,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20119,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20119,], -["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20119,], -["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20119,], -["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20119,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_en","",20122,], -["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_en","",20122,], +["features.createroom.impl.components_SearchMultipleUsersResultItem_en","",20132,], +["features.createroom.impl.components_SearchSingleUserResultItem_en","",20132,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20132,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20132,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20132,], +["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20132,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20132,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20132,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20132,], +["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20132,], +["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20132,], +["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_0_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_1_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_2_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_3_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_4_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_5_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_6_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_7_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewDark_8_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_0_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_1_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_2_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_3_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_4_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_5_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_6_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_7_en","",20132,], +["features.roomdetails.impl.securityandprivacy_SecurityAndPrivacyViewLight_8_en","",20132,], ["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,], @@ -1060,11 +1071,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",20119,], -["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20119,], -["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20119,], -["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20119,], -["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20119,], +["features.location.impl.send_SendLocationView_Day_0_en","features.location.impl.send_SendLocationView_Night_0_en",20132,], +["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20132,], +["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20132,], +["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20132,], +["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20132,], ["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,], @@ -1074,27 +1085,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",20119,], -["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20119,], -["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20119,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20119,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20119,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20119,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20119,], -["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20119,], +["features.verifysession.impl.incoming.ui_SessionDetailsView_Day_0_en","features.verifysession.impl.incoming.ui_SessionDetailsView_Night_0_en",20132,], +["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20132,], +["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20132,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20132,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20132,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20132,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20132,], +["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20132,], ["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",20119,], -["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20119,], -["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20119,], -["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20119,], -["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20119,], -["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20119,], -["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20119,], -["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20119,], -["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20119,], -["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20119,], +["features.share.impl_ShareView_Day_3_en","features.share.impl_ShareView_Night_3_en",20132,], +["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20132,], +["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20132,], +["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20132,], +["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20132,], +["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20132,], +["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20132,], +["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20132,], +["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20132,], +["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20132,], ["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,], @@ -1103,7 +1114,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",20119,], +["features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Day_0_en","features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Night_0_en",20132,], ["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,], @@ -1113,40 +1124,40 @@ export const screenshots = [ ["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",0,], -["features.location.api.internal_StaticMapPlaceholder_Day_1_en","features.location.api.internal_StaticMapPlaceholder_Night_1_en",20119,], +["features.location.api.internal_StaticMapPlaceholder_Day_1_en","features.location.api.internal_StaticMapPlaceholder_Night_1_en",20132,], ["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",20119,], +["features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en","features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en",20132,], ["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",20119,], +["appnav.loggedin_SyncStateView_Day_0_en","appnav.loggedin_SyncStateView_Night_0_en",20132,], ["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",20119,], -["libraries.textcomposer_TextComposerCaption_Day_0_en","libraries.textcomposer_TextComposerCaption_Night_0_en",20119,], -["libraries.textcomposer_TextComposerEditCaption_Day_0_en","libraries.textcomposer_TextComposerEditCaption_Night_0_en",20119,], -["libraries.textcomposer_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20119,], -["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20119,], -["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20119,], -["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20119,], -["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20119,], -["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20119,], -["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20119,], +["libraries.textcomposer_TextComposerAddCaption_Day_0_en","libraries.textcomposer_TextComposerAddCaption_Night_0_en",20132,], +["libraries.textcomposer_TextComposerCaption_Day_0_en","libraries.textcomposer_TextComposerCaption_Night_0_en",20132,], +["libraries.textcomposer_TextComposerEditCaption_Day_0_en","libraries.textcomposer_TextComposerEditCaption_Night_0_en",20132,], +["libraries.textcomposer_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20132,], +["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20132,], +["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20132,], +["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20132,], +["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20132,], +["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20132,], +["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20132,], ["libraries.textcomposer_TextComposerVoice_Day_0_en","libraries.textcomposer_TextComposerVoice_Night_0_en",0,], ["libraries.designsystem.theme.components_TextDark_Text_en","",0,], ["libraries.designsystem.components.list_TextFieldListItemEmpty_Text_field_List_item_-_empty_List_items_en","",0,], @@ -1156,14 +1167,14 @@ export const screenshots = [ ["libraries.designsystem.theme.components_TextFieldsLight_TextFields_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","",20119,], -["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_en","",20119,], -["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_en","",20119,], +["libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_en","",20132,], +["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_en","",20132,], +["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_en","",20132,], ["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",20119,], -["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20119,], +["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_3_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_3_en",20132,], +["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20132,], ["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.event_TimelineImageWithCaptionRow_Day_0_en","features.messages.impl.timeline.components.event_TimelineImageWithCaptionRow_Night_0_en",0,], @@ -1172,18 +1183,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",20119,], +["features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_en","features.messages.impl.timeline.components_TimelineItemCallNotifyView_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_2_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_3_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_5_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_5_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_6_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_6_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_7_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_7_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_8_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_8_en",20119,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_0_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_2_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_3_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_5_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_5_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_6_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_6_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_7_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_7_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_8_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_8_en",20132,], ["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,], @@ -1191,17 +1202,17 @@ 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",20119,], -["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20119,], +["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_3_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_3_en",20132,], +["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20132,], ["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_TimelineItemEventRowUtd_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowUtd_Night_0_en",20119,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20119,], +["features.messages.impl.timeline.components_TimelineItemEventRowUtd_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowUtd_Night_0_en",20132,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20119,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_0_en",20132,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20132,], ["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,], @@ -1210,40 +1221,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",20119,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_4_en",20132,], ["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",20119,], +["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_8_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_8_en",20132,], ["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","",20119,], +["features.messages.impl.timeline.components_TimelineItemEventTimestampBelow_en","",20132,], ["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",20119,], -["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Night_0_en",20119,], +["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Night_0_en",20132,], +["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Night_0_en",20132,], ["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",20119,], +["features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20119,], -["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20119,], -["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20119,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_0_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20132,], +["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20119,], +["features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Night_0_en",20132,], +["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20132,], ["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",20119,], +["features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Night_0_en",20132,], ["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,], @@ -1252,8 +1263,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",20119,], -["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20119,], +["features.messages.impl.timeline.components.event_TimelineItemRedactedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemRedactedView_Night_0_en",20132,], +["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20132,], ["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,], @@ -1266,8 +1277,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",20119,], -["features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Night_0_en",20119,], +["features.messages.impl.timeline.components.event_TimelineItemUnknownView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemUnknownView_Night_0_en",20132,], +["features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Night_0_en",20132,], ["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,], @@ -1290,84 +1301,85 @@ 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",20119,], -["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20119,], +["features.messages.impl.timeline_TimelineViewMessageShield_Day_0_en","features.messages.impl.timeline_TimelineViewMessageShield_Night_0_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20132,], ["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",20119,], -["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20119,], -["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20119,], +["features.messages.impl.timeline_TimelineView_Day_11_en","features.messages.impl.timeline_TimelineView_Night_11_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20132,], +["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20132,], ["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",20119,], +["features.messages.impl.timeline_TimelineView_Day_4_en","features.messages.impl.timeline_TimelineView_Night_4_en",20132,], ["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",20119,], +["features.messages.impl.timeline_TimelineView_Day_6_en","features.messages.impl.timeline_TimelineView_Night_6_en",20132,], ["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",20119,], +["features.messages.impl.timeline_TimelineView_Day_8_en","features.messages.impl.timeline_TimelineView_Night_8_en",20132,], ["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",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20119,], -["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20119,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_0_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_0_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20132,], +["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20132,], ["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",20119,], -["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20119,], -["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20119,], -["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20119,], -["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20119,], -["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20119,], +["features.messages.impl.typing_TypingNotificationView_Day_1_en","features.messages.impl.typing_TypingNotificationView_Night_1_en",20132,], +["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20132,], +["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20132,], +["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20132,], +["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20132,], +["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20132,], ["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","",20119,], +["libraries.matrix.ui.components_UnresolvedUserRow_en","",20132,], ["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",20119,], -["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20119,], -["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20119,], -["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20119,], +["features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en",20132,], +["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20132,], +["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20132,], +["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20132,], ["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",20119,], +["features.createroom.impl.components_UserListView_Day_7_en","features.createroom.impl.components_UserListView_Night_7_en",20132,], ["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",20119,], +["features.createroom.impl.components_UserListView_Day_9_en","features.createroom.impl.components_UserListView_Night_9_en",20132,], ["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_UserProfileHeaderSection_Day_0_en","features.userprofile.shared_UserProfileHeaderSection_Night_0_en",20119,], -["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20119,], -["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20119,], -["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20119,], -["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20119,], -["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20119,], -["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20119,], -["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20119,], -["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_0_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_0_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_10_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_10_en",20119,], +["features.userprofile.shared_UserProfileHeaderSection_Day_0_en","features.userprofile.shared_UserProfileHeaderSection_Night_0_en",20132,], +["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20132,], +["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20132,], +["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20132,], +["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20132,], +["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20132,], +["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20132,], +["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20132,], +["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20132,], +["features.userprofile.shared_UserProfileView_Day_8_en","features.userprofile.shared_UserProfileView_Night_8_en",20136,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_0_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_0_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_10_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_10_en",20132,], ["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_11_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_11_en",0,], ["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_12_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_12_en",0,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_13_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_1_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_2_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_2_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_3_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_4_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_5_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_5_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_6_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_6_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_7_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_7_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_8_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_8_en",20119,], -["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_9_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_9_en",20119,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_13_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_1_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_2_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_2_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_3_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_4_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_5_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_5_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_6_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_6_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_7_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_7_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_8_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_8_en",20132,], +["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_9_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_9_en",20132,], ["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,], ["libraries.mediaviewer.impl.gallery.ui_VideoItemView_Day_1_en","libraries.mediaviewer.impl.gallery.ui_VideoItemView_Night_1_en",0,], @@ -1393,6 +1405,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",20119,], +["features.ftue.impl.welcome_WelcomeView_Day_0_en","features.ftue.impl.welcome_WelcomeView_Night_0_en",20132,], ["libraries.designsystem.ruler_WithRulers_Day_0_en","libraries.designsystem.ruler_WithRulers_Night_0_en",0,], ]; diff --git a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/AppForegroundStateService.kt b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/AppForegroundStateService.kt index 97909a07cab..0455d01a132 100644 --- a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/AppForegroundStateService.kt +++ b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/AppForegroundStateService.kt @@ -18,8 +18,28 @@ interface AppForegroundStateService { */ val isInForeground: StateFlow + /** + * Updates to whether the app is in an active call or not will be emitted here. + */ + val isInCall: StateFlow + + /** + * Updates to whether the app is syncing a notification event or not will be emitted here. + */ + val isSyncingNotificationEvent: StateFlow + /** * Start observing the foreground state. */ - fun start() + fun startObservingForeground() + + /** + * Update the in-call state. + */ + fun updateIsInCallState(isInCall: Boolean) + + /** + * Update the active state for the syncing notification event flow. + */ + fun updateIsSyncingNotificationEvent(isSyncingNotificationEvent: Boolean) } diff --git a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppForegroundStateService.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppForegroundStateService.kt index 1f9d7d79ad4..dcafcc50fb8 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppForegroundStateService.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppForegroundStateService.kt @@ -12,19 +12,27 @@ import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.ProcessLifecycleOwner import io.element.android.services.appnavstate.api.AppForegroundStateService import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow class DefaultAppForegroundStateService : AppForegroundStateService { - private val state = MutableStateFlow(false) - override val isInForeground: StateFlow = state + override val isInForeground = MutableStateFlow(false) + override val isInCall = MutableStateFlow(false) + override val isSyncingNotificationEvent = MutableStateFlow(false) private val appLifecycle: Lifecycle by lazy { ProcessLifecycleOwner.get().lifecycle } - override fun start() { + override fun startObservingForeground() { appLifecycle.addObserver(lifecycleObserver) } - private val lifecycleObserver = LifecycleEventObserver { _, _ -> state.value = getCurrentState() } + override fun updateIsInCallState(isInCall: Boolean) { + this.isInCall.value = isInCall + } + + override fun updateIsSyncingNotificationEvent(isSyncingNotificationEvent: Boolean) { + this.isSyncingNotificationEvent.value = isSyncingNotificationEvent + } + + private val lifecycleObserver = LifecycleEventObserver { _, _ -> isInForeground.value = getCurrentState() } private fun getCurrentState(): Boolean = appLifecycle.currentState.isAtLeast(Lifecycle.State.STARTED) } diff --git a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt index d6a1bd735bf..f173812fed0 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt @@ -48,7 +48,7 @@ class DefaultAppNavigationStateService @Inject constructor( init { coroutineScope.launch { - appForegroundStateService.start() + appForegroundStateService.startObservingForeground() appForegroundStateService.isInForeground.collect { isInForeground -> state.getAndUpdate { it.copy(isInForeground = isInForeground) } } diff --git a/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeAppForegroundStateService.kt b/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeAppForegroundStateService.kt index 627a355f0a3..ad39e4b6de3 100644 --- a/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeAppForegroundStateService.kt +++ b/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeAppForegroundStateService.kt @@ -9,19 +9,29 @@ package io.element.android.services.appnavstate.test import io.element.android.services.appnavstate.api.AppForegroundStateService import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow class FakeAppForegroundStateService( - initialValue: Boolean = true, + initialForegroundValue: Boolean = true, + initialIsInCallValue: Boolean = false, + initialIsSyncingNotificationEventValue: Boolean = false ) : AppForegroundStateService { - private val state = MutableStateFlow(initialValue) - override val isInForeground: StateFlow = state + override val isInForeground = MutableStateFlow(initialForegroundValue) + override val isInCall = MutableStateFlow(initialIsInCallValue) + override val isSyncingNotificationEvent = MutableStateFlow(initialIsSyncingNotificationEventValue) - override fun start() { + override fun startObservingForeground() { // No-op } fun givenIsInForeground(isInForeground: Boolean) { - state.value = isInForeground + this.isInForeground.value = isInForeground + } + + override fun updateIsInCallState(isInCall: Boolean) { + this.isInCall.value = isInCall + } + + override fun updateIsSyncingNotificationEvent(isSyncingNotificationEvent: Boolean) { + this.isSyncingNotificationEvent.value = isSyncingNotificationEvent } } diff --git a/tests/uitests/src/test/kotlin/base/ScreenshotTest.kt b/tests/uitests/src/test/kotlin/base/ScreenshotTest.kt index 28b66b70dd5..02ffa418a37 100644 --- a/tests/uitests/src/test/kotlin/base/ScreenshotTest.kt +++ b/tests/uitests/src/test/kotlin/base/ScreenshotTest.kt @@ -11,7 +11,6 @@ import android.content.res.Configuration import android.os.LocaleList import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration @@ -55,7 +54,7 @@ object ScreenshotTest { ElementTheme { Box( modifier = Modifier - .background(MaterialTheme.colorScheme.background) + .background(ElementTheme.colors.bgCanvasDefault) ) { preview() } diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_0_en.png index a11e325c3a3..5acd82d3abc 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f15537d0a4cbfb012996f5043f43dc5ea5e769b2404968ac4ea60eda8a522f85 -size 13813 +oid sha256:126046f78f6f5064583c825c581b5ee1bf5173f6f454f6fbdb0bad60a739d76d +size 13626 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_1_en.png index 3fcc111b622..0586942e3eb 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c1a4c2d228441f59a2a13064fe2937778a9f3262f6fd843ad03cf09d89e5442 -size 24715 +oid sha256:986a8d145cf65cd2da4f6e670e7aed7e28f3942d9a141eddde5a040f8d035f66 +size 24569 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_3_en.png index b77917a3f0c..e4ba410a1ca 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:118369cac5ffffbda03faa41c4a3fb26e4014757e86fa9b31871e18dfb312b3e -size 42073 +oid sha256:158eab26fc54518630163066c1a2c4b2321e4f5d5ef78204779ce03c7ca8a3e5 +size 41910 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_0_en.png index 135d85a9242..8fee36c1faa 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f3fe0798aae566b768bbe7090526afdb448a6f73966afa8d9c7ccda0e82f9b7 -size 12995 +oid sha256:c9ac77fcbaf4934ab4514622713e048f270d0775699b34e6292350e069ff798e +size 12867 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_1_en.png index de6b1b1a8ae..1e532ffaf14 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f93dfabe9b0e3737c870e710dc10f619959977fb74873bdbb2d9646ef08c593 -size 24914 +oid sha256:e5805f31aef36412e39b5961e41c2b63ddc855a49de8a2ca810662887c15b2b9 +size 24816 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_3_en.png index 2f0cd1e72fa..ff1b4a807a6 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.addpeople_AddPeopleView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a5c2e713849c912004275c4c61256ffdf99388bff9da97b40732090295104e3 -size 42081 +oid sha256:19bf6aca68eba224fd702d6aa327a34e3319389fc4c518dd9ee735f481899576 +size 41977 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_0_en.png index 09850aa0dc0..852c3b3aee3 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25c7ea080ca7863a986f2fe7836c47647588a1b0b6a13878eae39e44f1f20e19 -size 9279 +oid sha256:516998b2a77a13b3a131f05d4484c2482c527d6e4992a7ebfd1581c492bb5377 +size 9072 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_1_en.png index 866076f13a3..40276b1eb2b 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9099e2ab73d1aae490189f4682dd5c215e47085affe750890d0d84f203c403ab -size 20579 +oid sha256:203174a9d2e58f3937f3d7b75c2afcb735c2172e06f9c92c64016bcaa430c050 +size 20380 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_9_en.png index 7dcfba5ddc7..0038c4a3daa 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2699ae8a9f69d336f20d2376012526a36394495027d3d277061c5d55359ba587 -size 37761 +oid sha256:d672f247a616419bac169eb8874b1dbc819e0d31ec5458c6f0e77bdc5076c5dc +size 37586 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_0_en.png index 76c02112ca0..74118fd4351 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e691ee4e2bf2b251d3261f0aab8b8b5c1e79a60453ea2299f71cb6f68fa963b -size 8687 +oid sha256:27c89db806974c4ce4a88ca18fdfe17c5dcad0b6b6e24e7cf24c92782f00d49a +size 8534 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_1_en.png index 83d7b3c603e..7808de2c54e 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:759c6edb5f0742fbbb3ed48ac2d88b40e3d5e0c24a396b2250c56392653e6b63 -size 21018 +oid sha256:19c4c14441df64f5ee30607e03d3d7c3d3495c528a07bbc29673e75feada16d7 +size 20895 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_9_en.png index 4811773d175..ddaf40c3db9 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.components_UserListView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd6eac503164cafe15fe7d7d668fb0ab82eb81324b2bf1de3b1230e945083830 -size 37892 +oid sha256:d2882db3b3a2fa6298636f5b2970e13d61b2348fcf76deb106c93c393dd24733 +size 37776 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_0_en.png index 68f1966bade..ec1c92eb4ec 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f63a4208682c52a2d141be96c11568c9be922d68e5361bd40105aa93d5e1b0b3 -size 21599 +oid sha256:c6c1aed2fb05e5220d335bc0ffc9a6851e9207efd2dcabb2ce2100e61516bc57 +size 21409 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_3_en.png index 02d2735fb6f..9c0d5f7a9a7 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e8fbff0db3fb8dc996226fcb1b515638be54f7e6fec6de303e86f954037c328 -size 48411 +oid sha256:35e14513f620f9060ed5b7d8db55175f96d57b45f4187b4f9e2be4bb56016dcd +size 48218 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_4_en.png index d7cbe99c6e9..cb96582fe52 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ced96a86269f22fad7d93a27bc0c302ce63f45857b4f15f764a8f04fe0d96b6 -size 41925 +oid sha256:8554336730b48bb509fc60fc6a7e8eb5cc21cc8e08bb2eee87a4e719b26c13f8 +size 41765 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_0_en.png index 8e80f790c9e..f2582e324cb 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4de7af3399a3942ec597b5389414e868b43e54b42c6bac50dbfd4672eb54eb9b -size 20532 +oid sha256:d2d669d6ce18e6cf641b85f7edf1870b96f3289d55dd89779e1c6388147b4055 +size 20409 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_3_en.png index 3cd0ea6005f..89544d8cece 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0c79e01df12f6784e85fea66c27e2b454b34742db9c666d7c7e3f14d27229e2 -size 48207 +oid sha256:7976aeaf533239d0bda8204e305d1ef6b977b0f7f8755025c36fe76b1a36e8c4 +size 48097 diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_4_en.png index 4a5085b6f3d..12d96209bec 100644 --- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.root_CreateRoomRootView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13019305b802fb72dc92e3ee68f581f2fa93e122d8e8d6f5fd1311869535ef2e -size 40334 +oid sha256:c3a52624a8bf7e12b374e769eabbe369fc2ec3ff7d9497b7dc093af4ca63df3e +size 40222 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_0_en.png index 9aab291de01..b0358452a9e 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f27cb5420d3537479d18e03cb7060ee14b1a3fee46fa12a3e1473b358e833d13 -size 92644 +oid sha256:11c79a9b9c4deaa671d8e8b8d9ce4ab0a681edbe53f906110bcf163e22336841 +size 10172 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png index 6d0ff2554ec..21150eb1544 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9d0338485aabe5296754868ce2fcd5097d914eea28298ec11c16f7161ae2341 -size 111617 +oid sha256:9163c7aaae605af5470506d99eed7ecd19374fa7e719f8b0318e55f1319702a2 +size 43406 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png index deabc9b36a5..3af587d98b1 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45040e44ee78a5103ebf1a3963c24f1a201485affa3f24d8f707e4f99be6cafd -size 112406 +oid sha256:a7f1d691d5fcf689cb4da9108f9a5d6608d6e18fa73c204c28202f6e71388be5 +size 50333 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png index 15fef4a0842..c452894d17d 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6eee1185065c82f90cf53d7b9fd62e6de72d907606099b0536b6305ea9537f2 -size 117250 +oid sha256:d3e563a24b827e5f4f7519edc271b6e899852e6b9e33ef37763f018bb5f73f40 +size 51279 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_13_en.png new file mode 100644 index 00000000000..5c120a7c458 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_13_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c6c5eb2b3ecfabd9344898bcc581ebb81ac1620f8f749d8d5e76f19abbfe049 +size 29395 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_14_en.png new file mode 100644 index 00000000000..9e8e6676441 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_14_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:355d17b9e2bab7feb55b7c958f54e1c5e90f2c4ac58575c2868c5e15414eedce +size 29097 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_15_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_15_en.png new file mode 100644 index 00000000000..cc37b0ea957 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_15_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdf7ba134d16e9f6458d5bb88e43802fdc4c82fd7e0996c79c776add89c7702f +size 36363 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png new file mode 100644 index 00000000000..6b0197002fe --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dcb5fb864d2692e62de1161e3420a3c9e9d7a338110b5e3b7791753e7995b7a +size 45863 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png index 0c9e5f8beb0..91315f00563 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6319cbc723b9f3cf0b89c4ec5dc6098a7b6a2a2c053ee5bf5afc21830b8d3f6 -size 110855 +oid sha256:2ee424d3f53556823f1bc19a1bf0d742918dff295962f4dda371459c8607fc15 +size 34990 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png index 5e59459e907..0e31405365b 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57fcd25c0dab243b8ce273d38d0c4f36bb3415ac4488d1c6f4189c368899ca76 -size 98786 +oid sha256:6f19a41fa98afa02f2d913c02cfd8cca6e53d6af164ab1c81d98cc75ae877bbc +size 36305 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png index a87a8a56f66..33f9384163f 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:420a7c957ef0909cc2bf9cd9461af98cdff20fff21dab5df9e94165034ed0dda -size 110641 +oid sha256:0e527cea5e937b1ab89fcbc0388ab5d81008ceef8e85b25af227f4c8465df268 +size 31504 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_4_en.png index 3fcad9605e8..5e1aafe2e91 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3463e70cd08f4d884f8bfafe7d66c5b75ac1fc05bf70cf1478a9f11def071069 -size 111151 +oid sha256:86727f6cc8b7fcf6b73e71a861d316f32869fe76f8ce5c7a8e014dc6de1c1220 +size 39469 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png index da1fd14667f..51e9f08da54 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70c33e148a040ec24287f9ca48353a76e8167015f24d8249bff405e9cc9f16ff -size 118640 +oid sha256:2604ac285ee6334a46fe348313fe2abe655860bd9b54f237fc92d0f99e38a7be +size 29162 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_6_en.png index aaab740c4f2..a2a9f8c3aac 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b3e666dc4693d7c096dd5c0168770f72be41c41797a93e7c728a20b587ddaba -size 92658 +oid sha256:9a869730be3df8fdcbaa2bd251968b330a5e82733cfd6efa86e8a4971552a306 +size 26612 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_7_en.png index 28403e285ee..524e103ef8c 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9af5a8c8a529eb5f8ea40e9c8028ce2c0ca4b352ef80b2778fa5122cc6bfa937 -size 96826 +oid sha256:dbd568c10eede6ac86ca33b69f1917e7e1f1aa11e0c793cadc5c04ee99751ca3 +size 34936 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_8_en.png index 8cb6932f435..fdc89929c12 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:084e303ed61e399ddbefda7e54cadb69545eb0db9493185aa48a3db7ba69fb04 -size 112515 +oid sha256:18076ab6a11a67d3a89f0cbdccab96a69f40acd3c473fad28681a5d1901799bc +size 26607 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_9_en.png index d28af79e36a..fdc856fe155 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:916516ede645eaff617b40e6cf50acf2ba1e583827d778d22e9a012fe367fe7a -size 106146 +oid sha256:7f4cf59462d6f5ed3de8b398b6ecdb4a6c4842d7d76637a4c97079051412365b +size 33567 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_0_en.png index 4ffef60edd3..49c7233279e 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61f2ac89dfbf76937344609afe536c1c9ea6af1134ebe41cb3b3608ffe51b0d0 -size 77863 +oid sha256:bd88a9505b7c9c1a76caf35e918f362ab9a96c64f719b9811977fe3031dab557 +size 9984 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png index 17884e72828..b2f18605433 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88584b1d4a4876e68e2972f9bbd03156127ee9b552de1ec20a9057d8f6cb1828 -size 101296 +oid sha256:e01e9453b8c72e9a1a55bbb4f14e88836f93d1d9b28af10557aec81eae847d74 +size 43374 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png index 1f4cc5b6168..46549ea752e 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cafbd46dbff04191aeabb2ea403d99728972c1854116022e545b4ca6be7bc675 -size 102209 +oid sha256:73ededbedd5da3678425db2c85164fdc4839fcfb5dce8efa68a7c8e02aeaa75f +size 50130 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png index 29dcd629aa0..c472b59bdd0 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07458d183bae7ecfb7ee61bb6f2e0abb9a4399dd373068002fec3722f575e754 -size 102438 +oid sha256:731df5fbdcde3b3d7bf89777aefa1d0169cfc78a614ae2fce1f41a33d4d21a44 +size 50993 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_13_en.png new file mode 100644 index 00000000000..1245c45ba9d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_13_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6cfe8b7ff36288df2f4cc63f8d61d272b55a17e46c29f337fcbc6079c9c0abc +size 28768 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_14_en.png new file mode 100644 index 00000000000..2f01ebb7a34 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_14_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91fc0e147f5f0d7bde4d33082ae84e962784a55f3f63af9de7fb6ba0ecb8c340 +size 28860 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_15_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_15_en.png new file mode 100644 index 00000000000..303b17ab996 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_15_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3fb9749128fddfecf31764c27f941f789961c8540b0b8e51455d62e2f16d1a2 +size 35455 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png new file mode 100644 index 00000000000..b220116942d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bed222380fcd708584b52aa098622487025598c870ac3ed68694dcf7e900038 +size 45755 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png index 9c14a8b24af..c9777afe5d5 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59666c1ca888ed089d7cf08fd75cc2f3e993b59c255317ad1af652aadfac8b4e -size 97026 +oid sha256:445c343404fba0ed533ffe07a138ddf74686f67e3e163626963be4e5db17fd7f +size 34479 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png index a72228043e8..846b7643c0a 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e9618ede3ef8f718c54b3912fbbdadf69182417c4f7cc714a8301a84deaca2f -size 84239 +oid sha256:2e2489ed1cbbd10709456b0a910b8bbb6607732bbf40c4ea30114306875fe999 +size 36282 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png index b1d43106ec8..e02296766b7 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55dd6915907ebe7c0d3799a54491640582f3fc08c7d8163fb77cfd7820b95ad3 -size 96938 +oid sha256:5b7b89d817b0d1847828b214a1340fc041e85a44d43fc89dae64e6c56324ac41 +size 31806 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_4_en.png index 9d57ee0ac22..78a42dee9b4 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1e7887e1120c852e5a9086dba35fd8e52485d0e285c2e3724687ffa71babd45 -size 96405 +oid sha256:fe18077f8a3a64c9474376f7fac669321306837ae3c01437746d6060a290caf2 +size 38425 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png index e0062f755bb..8c700b0e526 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3d75eca5904d605b91becebca60199f7e60e6f2bec6b9a945ce8d130cfd7e47 -size 104802 +oid sha256:1ce6e3a17d5b092b4f292659cea45834207b4956e273b7cecc69c7a07daa8d51 +size 27255 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_6_en.png index c382416a8b0..10fa500edaf 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e97d78225215b0b5e13f369485e7503d020baa7d157cb1c6826d18759d580c6e -size 78221 +oid sha256:7b16b479b55dcdc22e17be7d9a0996de4b7f1c0c708a013c134483369073b316 +size 26237 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_7_en.png index 65edf4ebd39..79affce9814 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95f818f0426868414b0ef5cb525254ad67811ec777c31a435072fb2236914f22 -size 82448 +oid sha256:f8cffbb53b029acdbdd0fcaf74dd5d4aa1f1099108137e1e6e4b29279f79678f +size 34264 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_8_en.png index d979aa4f0d7..fe70c0a848b 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:050785374d848e773941d858848e34f5d1753fcdada4dcef548a98eb5e78c31a -size 99409 +oid sha256:25e8c52cd120b0fde6c15f7a31e35f6952f9e1fd5689b741fe029a91fef2cf33 +size 24775 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_9_en.png index b1833d04599..cd0035f6a13 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9f9d59037ba084e60e6324e066736bc08c0b52319664d67eb84779df6806ce4 -size 91377 +oid sha256:7ed31ce5baa82c06abb3e414876c0a9b70c98f2223d0c432d31ad3f01bdb53ca +size 33343 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png index 9cb1f42f410..0a814f0569f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1521e7abc43b6cee8d783e395f9ab67295bfab09acfaa26f271f6583a6c008e2 -size 59831 +oid sha256:815354f4bd3ed435a335b5ec5ac84054e31c0f072733d35e35f337dded866b72 +size 59837 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png index 5c69f0e4152..d930e04db5a 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dcf745eec6b0cdf29be48bd1d7e637fbd7fb4d70a42f0c55f0fd53ad5d70106 -size 59235 +oid sha256:a780225b2b136773a6421f5ad5b31adbd91e9a8ce90a13c8e12c5f11264f4422 +size 58951 diff --git a/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Day_0_en.png new file mode 100644 index 00000000000..789520675b2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b62c398c035a386bdaba180f3090e122b78131c741cd6fdb97ad533137b6a15e +size 5531 diff --git a/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Night_0_en.png new file mode 100644 index 00000000000..7eff425d13c --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.networkmonitor.api.ui_Indicator_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e55da84c46cd5d7f211f7323425f561b234c50144b8477c348015828b5656be +size 5386 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en.png index 59eed4a5cc8..7e4912ced9e 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a2a1910e21509ebbaf5117e2abdef0dee6bb301afeeae821d0240a72e5ef721 +oid sha256:2ad2339fc746eb2d97fd6c1ea654984623438b54dc3ecb0da6a57483c5daaa49 size 21538 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en.png index 9afe1b76304..44f3691d4b4 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4051a95ba6a727fe0f688bd56e14739ddc617b9b3466b80c6bc60c90f91f4a4b -size 21123 +oid sha256:4de996d888d1fab1ad4bc9373bea12caf7466c55dbb8dc94b31fcad214c75297 +size 21122 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en.png index 374113b566c..0c5435cb6a5 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d4d192e27e8f705f1049e63e6cd9759830526e43132502033fd198d9216346a -size 47244 +oid sha256:55966ba3d9945307cc2ed1f8a52078c89bf9b47e66cd7db0f48ef9f6949240bb +size 47241 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en.png index 53fea58d96b..8cc6df84965 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58b7377a27c180c531168e48819e903554f1d85525626ab4b6d79dab7f322c43 -size 45889 +oid sha256:d87df9b84ac158cfff84a2ad261d6446213a39b1435e4aecbd41e544cc3e42df +size 45888 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Day_0_en.png index 374113b566c..0c5435cb6a5 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d4d192e27e8f705f1049e63e6cd9759830526e43132502033fd198d9216346a -size 47244 +oid sha256:55966ba3d9945307cc2ed1f8a52078c89bf9b47e66cd7db0f48ef9f6949240bb +size 47241 diff --git a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Night_0_en.png index 53fea58d96b..8cc6df84965 100644 --- a/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.poll.api.pollcontent_PollContentViewEnded_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58b7377a27c180c531168e48819e903554f1d85525626ab4b6d79dab7f322c43 -size 45889 +oid sha256:d87df9b84ac158cfff84a2ad261d6446213a39b1435e4aecbd41e544cc3e42df +size 45888 diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_2_en.png index 139444ef1d3..4f17fe29035 100644 --- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d964de0d0cc6b2210690c99f77bfd70d41173f71893a2c072565101a84982583 -size 66203 +oid sha256:dcdda50ce353819cfcd87063e2b7232d9b6da727f2d4cabb59868ac70037c5d3 +size 66381 diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_2_en.png index d9d0bab7bc0..58f7bfe9b01 100644 --- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de1bc2159d3c9fe8ddfa2b1c078b66a40a839e45f9c33f8744aeaec58f5a238e -size 63800 +oid sha256:ee6b493921182340691ef43e5f4a8783831fb3bcd0daf4ca565458e46c8c914c +size 63884 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_0_en.png index 8ea6e41b0d7..6bc15b8ef52 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad8e8e1de0e7c4b39760a7ad1336a520b87b2afec6c6919878345c9c369a9cd2 -size 97788 +oid sha256:14475290253a3a5adffc38bf1358d6398aee90b512dd9e444af88c71700a108a +size 8513 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en.png index a636de0ff92..fdc89929c12 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a25327e6d4bd3075391e6786ada6dfee82de05e6941cc3eb840438b29cc21bd8 -size 99409 +oid sha256:18076ab6a11a67d3a89f0cbdccab96a69f40acd3c473fad28681a5d1901799bc +size 26607 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en.png index 71266e3b18a..41288de9659 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d80e95603b9172d239d3f1bce0a9aa579728b95002ff6b0f5e2f47495aeb1b51 -size 97433 +oid sha256:8ed1e4fc0de314df634235c21afcc6050fed9c3c473b1f2fedf365ce9e07bc38 +size 23436 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_0_en.png index a26c9f04fe3..cb4c370495d 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e61f1e76d573f850f3699c893e884a48ca3e9ff79e061c7723c5a66074180e5 -size 82773 +oid sha256:ea910fb367e278a2a88c99f048639e84629564e4e9186d631aafa49920acdeca +size 8353 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en.png index b0dd49b0eb8..fe70c0a848b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fec53729278f19bc00c336919a71daa1ee64a3061191d3cb52a2929d7bef1c11 -size 84440 +oid sha256:25e8c52cd120b0fde6c15f7a31e35f6952f9e1fd5689b741fe029a91fef2cf33 +size 24775 diff --git a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en.png index 06afd056e3a..7769e911c1e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8913b014d8f07a02b532e7a6d50270363f60c9f3cb59963ffa0c809a29eb4523 -size 83105 +oid sha256:51e05f6ead16d567da4c6b4f7e302696bd47e65705bfa0a3be16dc44ae15284b +size 21464 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en.png index ecd64c14636..b8802ba76dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a7470dbb61f069a133fbfd0de8eb1909f7c71d88cc26e42358d91c9cdde456f -size 13891 +oid sha256:dd65bc84aa624b3af6b055f07cac49b5779ac643602176be052770a85d1bf041 +size 13703 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en.png index 30d890117a4..cc04b1b6821 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a44efc28c8872981747255f8538e6bb60a804426e85d372a3b3bc17ad73937b -size 24688 +oid sha256:013e0f812dfa9dbb8114e06a502f244a02f5301e445ce39c9ab0d059c52f8af7 +size 24541 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en.png index 727decb1b67..22cd26e4061 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb74a50f50a99ef9142cde77604a2b9a80b466fc0b9079b4e2591cf7c3896165 -size 13046 +oid sha256:a28b2dd77b83951727f520bba1f551d271c0ae89217453614bd0ca652b41d762 +size 12919 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en.png index a118a76eac1..ed2c359eb06 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3eadf6c716c78a8913f36fa003e19ab863ec3413741e91212bad67b876aad9e1 -size 24906 +oid sha256:e2be3a7769ed5df69427b33025db1097ce9dd7ccf58fa1ca3d4eb7997543f824 +size 24812 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en.png index bdaefd7b5f1..7d81d8d062e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57c93d6c2373777214b59717831ae6d4198eb50d904c6f22332c631b7025e259 -size 32736 +oid sha256:42c0b3ad98e83591ac2defcd17a17e4250d00b5704fbb9e3fde425e2990b4613 +size 32545 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en.png index 0c9549e7ec1..e07d1a7cd90 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:726bf0c0beae74cfecd3c813335de763687642baf87c77d81d93ed9c9e536f0a -size 33028 +oid sha256:a60abe6da2ae9b7e2a6eb6ae3a8057d1476a8f76d867288436cfbd7a063002c8 +size 32840 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en.png index 4fc5b7cc03a..77d18480f42 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ae24aafcfa7302be6403c1f3a9df6d996b7800c77ab0a011333e77ea7f277f7 -size 22231 +oid sha256:69fb66dd35d7cccf07e97135defc0dc46b9ff29ec33c6ed6b9ff3b6b0be5d873 +size 22036 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en.png index 1fdf12a4c2c..a1826292767 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a54b853c55e0fc1fa3cb9f037b02dad50ed50c9897ca2caa03dedfab34051a9 -size 31965 +oid sha256:daba36e47b9f2d685a7450265dba8abc687b8256df10d9c1445202c80345c52c +size 31877 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en.png index c05799f8187..1e228e66c5c 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d71db0947e09666739ca5e3c01a7c6b711a430d2a40e00cb55cd474cb42535c9 -size 32417 +oid sha256:fbf5e7155b878f39e3cc561c50b89323ac9fcef9dbc7364e62cf95cc0ad91e81 +size 32321 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en.png index 5e90a88365a..61ce9c07e37 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1df67dd253e71fe912c82fb3d7d5d6e4be3efd2dd510cdbed410671c5272ddeb -size 21072 +oid sha256:78370686e4fa83ed1f2951a7d71738531b09b3808c66729bf6544d5b2b9a6c12 +size 20944 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_0_en.png index 9e8807670a1..4ecdbcf85d6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf7912cd69d2ad680d885462e19544ee56452bd5d538a8019a39199dbf93f124 -size 44374 +oid sha256:2fb84f6f240041ba3af8b90e32b308f68e715c813362f2cb9143fa745a0e1b32 +size 44214 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_1_en.png index 64ecba6ddec..9627b16e6ca 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f01dff35fb317a29f898879c6a7bda6b23ecc2daaaebe80abfc089b448f99a1 -size 11891 +oid sha256:2350a560fcc78a3d1b22cd235746ac03b46eee2912184dbbe62683540dfee2b4 +size 11704 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_2_en.png index 64c0627f63c..507709b1b46 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5197977035f27da4e4fb4d732ac52006d72b517261567d2efd6738a39270f22 -size 12849 +oid sha256:b730a39ec0ac14e8557e738dd13847b5bb1291713b0d013cf50563a1e0904f7c +size 12660 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_3_en.png index 64ecba6ddec..9627b16e6ca 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f01dff35fb317a29f898879c6a7bda6b23ecc2daaaebe80abfc089b448f99a1 -size 11891 +oid sha256:2350a560fcc78a3d1b22cd235746ac03b46eee2912184dbbe62683540dfee2b4 +size 11704 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_8_en.png index 3dafa23bb0e..abe89bd9a25 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd04abc2eec057ef2dbd02e06c3f0ecd8e66fed3f760f293af4bb86c91e031f6 -size 18284 +oid sha256:bcc0479100b1fba092a109696b548da7a1da26583304ab7273bd454def8046b2 +size 18091 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_0_en.png index 17d7af8e536..bfa9afbfe9e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b15475fbe36b0255b21a7492195e516dbf24298f6d3e40e164ba73897da24b10 -size 44429 +oid sha256:56e080464834b1d5e9cd8357e57cfaa78e38718b1d71e36310453d14af460e91 +size 44317 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_1_en.png index fddbe32336f..46b47ed0157 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a0aedac7a6fb0ed7d178e98bbe546a7176c111953f8d02c107e92d4fbdb6a9b -size 11179 +oid sha256:9bee4a7a63485b54555a203b8e4fc557e504b3efacb91d1c7c082647848c8c45 +size 11051 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_2_en.png index 7073c1fb272..dddb67bec90 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6138ec110a891f52f492d3377825708a7151d42d1f391a996ddc10a7f2624806 -size 12065 +oid sha256:871c608b761d8df820122d9d245ac037f71d227e7bc23f7fbe3402662ff05536 +size 11938 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_3_en.png index fddbe32336f..46b47ed0157 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a0aedac7a6fb0ed7d178e98bbe546a7176c111953f8d02c107e92d4fbdb6a9b -size 11179 +oid sha256:9bee4a7a63485b54555a203b8e4fc557e504b3efacb91d1c7c082647848c8c45 +size 11051 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_8_en.png index 516705b7ee8..c01e5b8a0ad 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.members_RoomMemberListView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93cd01b7fe046a90b49a20311941bb3a07e8d2bd71eb9335343f2c15713ce73e -size 17222 +oid sha256:e4b01a055e3e8f64b18d045717ee2d6c9795ef1cf2a923c0fe3c5ac26f6e9a62 +size 17091 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en.png index 333cfc97ce6..3ece1582c64 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c8157834cb3fb5b9ab3d525e0a77c804bda007b72772caeb34be53a62095c6c -size 13539 +oid sha256:121f177c3f1d0318a81507e799af7a47d2ad88639165a5a5bcdc960e99aff201 +size 13359 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en.png index 2d0248d8c26..f0d82f9d092 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:984a56a04997ae8461dc43e8b7d6abb68016838264815aa5b91c1f8f1e3a9faa -size 49952 +oid sha256:e5c71623f182b0e2aac51c276d3b61f039997c3dadf6c7bd9de6c4f2dfa352b8 +size 49837 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en.png index c2637ff6c97..9c9ce4e8034 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5375d20c8ae75f0c79ec5ff836eea360ed3af4ada1cd5f30db7bfabc3d696667 -size 66628 +oid sha256:326e774bb0420b4d55cca0014bcb8aac69f2351e58e756c7d63de3905f5bb6d0 +size 66470 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en.png index 7235f790ec7..39c11d95e78 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0d492629413bd4ff619cf46c291cb4597ededc825bfa9ddac09171b2a954d8e -size 60909 +oid sha256:ba30b7ffc1096fd5190fbf7e1881217dce20a5e0865800d49b26d82fd0aac0dd +size 60733 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en.png index 3721c262b71..402673d64c6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:594a74012b30e9f1dafe04bf8bdbfe4a9db301920be692f0c6d5b151638ea568 -size 60847 +oid sha256:0fa5719b287ebb77a79900ffdec8793d9a86f2a07920f32c50924872609b09d5 +size 60682 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en.png index ed65ead3134..35975f0208a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d083a4774130153cce24a64c1ea4bd3b9cbb918d486de0973eb62479f1e2612 -size 55770 +oid sha256:46cd3b9a7be00e4f41fbaab11e1cb6aa6528d6db578a84512f7abedf5d4b5492 +size 55610 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en.png index ff2a810a707..71757e0f8dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30d46002f26d76684d6c14eebebcf27247ea53e6adcaf7ecfdcac0072760c011 -size 57638 +oid sha256:2d992de8f70372d03ca2e701310ab261c1f5ddb5864810071a84f6b17ce5f6a4 +size 57531 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en.png index e103bccbf2a..901af608dd0 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8b59e43f446c86f6aa78e1a327ee1de84410a2cfb8db6504e5b0995a71589bd -size 60056 +oid sha256:0b34ca16979d6e496ec13cec78250eace85e17616cfa162d131d2c8f797c6b1f +size 59946 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en.png index 5b62c02b761..4ada35a7158 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dd9cdc2340bebd48275cd0f9ef5abcfdcdd99f55586d7356be0d7b240813462 -size 51774 +oid sha256:3dbd48f7c11b0b5881eedf939654e50b37bfc349c28c3c0e93d5ca5bda0717da +size 51691 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en.png index abb4e70edf4..023f5af795a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35e233bddf6480d217ff63ce7af4d37433e6cb1bee90a26428ed2e57adfc1432 -size 64668 +oid sha256:83a9e031d5b928895778ac073d4374863a5e8a6b0ac9d99fee0a95879a0421e9 +size 64502 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en.png index 24eb44ee45c..e9fc088f1de 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28367b3884a7eeaba27b42ad23db9205a3ab656b87fc0c88f5fb4b6efbb73c41 -size 12796 +oid sha256:064f8dc06e6a027bb643ab0f050800f510deaf6a2624f35b4847384c68903394 +size 12663 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en.png index 73009c3a602..1b3fa517d23 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1eac5047f2c1fdc06aa104f494b36a6a1b1cb3194b5f8f3ebf85b7b270e8bc06 -size 48432 +oid sha256:9a00224f7aea8db03d01c0dbf244b90eb5d2d3f4289ced45cda874dc655fbac9 +size 48320 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en.png index 80d1a233dba..f5c9bf6755d 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1e8f0c5245fb38612fe136c7f5e81b2171d9fc4cadc90170eaa70a6e13f7b64 -size 67238 +oid sha256:bbca019f7bb7555bcfea4645ad3ec00445ec55a54cc98611b1e0d7f99bebeea4 +size 67131 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en.png index 2d45057f5ac..06adaeeaa37 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c99600fc43dc54482914609441c5e6f2ebf3df3a22c93c95ec025d0df8cefee -size 61572 +oid sha256:aa22afe652bae97bbe9e3504610f520e6fd7337f2757f79c39e9e0f6115902fe +size 61461 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en.png index 894bc933f38..0d8b2edc9a6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb8bd336ce57bf8906d7c30142e3f7e1823ed53c197125ffcbc9675ff635601d -size 61454 +oid sha256:bbb5c63809d556bcc60b11b9c23940e26bfac377ed4a5a0d97971e060365c6f3 +size 61346 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en.png index 7c138fda441..4daeb638d85 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c16447c9bef2aedc1a0164313c8d0fa4719a63797ca0946bc4eabfddc6eb457c -size 56071 +oid sha256:17a15796338eaa5a8b7a5c7e5252fe2d9c392f2d0dd78ce9e0976dfd68fa6ad5 +size 55975 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en.png index 87391fb7005..8ae4205f0d6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ef1ce4c3617f44e0c601b7fcfa9e2967c37383b9d6729defebf543a421970ef -size 55914 +oid sha256:2023b53d3a7099f55bc36a738506c6fab2910f3c83ca24a1647b6ba35c29f351 +size 55807 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en.png index 214c794cf2b..796180be455 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5ce938a9ae304dc845cfd790a6d56ec862342b79ec23a38986eb3057b25201f -size 58271 +oid sha256:41c3b6a09bf3899a0a28ac6b9fc96b773687adeb40a4b11ab0f80dadc1139e1e +size 58176 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en.png index d3990081dc6..1509868c156 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e5baea91836057ecffa0f1414ce08418a955ce4c1fd77e6c284779192af65b4 -size 51051 +oid sha256:24389189d4955f584fb1ed4b390e6ec829622d457ee7f3205b0104f2bcd90bdd +size 50948 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en.png index 74fe5848e71..c5fdad0d7da 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f8427c6786075496146988aaa114639cca599d6a6d7c8c6efc753378eaddcbf -size 64348 +oid sha256:971a027f6aaaa21b7d62af3f08b50eb7cf8369199076226ea92e1b4b30f74342 +size 64234 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_MainActionButton_Buttons_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_MainActionButton_Buttons_en.png index 31b2ae723a9..d0fe56b36a9 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_MainActionButton_Buttons_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_MainActionButton_Buttons_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48b55e3d045eff0f2129394ea64bb5bc4962278a8feeb13323f5eed09d95596f -size 22300 +oid sha256:18a7b8395fe7791689d7cc028bd1b73d5b0a90bbcd10f5f8cc8e7542e36ba0bd +size 22136 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceCheckbox_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceCheckbox_Preferences_en.png index 51871d20969..bf4fec1755e 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceCheckbox_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceCheckbox_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc52445bf4196bb91d137b43e01d1ba547191a15ea4f61b09e2b7cbb323821df -size 64870 +oid sha256:9aec79c842bea8e2bff03d39ccc08b8e022c66947679257359a922a531183ece +size 65623 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSlide_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSlide_Preferences_en.png index 7e76795ad08..ea437e5a396 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSlide_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSlide_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a035426d751113cfad1cb77522ad9c7cad37caccb310b013ebe6d9bf95e23ccd -size 23779 +oid sha256:3133a21de407cb4e3dcf0017230dd4e26a27916ccc7e73845fe035246d784aae +size 23747 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSwitch_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSwitch_Preferences_en.png index a6ae052e1a5..ae95fe00d6b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSwitch_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceSwitch_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13e77179a17c1ae2587fd9a109787dd7ebea58837c318aeeed00bbeb28a70dca -size 36610 +oid sha256:4679de706ba1c71ba3203d32f25d5e2246428f8ba6adb6627df96678838b6214 +size 35989 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextDark_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextDark_Preferences_en.png index e4c9c82c3cf..4d5de359f3e 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextDark_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextDark_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6432b9d7e491fd647898a8c1adfe65dff5141494ceb6801ca17dfd3c908f262 -size 34450 +oid sha256:2c622f64093c06231a22bc3b206d27610972433a1863196b37f2047e02cb0569 +size 34700 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextLight_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextLight_Preferences_en.png index dd33b70f5de..353dab0ba8a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextLight_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextLight_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53a1978d02b8229ba18a75b0c8e05d9a9aa4934815a82b0da865100fd38bfb10 -size 34934 +oid sha256:01449dad70b533fe07cfdc38315483122314ca517880dbf889bcb5595e794d96 +size 35187 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_Preferences_en.png index e591a037b4d..c39da114447 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeDark_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d072307f919575d403399dfe8b31ee13a9821495565bd9450768411cd837408 -size 36943 +oid sha256:f4eea08600173cdffd22ddfe56d4e57a8fd32db5a96356fe8cd73677055d1efc +size 37215 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_Preferences_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_Preferences_en.png index 84e35bc1453..ded10965066 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_Preferences_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.preferences_PreferenceTextWithEndBadgeLight_Preferences_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7832924770983aecd3a81d01569ef74c6d3d2f92fb19efb23449ebf619152ad9 -size 37057 +oid sha256:51b2e2ca072662a4feb7b34c50d4601b0a68a86a1b62601cb546754da926869a +size 37314 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_SearchBarInactive_Search_views_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_SearchBarInactive_Search_views_en.png index 80de6614815..e26e65980aa 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_SearchBarInactive_Search_views_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_SearchBarInactive_Search_views_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db6ec7c40c6178cf8b4170dc369f14524453cd2c8101f21b70bdc80dc9aa3e34 -size 13711 +oid sha256:a1cb2f4f264b98879819fc05ad09e93fe144a9d4ff8afc546c1d6856e581e129 +size 13438 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_0_en.png index 10adfc84001..a6ef6d7db5f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ac4a8ce6b6f7d9179be2d51c44c766ab71bbb7a8e9e9fcdb4d62b1c9f660dda -size 13292 +oid sha256:910a2b442c7a083381629718738edd84614e059f14f7639f1d23e740dedf2717 +size 13152 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_2_en.png index 0e22f34d88c..c29a8568fa7 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0db3f0cdb53eb761bf3742ce94f925472a7e1b48b306d2cd81baa2c42bee6a14 -size 31142 +oid sha256:ab0c3b105b12305c073989fb7686f4e012a33651928219d2c6300f5fc165d420 +size 30981 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_5_en.png index 6411138939b..e8bfc990c6c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5aa120484502f3ed14e33a7460b19bd090ac421bbb383e75127bbdf3f54f5ca3 -size 28818 +oid sha256:d1c2ae860a7453897346416f0a55363a121c899dcb16756e525d9f82b5aea7cd +size 28667 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_0_en.png index 321d4b94ef7..2e88d12fc0e 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:415665f1025fddf1141d9b46292b4e9f05c14bec32371e32b8fdadde5fd0d183 -size 12598 +oid sha256:39cf02b9ba4e1b4272fd70fce37f927d5b8c99e0ba8f61cde2ffb312ef42abeb +size 12500 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_2_en.png index 451df5a6bdc..02d2f734a13 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:646bf7110d66643fda586c2ecd54b78f09111d0e74a531a7c1fa08e968b1abc3 -size 30217 +oid sha256:3fb42641a724ad82ed94660327179c7a6782073ca39d9904a1133dd9462397a4 +size 30124 diff --git a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_5_en.png index f19ea6f743b..1f53e949ea3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.roomselect.impl_RoomSelectView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c44fadbdeb27169f88a2678ab8b6db9ac7a9f6b21871a436d14728eec398daf -size 27883 +oid sha256:be403e61390a076aa830470dee1095888f05990a5ae6bb99a2498af121656828 +size 27789 diff --git a/tools/localazy/config.json b/tools/localazy/config.json index d6cfc441347..ac8a51169dc 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -36,7 +36,8 @@ { "name" : ":features:roomaliasresolver:impl", "includeRegex" : [ - "screen_room_alias_resolver_.*" + "screen_room_alias_resolver_.*", + "screen.join_room.loading_alert_title" ] }, { diff --git a/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.2.kt b/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.2.kt index 0080f8d9052..c4f3b1b5b24 100644 --- a/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.2.kt +++ b/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.2.kt @@ -1,12 +1,12 @@ #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME}#end import androidx.compose.foundation.layout.Box -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter +import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Text @@ -19,7 +19,7 @@ fun ${NAME}View( Box(modifier, contentAlignment = Alignment.Center) { Text( "${NAME} feature view", - color = MaterialTheme.colorScheme.primary, + color = ElementTheme.colors.textPrimary, ) } }