diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 39e4364658..aef924c392 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- variant: [debug, release, nightly, samples]
+ variant: [debug, release, nightly]
fail-fast: false
# Allow all jobs on develop. Just one per PR.
concurrency:
@@ -82,6 +82,3 @@ jobs:
- name: Compile nightly sources
if: ${{ matrix.variant == 'nightly' }}
run: ./gradlew compileGplayNightlySources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
- - name: Compile samples minimal
- if: ${{ matrix.variant == 'samples' }}
- run: ./gradlew :samples:minimal:assemble $CI_GRADLE_ARG_PROPERTIES
diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml
index 8835e94594..136dfb1f20 100644
--- a/.github/workflows/maestro.yml
+++ b/.github/workflows/maestro.yml
@@ -79,7 +79,7 @@ jobs:
uses: actions/download-artifact@v4
with:
name: elementx-apk-maestro
- - uses: mobile-dev-inc/action-maestro-cloud@v1.9.4
+ - uses: mobile-dev-inc/action-maestro-cloud@v1.9.6
if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch'
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index cdb81ff8d7..a3fedc9a6d 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -82,7 +82,7 @@ jobs:
# https://github.com/codecov/codecov-action
- name: ☂️ Upload coverage reports to codecov
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/CHANGES.md b/CHANGES.md
index 6452a0c1bb..777cd401c9 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,65 @@
+Changes in Element X v0.7.3 (2024-11-08)
+========================================
+
+## What's Changed
+### ✨ Features
+* Incoming session verification by @bmarty in https://github.com/element-hq/element-x-android/pull/3733
+* Remove all GPS metadata from images uploaded as media by @jmartinesp in https://github.com/element-hq/element-x-android/pull/3781
+* Send caption with image and video by @bmarty in https://github.com/element-hq/element-x-android/pull/3803
+### 🙌 Improvements
+* UI iteration on the encryption settings by @bmarty in https://github.com/element-hq/element-x-android/pull/3750
+* Rotate firebase token in case of error by @bmarty in https://github.com/element-hq/element-x-android/pull/3755
+* Optimize media upload by @bmarty in https://github.com/element-hq/element-x-android/pull/3779
+* Iteration on caption by @bmarty in https://github.com/element-hq/element-x-android/pull/3816
+* Hide join call button when the user is already in the call by @bmarty in https://github.com/element-hq/element-x-android/pull/3815
+* Disable button during the "verifying" step. by @bmarty in https://github.com/element-hq/element-x-android/pull/3832
+### 🐛 Bugfixes
+* Fix oversize padding on captioned images/videos by @frebib in https://github.com/element-hq/element-x-android/pull/3732
+* Fix the onboarding flow getting stuck in some cases by @jmartinesp in https://github.com/element-hq/element-x-android/pull/3778
+* bugfix: do not remove logs after sending them by @ganfra in https://github.com/element-hq/element-x-android/pull/3780
+* Use in-memory thumbnail APIs when possible by @jmartinesp in https://github.com/element-hq/element-x-android/pull/3817
+* ElementCall: allow user to switch to another call. by @bmarty in https://github.com/element-hq/element-x-android/pull/3833
+* Do not delete the original file if it's not a temporary file when sending it to a room. by @bmarty in https://github.com/element-hq/element-x-android/pull/3819
+* Fix verification failed issue, simplify verification logic by @jmartinesp in https://github.com/element-hq/element-x-android/pull/3830
+### 🗣 Translations
+* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/3798
+### 🧱 Build
+* Target api 35 by @bmarty in https://github.com/element-hq/element-x-android/pull/3776
+### 🚧 In development 🚧
+* Knocking : update create room flow by @ganfra in https://github.com/element-hq/element-x-android/pull/3804
+### Dependency upgrades
+* Update dependency io.nlopez.compose.rules:detekt to v0.4.17 by @renovate in https://github.com/element-hq/element-x-android/pull/3746
+* Update dependency com.posthog:posthog-android to v3.8.3 - autoclosed by @renovate in https://github.com/element-hq/element-x-android/pull/3742
+* Update dependency org.maplibre.gl:android-plugin-annotation-v9 to v3.0.2 by @renovate in https://github.com/element-hq/element-x-android/pull/3702
+* Update dependency com.posthog:posthog-android to v3.9.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3754
+* Update kotlin by @renovate in https://github.com/element-hq/element-x-android/pull/3283
+* Update camera to v1.4.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3765
+* Update dependencyAnalysis to v2.4.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3773
+* Update kotlin to v2.0.21-1.0.26 by @renovate in https://github.com/element-hq/element-x-android/pull/3774
+* Update dependency androidx.annotation:annotation-jvm to v1.9.1 - autoclosed by @renovate in https://github.com/element-hq/element-x-android/pull/3762
+* chore(deps): update dependencyanalysis to v2.4.2 by @renovate in https://github.com/element-hq/element-x-android/pull/3791
+* fix(deps): update dependency androidx.compose:compose-bom to v2024.10.01 by @renovate in https://github.com/element-hq/element-x-android/pull/3782
+* Update dependency androidx.constraintlayout:constraintlayout-compose to v1.1.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3770
+* fix(deps): update dependency androidx.constraintlayout:constraintlayout to v2.2.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3784
+* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v0.2.59 by @renovate in https://github.com/element-hq/element-x-android/pull/3809
+* Update mobile-dev-inc/action-maestro-cloud action to v1.9.4 by @renovate in https://github.com/element-hq/element-x-android/pull/3820
+* Update dependency com.otaliastudios:transcoder to v0.11.2 by @renovate in https://github.com/element-hq/element-x-android/pull/3805
+* Update plugin paparazzi to v1.3.5 by @renovate in https://github.com/element-hq/element-x-android/pull/3826
+* Update dependency org.matrix.rustcomponents:sdk-android to v0.2.60 by @renovate in https://github.com/element-hq/element-x-android/pull/3827
+### Others
+* Change wording to "Verify identity" by @bmarty in https://github.com/element-hq/element-x-android/pull/3751
+* Improve FakeMatrixRoom to be able to check all the parameters. by @bmarty in https://github.com/element-hq/element-x-android/pull/3761
+* Editor state fixture and preview improvement by @bmarty in https://github.com/element-hq/element-x-android/pull/3758
+* Enable identity pinning violation notifications unconditionally by @andybalaam in https://github.com/element-hq/element-x-android/pull/3745
+* Enable predictive back gesture by @frebib in https://github.com/element-hq/element-x-android/pull/3797
+* Update project status by @mxandreas in https://github.com/element-hq/element-x-android/pull/3806
+* Remove code duplication - no behavior change. by @bmarty in https://github.com/element-hq/element-x-android/pull/3823
+* Verification UI / UX iteration by @bmarty in https://github.com/element-hq/element-x-android/pull/3829
+
+## New Contributors
+* @andybalaam made their first contribution in https://github.com/element-hq/element-x-android/pull/3745
+* @mxandreas made their first contribution in https://github.com/element-hq/element-x-android/pull/3806
+
Changes in Element X v0.7.2 (2024-10-29)
========================================
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6acfa7981f..bc4acfd5aa 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -49,8 +49,6 @@ Please ensure that you're using the project formatting rules (which are in the p
This project should compile without any special action. Just clone it and open it with Android Studio, or compile from command line using `gradlew`.
-Note: please make sure that the configuration is `app` and not `samples.minimal`.
-
## Strings
The strings of the project are managed externally using [https://localazy.com](https://localazy.com) and shared with Element X iOS.
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 69808409cf..158622b4a3 100644
--- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt
+++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt
@@ -87,7 +87,7 @@ class MainActivity : NodeActivity() {
@Composable
private fun MainNodeHost() {
- NodeHost(integrationPoint = appyxIntegrationPoint) {
+ NodeHost(integrationPoint = appyxV1IntegrationPoint) {
MainNode(
it,
plugins = listOf(
diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml
index 196aaa2d3d..6aafb362ad 100644
--- a/app/src/main/res/xml/locales_config.xml
+++ b/app/src/main/res/xml/locales_config.xml
@@ -9,6 +9,7 @@
+
diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt
index c619629152..91f5d7da19 100644
--- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt
+++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt
@@ -142,12 +142,12 @@ class LoggedInPresenter @Inject constructor(
.also { Timber.tag(pusherTag.value).w("No distributors available") }
.also {
// In this case, consider the push provider is chosen.
- pushService.selectPushProvider(matrixClient, pushProvider)
+ pushService.selectPushProvider(matrixClient.sessionId, pushProvider)
}
.also { pusherRegistrationState.value = AsyncData.Failure(PusherRegistrationFailure.NoDistributorsAvailable()) }
pushService.registerWith(matrixClient, pushProvider, distributor)
} else {
- val currentPushDistributor = currentPushProvider.getCurrentDistributor(matrixClient)
+ val currentPushDistributor = currentPushProvider.getCurrentDistributor(matrixClient.sessionId)
if (currentPushDistributor == null) {
Timber.tag(pusherTag.value).d("Register with the first available distributor")
val distributor = currentPushProvider.getDistributors().firstOrNull()
diff --git a/appnav/src/main/res/values-fi/translations.xml b/appnav/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..bdd10a92c4
--- /dev/null
+++ b/appnav/src/main/res/values-fi/translations.xml
@@ -0,0 +1,5 @@
+
+
+ "Kirjaudu Ulos & Päivitä"
+ "Kotipalvelimesi ei enää tue vanhaa protokollaa. Kirjaudu ulos ja takaisin sisään jatkaaksesi sovelluksen käyttöä."
+
diff --git a/appnav/src/main/res/values-uk/translations.xml b/appnav/src/main/res/values-uk/translations.xml
new file mode 100644
index 0000000000..d2ee822d30
--- /dev/null
+++ b/appnav/src/main/res/values-uk/translations.xml
@@ -0,0 +1,5 @@
+
+
+ "Вийти та оновити"
+ "Ваш домашній сервер більше не підтримує старий протокол. Будь ласка, вийдіть і увійдіть знову, щоб продовжити використання програми."
+
diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt
index 961856148e..ec44876634 100644
--- a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt
+++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt
@@ -378,7 +378,7 @@ class LoggedInPresenterTest {
val lambda = lambdaRecorder> { _, _, _ ->
Result.success(Unit)
}
- val selectPushProviderLambda = lambdaRecorder { _, _ -> }
+ val selectPushProviderLambda = lambdaRecorder { _, _ -> }
val sessionVerificationService = FakeSessionVerificationService(
initialSessionVerifiedStatus = SessionVerifiedStatus.Verified
)
@@ -408,8 +408,8 @@ class LoggedInPresenterTest {
selectPushProviderLambda.assertions()
.isCalledOnce()
.with(
- // MatrixClient
- any(),
+ // SessionId
+ value(A_SESSION_ID),
// PushProvider
value(pushProvider),
)
@@ -481,7 +481,7 @@ class LoggedInPresenterTest {
registerWithLambda: (MatrixClient, PushProvider, Distributor) -> Result = { _, _, _ ->
Result.success(Unit)
},
- selectPushProviderLambda: (MatrixClient, PushProvider) -> Unit = { _, _ -> lambdaError() },
+ selectPushProviderLambda: (SessionId, PushProvider) -> Unit = { _, _ -> lambdaError() },
currentPushProvider: () -> PushProvider? = { null },
setIgnoreRegistrationErrorLambda: (SessionId, Boolean) -> Unit = { _, _ -> lambdaError() },
): PushService {
diff --git a/build.gradle.kts b/build.gradle.kts
index 56e29f87d0..187b09de54 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -49,7 +49,7 @@ allprojects {
config.from(files("$rootDir/tools/detekt/detekt.yml"))
}
dependencies {
- detektPlugins("io.nlopez.compose.rules:detekt:0.4.17")
+ detektPlugins("io.nlopez.compose.rules:detekt:0.4.19")
}
// KtLint
diff --git a/docs/continuous_integration.md b/docs/continuous_integration.md
index 4ff0ebb983..85a869cbe9 100644
--- a/docs/continuous_integration.md
+++ b/docs/continuous_integration.md
@@ -40,7 +40,7 @@ We want:
The CI checks that:
-1. The code is compiling, without any warnings, for all the app build types and variants and for the minimal app
+1. The code is compiling, without any warnings, for all the app build types and variants
2. The tests are passing
3. The code quality is good (detekt, ktlint, lint)
4. The code is running and smoke tests are passing (maestro)
diff --git a/fastlane/metadata/android/en-US/changelogs/40007040.txt b/fastlane/metadata/android/en-US/changelogs/40007040.txt
new file mode 100644
index 0000000000..4271b643da
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40007040.txt
@@ -0,0 +1,2 @@
+Main changes in this version: bug fixes.
+Full changelog: https://github.com/element-hq/element-x-android/releases
\ No newline at end of file
diff --git a/features/analytics/api/src/main/res/values-fi/translations.xml b/features/analytics/api/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..446538f043
--- /dev/null
+++ b/features/analytics/api/src/main/res/values-fi/translations.xml
@@ -0,0 +1,7 @@
+
+
+ "Jaa anonyymejä käyttötietoja auttaaksesi meitä tunnistamaan ongelmat."
+ "Voit lukea kaikki ehtomme %1$s."
+ "täällä"
+ "Jaa analytiikkatietoja"
+
diff --git a/features/analytics/impl/src/main/res/values-fi/translations.xml b/features/analytics/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..26fad905b1
--- /dev/null
+++ b/features/analytics/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,10 @@
+
+
+ "Emme tallenna tai profiloi henkilötietoja"
+ "Jaa anonyymejä käyttötietoja auttaaksesi meitä tunnistamaan ongelmat."
+ "Voit lukea kaikki ehtomme %1$s."
+ "täällä"
+ "Voit poistaa tämän käytöstä milloin tahansa"
+ "Emme jaa tietojasi kolmansien osapuolien kanssa"
+ "Auta parantamaan %1$s -sovellusta"
+
diff --git a/features/analytics/impl/src/main/res/values-uk/translations.xml b/features/analytics/impl/src/main/res/values-uk/translations.xml
index f91ddb3e53..c40f29a45b 100644
--- a/features/analytics/impl/src/main/res/values-uk/translations.xml
+++ b/features/analytics/impl/src/main/res/values-uk/translations.xml
@@ -5,6 +5,6 @@
"Ви можете прочитати всі наші умови %1$s."
"тут"
"Ви можете вимкнути цю функцію в будь-який час"
- "Ми не передаватимемо Ваші дані третім особам"
- "Допоможіть покращити %1$s"
+ "Ми не передаватимемо ваші дані третім особам"
+ "Допоможіть вдосконалити %1$s"
diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt
index d774a5133c..8bc77caaa3 100644
--- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt
+++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt
@@ -8,6 +8,7 @@
package io.element.android.features.call.impl.utils
import android.annotation.SuppressLint
+import androidx.annotation.VisibleForTesting
import androidx.core.app.NotificationManagerCompat
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.appconfig.ElementCallConfig
@@ -56,11 +57,6 @@ interface ActiveCallManager {
*/
fun registerIncomingCall(notificationData: CallNotificationData)
- /**
- * Called when the incoming call timed out. It will remove the active call and remove any associated UI, adding a 'missed call' notification.
- */
- fun incomingCallTimedOut()
-
/**
* Called when the active call has been hung up. It will remove any existing UI and the active call.
* @param callType The type of call that the user hung up, either an external url one or a room one.
@@ -113,18 +109,24 @@ class DefaultActiveCallManager @Inject constructor(
// Wait for the ringing call to time out
delay(ElementCallConfig.RINGING_CALL_DURATION_SECONDS.seconds)
- incomingCallTimedOut()
+ incomingCallTimedOut(displayMissedCallNotification = true)
}
}
- override fun incomingCallTimedOut() {
+ /**
+ * Called when the incoming call timed out. It will remove the active call and remove any associated UI, adding a 'missed call' notification.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ fun incomingCallTimedOut(displayMissedCallNotification: Boolean) {
val previousActiveCall = activeCall.value ?: return
val notificationData = (previousActiveCall.callState as? CallState.Ringing)?.notificationData ?: return
activeCall.value = null
cancelIncomingCallNotification()
- displayMissedCallNotification(notificationData)
+ if (displayMissedCallNotification) {
+ displayMissedCallNotification(notificationData)
+ }
}
override fun hungUpCall(callType: CallType) {
@@ -186,28 +188,35 @@ class DefaultActiveCallManager @Inject constructor(
@OptIn(ExperimentalCoroutinesApi::class)
private fun observeRingingCall() {
- // This will observe ringing calls and ensure they're terminated if the room call is cancelled
+ // This will observe ringing calls and ensure they're terminated if the room call is cancelled or if the user
+ // has joined the call from another session.
activeCall
.filterNotNull()
.filter { it.callState is CallState.Ringing && it.callType is CallType.RoomCall }
.flatMapLatest { activeCall ->
val callType = activeCall.callType as CallType.RoomCall
- // Get a flow of updated `hasRoomCall` values for the room
+ // Get a flow of updated `hasRoomCall` and `activeRoomCallParticipants` values for the room
matrixClientProvider.getOrRestore(callType.sessionId).getOrNull()
?.getRoom(callType.roomId)
?.roomInfoFlow
- ?.map { it.hasRoomCall }
+ ?.map {
+ it.hasRoomCall to (callType.sessionId in it.activeRoomCallParticipants)
+ }
?: flowOf()
}
// We only want to check if the room active call status changes
.distinctUntilChanged()
// Skip the first one, we're not interested in it (if the check below passes, it had to be active anyway)
.drop(1)
- .onEach { roomHasActiveCall ->
+ .onEach { (roomHasActiveCall, userIsInTheCall) ->
if (!roomHasActiveCall) {
// The call was cancelled
timedOutCallJob?.cancel()
- incomingCallTimedOut()
+ incomingCallTimedOut(displayMissedCallNotification = true)
+ } else if (userIsInTheCall) {
+ // The user joined the call from another session
+ timedOutCallJob?.cancel()
+ incomingCallTimedOut(displayMissedCallNotification = false)
}
}
.launchIn(coroutineScope)
diff --git a/features/call/impl/src/main/res/values-fi/translations.xml b/features/call/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..3a7db64ae1
--- /dev/null
+++ b/features/call/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,7 @@
+
+
+ "Käynnissä oleva puhelu"
+ "Palaa puheluun napauttamalla"
+ "☎️ Puhelu käynnissä"
+ "Saapuva Element Call -puhelu"
+
diff --git a/features/call/impl/src/main/res/values-uk/translations.xml b/features/call/impl/src/main/res/values-uk/translations.xml
index 02e03d45fe..9d63049ddc 100644
--- a/features/call/impl/src/main/res/values-uk/translations.xml
+++ b/features/call/impl/src/main/res/values-uk/translations.xml
@@ -1,6 +1,7 @@
- "Поточний дзвінок"
- "Натисніть, щоб повернутися до виклику"
- "☎️ Триває дзвінок"
+ "Поточний виклик"
+ "Торкніться, щоб повернутися до виклику"
+ "☎️ Триває виклик"
+ "Вхідний виклик Element"
diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt
index b9f6a524ae..fe5454fb67 100644
--- a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt
+++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt
@@ -119,7 +119,7 @@ class DefaultActiveCallManagerTest {
onMissedCallNotificationHandler = FakeOnMissedCallNotificationHandler(addMissedCallNotificationLambda = addMissedCallNotificationLambda)
)
- manager.incomingCallTimedOut()
+ manager.incomingCallTimedOut(displayMissedCallNotification = true)
addMissedCallNotificationLambda.assertions().isNeverCalled()
}
@@ -139,7 +139,7 @@ class DefaultActiveCallManagerTest {
manager.registerIncomingCall(aCallNotificationData())
assertThat(manager.activeCall.value).isNotNull()
- manager.incomingCallTimedOut()
+ manager.incomingCallTimedOut(displayMissedCallNotification = true)
advanceTimeBy(1)
assertThat(manager.activeCall.value).isNull()
diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/FakeActiveCallManager.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/FakeActiveCallManager.kt
index 8ec385d861..9554a46dae 100644
--- a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/FakeActiveCallManager.kt
+++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/FakeActiveCallManager.kt
@@ -15,7 +15,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
class FakeActiveCallManager(
var registerIncomingCallResult: (CallNotificationData) -> Unit = {},
- var incomingCallTimedOutResult: () -> Unit = {},
var hungUpCallResult: (CallType) -> Unit = {},
var joinedCallResult: (CallType) -> Unit = {},
) : ActiveCallManager {
@@ -25,10 +24,6 @@ class FakeActiveCallManager(
registerIncomingCallResult(notificationData)
}
- override fun incomingCallTimedOut() {
- incomingCallTimedOutResult()
- }
-
override fun hungUpCall(callType: CallType) {
hungUpCallResult(callType)
}
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt
index ab6e116598..a83673886d 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt
@@ -19,6 +19,4 @@ data class CreateRoomConfig(
val avatarUri: Uri? = null,
val invites: ImmutableList = persistentListOf(),
val roomVisibility: RoomVisibilityState = RoomVisibilityState.Private,
-) {
- val isValid = roomName.isNullOrEmpty().not() && roomVisibility.isValid()
-}
+)
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomDataStore.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomDataStore.kt
index 56ebe326dd..67e697e8e4 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomDataStore.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomDataStore.kt
@@ -11,13 +11,13 @@ import android.net.Uri
import io.element.android.features.createroom.impl.configureroom.RoomAccess
import io.element.android.features.createroom.impl.configureroom.RoomAccessItem
import io.element.android.features.createroom.impl.configureroom.RoomAddress
-import io.element.android.features.createroom.impl.configureroom.RoomAddressErrorState
import io.element.android.features.createroom.impl.configureroom.RoomVisibilityItem
import io.element.android.features.createroom.impl.configureroom.RoomVisibilityState
import io.element.android.features.createroom.impl.di.CreateRoomScope
import io.element.android.features.createroom.impl.userlist.UserListDataStore
import io.element.android.libraries.androidutils.file.safeDelete
import io.element.android.libraries.di.SingleIn
+import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -29,6 +29,7 @@ import javax.inject.Inject
@SingleIn(CreateRoomScope::class)
class CreateRoomDataStore @Inject constructor(
val selectedUserListDataStore: UserListDataStore,
+ private val roomAliasHelper: RoomAliasHelper,
) {
private val createRoomConfigFlow: MutableStateFlow = MutableStateFlow(CreateRoomConfig())
private var cachedAvatarUri: Uri? = null
@@ -46,13 +47,13 @@ class CreateRoomDataStore @Inject constructor(
fun setRoomName(roomName: String) {
createRoomConfigFlow.getAndUpdate { config ->
- /*
val newVisibility = when (config.roomVisibility) {
is RoomVisibilityState.Public -> {
val roomAddress = config.roomVisibility.roomAddress
if (roomAddress is RoomAddress.AutoFilled || roomName.isEmpty()) {
+ val roomAliasName = roomAliasHelper.roomAliasNameFromRoomDisplayName(roomName)
config.roomVisibility.copy(
- roomAddress = RoomAddress.AutoFilled(roomName),
+ roomAddress = RoomAddress.AutoFilled(roomAliasName),
)
} else {
config.roomVisibility
@@ -60,9 +61,9 @@ class CreateRoomDataStore @Inject constructor(
}
else -> config.roomVisibility
}
- */
config.copy(
roomName = roomName.takeIf { it.isNotEmpty() },
+ roomVisibility = newVisibility,
)
}
}
@@ -85,11 +86,13 @@ class CreateRoomDataStore @Inject constructor(
config.copy(
roomVisibility = when (visibility) {
RoomVisibilityItem.Private -> RoomVisibilityState.Private
- RoomVisibilityItem.Public -> RoomVisibilityState.Public(
- roomAddress = RoomAddress.AutoFilled(config.roomName.orEmpty()),
- roomAddressErrorState = RoomAddressErrorState.None,
- roomAccess = RoomAccess.Anyone,
- )
+ RoomVisibilityItem.Public -> {
+ val roomAliasName = roomAliasHelper.roomAliasNameFromRoomDisplayName(config.roomName.orEmpty())
+ RoomVisibilityState.Public(
+ roomAddress = RoomAddress.AutoFilled(roomAliasName),
+ roomAccess = RoomAccess.Anyone,
+ )
+ }
}
)
}
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt
index bbefc987ef..3ace410c78 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt
@@ -17,6 +17,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.rememberUpdatedState
import im.vector.app.features.analytics.plan.CreatedRoom
import io.element.android.features.createroom.impl.CreateRoomConfig
import io.element.android.features.createroom.impl.CreateRoomDataStore
@@ -31,6 +32,8 @@ import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
import io.element.android.libraries.matrix.api.createroom.RoomPreset
import io.element.android.libraries.matrix.api.createroom.RoomVisibility
+import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
+import io.element.android.libraries.matrix.api.roomAliasFromName
import io.element.android.libraries.matrix.ui.media.AvatarAction
import io.element.android.libraries.mediapickers.api.PickerProvider
import io.element.android.libraries.mediaupload.api.MediaPreProcessor
@@ -39,9 +42,12 @@ import io.element.android.libraries.permissions.api.PermissionsPresenter
import io.element.android.services.analytics.api.AnalyticsService
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import timber.log.Timber
+import java.util.Optional
import javax.inject.Inject
+import kotlin.jvm.optionals.getOrNull
class ConfigureRoomPresenter @Inject constructor(
private val dataStore: CreateRoomDataStore,
@@ -51,6 +57,7 @@ class ConfigureRoomPresenter @Inject constructor(
private val analyticsService: AnalyticsService,
permissionsPresenterFactory: PermissionsPresenter.Factory,
private val featureFlagService: FeatureFlagService,
+ private val roomAliasHelper: RoomAliasHelper,
) : Presenter {
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
private var pendingPermissionRequest = false
@@ -58,9 +65,12 @@ class ConfigureRoomPresenter @Inject constructor(
@Composable
override fun present(): ConfigureRoomState {
val cameraPermissionState = cameraPermissionPresenter.present()
- val createRoomConfig = dataStore.createRoomConfigWithInvites.collectAsState(CreateRoomConfig())
+ val createRoomConfig by dataStore.createRoomConfigWithInvites.collectAsState(CreateRoomConfig())
val homeserverName = remember { matrixClient.userIdServerName() }
val isKnockFeatureEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock).collectAsState(initial = false)
+ val roomAddressValidity = remember {
+ mutableStateOf(RoomAddressValidity.Unknown)
+ }
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker(
onResult = { uri -> if (uri != null) dataStore.setAvatarUri(uri = uri, cached = true) },
@@ -69,12 +79,12 @@ class ConfigureRoomPresenter @Inject constructor(
onResult = { uri -> if (uri != null) dataStore.setAvatarUri(uri = uri) }
)
- val avatarActions by remember(createRoomConfig.value.avatarUri) {
+ val avatarActions by remember(createRoomConfig.avatarUri) {
derivedStateOf {
listOfNotNull(
AvatarAction.TakePhoto,
AvatarAction.ChoosePhoto,
- AvatarAction.Remove.takeIf { createRoomConfig.value.avatarUri != null },
+ AvatarAction.Remove.takeIf { createRoomConfig.avatarUri != null },
).toImmutableList()
}
}
@@ -86,6 +96,10 @@ class ConfigureRoomPresenter @Inject constructor(
}
}
+ RoomAddressValidityEffect(createRoomConfig.roomVisibility.roomAddress()) { newRoomAddressValidity ->
+ roomAddressValidity.value = newRoomAddressValidity
+ }
+
val localCoroutineScope = rememberCoroutineScope()
val createRoomAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) }
@@ -102,7 +116,7 @@ class ConfigureRoomPresenter @Inject constructor(
is ConfigureRoomEvents.RemoveUserFromSelection -> dataStore.selectedUserListDataStore.removeUserFromSelection(event.matrixUser)
is ConfigureRoomEvents.RoomAccessChanged -> dataStore.setRoomAccess(event.roomAccess)
is ConfigureRoomEvents.RoomAddressChanged -> dataStore.setRoomAddress(event.roomAddress)
- is ConfigureRoomEvents.CreateRoom -> createRoom(createRoomConfig.value)
+ is ConfigureRoomEvents.CreateRoom -> createRoom(createRoomConfig)
is ConfigureRoomEvents.HandleAvatarAction -> {
when (event.action) {
AvatarAction.ChoosePhoto -> galleryImagePicker.launch()
@@ -122,15 +136,49 @@ class ConfigureRoomPresenter @Inject constructor(
return ConfigureRoomState(
isKnockFeatureEnabled = isKnockFeatureEnabled,
- config = createRoomConfig.value,
+ config = createRoomConfig,
avatarActions = avatarActions,
createRoomAction = createRoomAction.value,
cameraPermissionState = cameraPermissionState,
homeserverName = homeserverName,
+ roomAddressValidity = roomAddressValidity.value,
eventSink = ::handleEvents,
)
}
+ @Composable
+ private fun RoomAddressValidityEffect(
+ roomAddress: Optional,
+ onRoomAddressValidityChange: (RoomAddressValidity) -> Unit,
+ ) {
+ val onChange by rememberUpdatedState(onRoomAddressValidityChange)
+ LaunchedEffect(roomAddress) {
+ val roomAliasName = roomAddress.getOrNull().orEmpty()
+ if (roomAliasName.isEmpty()) {
+ onChange(RoomAddressValidity.Unknown)
+ return@LaunchedEffect
+ }
+ // debounce the room address validation
+ delay(300)
+ val roomAlias = matrixClient.roomAliasFromName(roomAliasName).getOrNull()
+ if (roomAlias == null || !roomAliasHelper.isRoomAliasValid(roomAlias)) {
+ onChange(RoomAddressValidity.InvalidSymbols)
+ } else {
+ matrixClient.resolveRoomAlias(roomAlias)
+ .onSuccess { resolved ->
+ if (resolved.isPresent) {
+ onChange(RoomAddressValidity.NotAvailable)
+ } else {
+ onChange(RoomAddressValidity.Valid)
+ }
+ }
+ .onFailure {
+ onChange(RoomAddressValidity.Valid)
+ }
+ }
+ }
+ }
+
private fun CoroutineScope.createRoom(
config: CreateRoomConfig,
createRoomAction: MutableState>
@@ -148,7 +196,7 @@ class ConfigureRoomPresenter @Inject constructor(
preset = RoomPreset.PUBLIC_CHAT,
invite = config.invites.map { it.userId },
avatar = avatarUrl,
- canonicalAlias = config.roomVisibility.roomAddress()
+ roomAliasName = config.roomVisibility.roomAddress()
)
} else {
CreateRoomParameters(
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt
index 8a2122c306..2730efb19f 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomState.kt
@@ -20,6 +20,10 @@ data class ConfigureRoomState(
val avatarActions: ImmutableList,
val createRoomAction: AsyncAction,
val cameraPermissionState: PermissionsState,
+ val roomAddressValidity: RoomAddressValidity,
val homeserverName: String,
val eventSink: (ConfigureRoomEvents) -> Unit
-)
+) {
+ val isValid: Boolean = config.roomName?.isNotEmpty() == true &&
+ (config.roomVisibility is RoomVisibilityState.Private || roomAddressValidity == RoomAddressValidity.Valid)
+}
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt
index 80445fbff4..0de6404424 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomStateProvider.kt
@@ -28,9 +28,8 @@ open class ConfigureRoomStateProvider : PreviewParameterProvider = AsyncAction.Uninitialized,
cameraPermissionState: PermissionsState = aPermissionsState(showDialog = false),
homeserverName: String = "matrix.org",
+ roomAddressValidity: RoomAddressValidity = RoomAddressValidity.Valid,
eventSink: (ConfigureRoomEvents) -> Unit = { },
) = ConfigureRoomState(
config = config,
@@ -64,5 +96,6 @@ fun aConfigureRoomState(
createRoomAction = createRoomAction,
cameraPermissionState = cameraPermissionState,
homeserverName = homeserverName,
+ roomAddressValidity = roomAddressValidity,
eventSink = eventSink,
)
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt
index b0084f68f6..e34bb27a8b 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomView.kt
@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
@@ -23,7 +24,6 @@ import androidx.compose.foundation.selection.selectableGroup
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -36,16 +36,17 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.createroom.impl.R
+import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage
import io.element.android.libraries.designsystem.atomic.atoms.RoundedIconAtom
import io.element.android.libraries.designsystem.atomic.atoms.RoundedIconAtomSize
-import io.element.android.libraries.designsystem.components.LabelledTextField
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.list.ListItemContent
import io.element.android.libraries.designsystem.modifiers.clearFocusOnTap
-import io.element.android.libraries.designsystem.preview.ElementPreview
-import io.element.android.libraries.designsystem.preview.PreviewsDayNight
+import io.element.android.libraries.designsystem.preview.ElementPreviewDark
+import io.element.android.libraries.designsystem.preview.ElementPreviewLight
+import io.element.android.libraries.designsystem.preview.PreviewWithLargeHeight
import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.ListItem
import io.element.android.libraries.designsystem.theme.components.Scaffold
@@ -79,7 +80,7 @@ fun ConfigureRoomView(
modifier = modifier.clearFocusOnTap(focusManager),
topBar = {
ConfigureRoomToolbar(
- isNextActionEnabled = state.config.isValid,
+ isNextActionEnabled = state.isValid,
onBackClick = onBackClick,
onNextClick = {
focusManager.clearFocus()
@@ -143,8 +144,10 @@ fun ConfigureRoomView(
modifier = Modifier.padding(horizontal = 16.dp),
address = state.config.roomVisibility.roomAddress,
homeserverName = state.homeserverName,
+ addressValidity = state.roomAddressValidity,
onAddressChange = { state.eventSink(ConfigureRoomEvents.RoomAddressChanged(it)) },
)
+ Spacer(Modifier)
}
}
}
@@ -217,7 +220,7 @@ private fun RoomNameWithAvatar(
modifier = Modifier.clickable(onClick = onAvatarClick),
)
- LabelledTextField(
+ TextField(
label = stringResource(R.string.screen_create_room_room_name_label),
value = roomName,
placeholder = stringResource(CommonStrings.common_room_name_placeholder),
@@ -233,7 +236,7 @@ private fun RoomTopic(
onTopicChange: (String) -> Unit,
modifier: Modifier = Modifier,
) {
- LabelledTextField(
+ TextField(
modifier = modifier,
label = stringResource(R.string.screen_create_room_topic_label),
value = topic,
@@ -319,54 +322,56 @@ private fun RoomAccessOptions(
private fun RoomAddressField(
address: RoomAddress,
homeserverName: String,
+ addressValidity: RoomAddressValidity,
onAddressChange: (String) -> Unit,
modifier: Modifier = Modifier,
) {
- Column(
- modifier = modifier,
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- color = MaterialTheme.colorScheme.primary,
- text = stringResource(R.string.screen_create_room_room_address_section_title),
- )
-
- TextField(
- modifier = Modifier.fillMaxWidth(),
- value = address.value,
- leadingIcon = {
- Text(
- text = "#",
- style = ElementTheme.typography.fontBodyLgMedium,
- color = ElementTheme.colors.textSecondary,
- )
- },
- trailingIcon = {
- Text(
- text = homeserverName,
- style = ElementTheme.typography.fontBodyLgMedium,
- color = ElementTheme.colors.textSecondary,
- modifier = Modifier.padding(end = 16.dp)
- )
- },
- supportingText = {
- Text(
- text = stringResource(R.string.screen_create_room_room_address_section_footer),
- style = ElementTheme.typography.fontBodySmRegular,
- color = ElementTheme.colors.textSecondary,
- )
- },
- onValueChange = onAddressChange,
- singleLine = true,
- )
- }
+ TextField(
+ modifier = modifier.fillMaxWidth(),
+ value = address.value,
+ label = stringResource(R.string.screen_create_room_room_address_section_title),
+ leadingIcon = {
+ Text(
+ text = "#",
+ style = ElementTheme.typography.fontBodyLgMedium,
+ color = ElementTheme.colors.textSecondary,
+ )
+ },
+ trailingIcon = {
+ Text(
+ text = homeserverName,
+ style = ElementTheme.typography.fontBodyLgMedium,
+ color = ElementTheme.colors.textSecondary,
+ )
+ },
+ supportingText = when (addressValidity) {
+ RoomAddressValidity.InvalidSymbols -> {
+ stringResource(R.string.screen_create_room_room_address_invalid_symbols_error_description)
+ }
+ RoomAddressValidity.NotAvailable -> {
+ stringResource(R.string.screen_create_room_room_address_not_available_error_description)
+ }
+ else -> stringResource(R.string.screen_create_room_room_address_section_footer)
+ },
+ isError = addressValidity.isError(),
+ onValueChange = onAddressChange,
+ singleLine = true,
+ )
}
-@PreviewsDayNight
+@PreviewWithLargeHeight
@Composable
-internal fun ConfigureRoomViewPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) = ElementPreview {
+internal fun ConfigureRoomViewLightPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) =
+ ElementPreviewLight { ContentToPreview(state) }
+
+@PreviewWithLargeHeight
+@Composable
+internal fun ConfigureRoomViewDarkPreview(@PreviewParameter(ConfigureRoomStateProvider::class) state: ConfigureRoomState) =
+ ElementPreviewDark { ContentToPreview(state) }
+
+@ExcludeFromCoverage
+@Composable
+private fun ContentToPreview(state: ConfigureRoomState) {
ConfigureRoomView(
state = state,
onBackClick = {},
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressErrorState.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressErrorState.kt
deleted file mode 100644
index f2cadfd6bb..0000000000
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressErrorState.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.features.createroom.impl.configureroom
-
-/**
- * Represents the error state of a room address.
- */
-sealed interface RoomAddressErrorState {
- data object InvalidCharacters : RoomAddressErrorState
- data object AlreadyExists : RoomAddressErrorState
- data object None : RoomAddressErrorState
-}
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressValidity.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressValidity.kt
new file mode 100644
index 0000000000..536f48f94e
--- /dev/null
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomAddressValidity.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.features.createroom.impl.configureroom
+
+import androidx.compose.runtime.Immutable
+
+/**
+ * Represents the validity state of a room address.
+ * ie. whether it contains invalid characters, is already taken, or is valid.
+ */
+@Immutable
+sealed interface RoomAddressValidity {
+ data object Unknown : RoomAddressValidity
+ data object InvalidSymbols : RoomAddressValidity
+ data object NotAvailable : RoomAddressValidity
+ data object Valid : RoomAddressValidity
+
+ fun isError(): Boolean {
+ return this is InvalidSymbols || this is NotAvailable
+ }
+}
diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomVisibilityState.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomVisibilityState.kt
index cc5af7836e..502e307557 100644
--- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomVisibilityState.kt
+++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/RoomVisibilityState.kt
@@ -14,7 +14,6 @@ sealed interface RoomVisibilityState {
data class Public(
val roomAddress: RoomAddress,
- val roomAddressErrorState: RoomAddressErrorState,
val roomAccess: RoomAccess,
) : RoomVisibilityState
@@ -24,11 +23,4 @@ sealed interface RoomVisibilityState {
is Public -> Optional.of(roomAddress.value)
}
}
-
- fun isValid(): Boolean {
- return when (this) {
- is Private -> true
- is Public -> roomAddressErrorState is RoomAddressErrorState.None && roomAddress.value.isNotEmpty()
- }
- }
}
diff --git a/features/createroom/impl/src/main/res/values-cs/translations.xml b/features/createroom/impl/src/main/res/values-cs/translations.xml
index 697120201d..bfba96ee56 100644
--- a/features/createroom/impl/src/main/res/values-cs/translations.xml
+++ b/features/createroom/impl/src/main/res/values-cs/translations.xml
@@ -13,6 +13,8 @@ To můžete kdykoli změnit v nastavení místnosti."
"Přístup do 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 připojení"
+ "Některé znaky nejsou povoleny. Podporovány jsou pouze písmena, číslice a následující symboly ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Tato adresa místnosti již existuje, zkuste prosím upravit pole adresy místnosti nebo změnit název místnosti"
"Aby byla tato místnost viditelná v adresáři veřejných místností, budete potřebovat adresu místnosti."
"Adresa místnosti"
"Název místnosti"
diff --git a/features/createroom/impl/src/main/res/values-et/translations.xml b/features/createroom/impl/src/main/res/values-et/translations.xml
index 67db887f2c..9f86a8c353 100644
--- a/features/createroom/impl/src/main/res/values-et/translations.xml
+++ b/features/createroom/impl/src/main/res/values-et/translations.xml
@@ -13,6 +13,8 @@ Sa võid seda jututoa seadistustest alati muuta."
"Ligipääs jututoale"
"Kõik võivad paluda selle jututoaga liitumist, kuid peakasutaja või moderaator peavad selle kinnitama"
"Küsi võimalust liitumiseks"
+ "Mõned tähemärgid pole lubatud. Kasuta vaid tähti, numbreid ja neid kirjavahemärke ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Selline jututoa aadress on juba olemas. Palun proovi muuta kas aadressi või jututoa nime"
"Selleks, et see jututuba oleks nähtav jututubade avalikus kataloogis, sa vajad jututoa aadressi."
"Jututoa aadress"
"Jututoa nimi"
diff --git a/features/createroom/impl/src/main/res/values-fi/translations.xml b/features/createroom/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..949d411b16
--- /dev/null
+++ b/features/createroom/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,25 @@
+
+
+ "Uusi huone"
+ "Kutsu ihmisiä"
+ "Huoneen luomisessa tapahtui virhe"
+ "Vain kutsutut henkilöt pääsevät tähän huoneeseen. Kaikki viestit ovat päästä päähän salattuja."
+ "Yksityinen huone"
+ "Kuka tahansa voi löytää tämän huoneen.
+Voit muuttaa tämän milloin tahansa huoneen asetuksista."
+ "Julkinen huone"
+ "Kuka tahansa voi liittyä tähän huoneeseen"
+ "Kuka tahansa"
+ "Huoneeseen Pääsy"
+ "Kuka tahansa voi pyytää saada liittyä huoneeseen, mutta ylläpitäjän tai valvojan on hyväksyttävä pyyntö"
+ "Pyydä liittymistä"
+ "Jotkin merkit eivät ole sallittuja. Vain kirjaimet, numerot ja seuraavat symbolit ovat tuettuja ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Tämä huoneen osoite on jo käytössä, yritä muokata huoneen osoitekenttää tai muuta huoneen nimeä"
+ "Jotta tämä huone näkyisi julkisessa huonehakemistossa, tarvitset huoneen osoitteen."
+ "Huoneen osoite"
+ "Huoneen nimi"
+ "Huoneen näkyvyys"
+ "Luo huone"
+ "Aihe (valinnainen)"
+ "Keskustelun aloituksessa tapahtui virhe"
+
diff --git a/features/createroom/impl/src/main/res/values-fr/translations.xml b/features/createroom/impl/src/main/res/values-fr/translations.xml
index af40d1f9fe..67acb1b7db 100644
--- a/features/createroom/impl/src/main/res/values-fr/translations.xml
+++ b/features/createroom/impl/src/main/res/values-fr/translations.xml
@@ -13,6 +13,8 @@ Vous pouvez modifier cela à tout moment dans les paramètres du salon.""Accès au salon"
"Tout le monde peut demander à rejoindre le salon, mais un administrateur ou un modérateur devra accepter la demande"
"Demander à rejoindre"
+ "Certains caractères ne sont pas autorisés. Seuls les lettres, les chiffres et les symboles suivants sont utilisables ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Cette adresse de salon existe déjà, veuillez essayer de modifier le champ d’adresse de salon ou de modifier le nom du salon"
"Pour que ce salon soit visible dans le répertoire des salons publics, vous aurez besoin d’une adresse de salon."
"Adresse du salon"
"Nom du salon"
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 b1c7aeef1c..76c815e1b8 100644
--- a/features/createroom/impl/src/main/res/values-in/translations.xml
+++ b/features/createroom/impl/src/main/res/values-in/translations.xml
@@ -13,6 +13,8 @@ Anda dapat mengubah ini kapan pun dalam pengaturan ruangan."
"Akses Ruangan"
"Siapa pun dapat meminta untuk bergabung dengan ruangan tetapi administrator atau moderator harus menerima permintaan tersebut"
"Minta untuk bergabung"
+ "Beberapa karakter tidak diperbolehkan. Hanya huruf, angka, dan simbol berikut didukung ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Alamat ruangan sudah ada, silakan coba sunting kolom alamat ruangan atau ubah nama ruangan"
"Supaya ruangan ini terlihat di direktori ruangan publik, Anda memerlukan alamat ruangan."
"Alamat ruangan"
"Nama ruangan"
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 60ee753b13..8bffbfa250 100644
--- a/features/createroom/impl/src/main/res/values-pt/translations.xml
+++ b/features/createroom/impl/src/main/res/values-pt/translations.xml
@@ -13,6 +13,8 @@ Pode alterar esta opção nas definições da sala."
"Acesso à sala"
"Qualquer pessoa pode pedir para entrar na sala, mas um administrador ou um moderador terá de aceitar o pedido"
"Pedir para participar"
+ "Alguns caracteres não são permitidos. Apenas letras, dígitos e os seguintes símbolos são suportados! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Este endereço de sala já existe, tente editar o campo de endereço da sala ou altere o nome da sala"
"Para que esta sala seja visível no diretório público de salas, precisas de um endereço de sala."
"Endereço da sala"
"Nome da sala"
diff --git a/features/createroom/impl/src/main/res/values-ru/translations.xml b/features/createroom/impl/src/main/res/values-ru/translations.xml
index b21bcb68ac..a6837f115b 100644
--- a/features/createroom/impl/src/main/res/values-ru/translations.xml
+++ b/features/createroom/impl/src/main/res/values-ru/translations.xml
@@ -13,6 +13,8 @@
"Доступ в комнату"
"Любой желающий может подать заявку на присоединение к комнате, но администратор или модератор должен будет принять запрос."
"Попросить присоединиться"
+ "Некоторые символы не допускаются. Поддерживаются только буквы, цифры и следующие символы! $ & \'() * +/; =? @ [] - . _"
+ "Такой адрес комнаты уже существует, попробуйте отредактировать поле адреса комнаты или изменить название комнаты"
"Чтобы эта комната была видна в каталоге общедоступных, вам необходим ее адрес"
"Адрес комнаты"
"Название комнаты"
diff --git a/features/createroom/impl/src/main/res/values-sk/translations.xml b/features/createroom/impl/src/main/res/values-sk/translations.xml
index d2d742239f..4d0e7fff2b 100644
--- a/features/createroom/impl/src/main/res/values-sk/translations.xml
+++ b/features/createroom/impl/src/main/res/values-sk/translations.xml
@@ -13,6 +13,8 @@ Môžete to kedykoľvek zmeniť v nastaveniach miestnosti."
"Prístup do miestnosti"
"Ktokoľvek môže požiadať o pripojenie sa k miestnosti, ale administrátor alebo moderátor bude musieť žiadosť schváliť"
"Požiadať o pripojenie"
+ "Niektoré znaky nie sú povolené. Podporované sú iba písmená, číslice a nasledujúce symboly ! $ & \'() * +/; =? @ [] - . _"
+ "Táto adresa miestnosti už existuje, skúste upraviť pole adresy miestnosti alebo zmeňte názov miestnosti"
"Aby bola táto miestnosť viditeľná v adresári verejných miestností, budete potrebovať adresu miestnosti."
"Adresa miestnosti"
"Názov miestnosti"
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 139abe5ccc..c310efbaf0 100644
--- a/features/createroom/impl/src/main/res/values-uk/translations.xml
+++ b/features/createroom/impl/src/main/res/values-uk/translations.xml
@@ -3,12 +3,23 @@
"Нова кімната"
"Запросити людей"
"Під час створення кімнати сталася помилка"
- "Повідомлення в цій кімнаті зашифровані. Пізніше шифрування вимкнути не можна."
+ "Лише запрошені люди мають доступ до цієї кімнати. Усі повідомлення захищені наскрізним шифруванням."
"Приватна кімната (тільки за запрошенням)"
- "Повідомлення не шифруються, і будь-хто може їх прочитати. Шифрування можна ввімкнути пізніше."
- "Загальна кімната (будь-хто)"
+ "Будь-хто може знайти цю кімнату.
+Ви можете змінити це в будь-який час у налаштуваннях кімнати."
+ "Публічна кімната"
+ "Будь-хто може приєднатися до цієї кімнати"
+ "Кожний"
+ "Доступ до кімнати"
+ "Будь-хто може попросити приєднатися до кімнати, але адміністратор або модератор повинен буде прийняти запит"
+ "Запросити приєднатися"
+ "Деякі символи не допускаються. Підтримуються тільки букви, цифри і наступні символи! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "Ця адреса кімнати вже існує, будь ласка, спробуйте відредагувати поле адреси кімнати або змінити назву кімнати"
+ "Щоб цю кімнату було видно в каталозі загальнодоступних кімнат, вам знадобиться її адреса."
+ "Адреса кімнати"
"Назва кімнати"
+ "Видимість кімнати"
"Створити кімнату"
"Тема (необов\'язково)"
- "Під час спроби почати чат сталася помилка"
+ "Під час спроби почати бесіду сталася помилка"
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 d398cfdbd0..2738b2124f 100644
--- a/features/createroom/impl/src/main/res/values-zh/translations.xml
+++ b/features/createroom/impl/src/main/res/values-zh/translations.xml
@@ -2,13 +2,22 @@
"新聊天室"
"邀请朋友"
- "创建房间时出错"
- "此聊天室中的消息已加密。加密无法禁用。"
- "私人房间(仅限受邀者)"
- "消息未加密,任何人都可以查看。可以稍后启用加密。"
- "公共房间(任何人)"
- "房间名称"
- "创建房间"
+ "创建聊天室时出错"
+ "只有受邀用户才能访问此房间。所有消息均经过端到端加密。"
+ "私有房间"
+ "任何人都能找到此房间。
+你可以随时在房间设置中更改。"
+ "公开房间"
+ "任何人都可以加入此房间"
+ "任何人"
+ "房间访问权限"
+ "任何人都可以请求加入房间,但必须由管理员或审核人接受"
+ "请求加入"
+ "要使该房间在公开房间目录中可见,您需要一个房间地址。"
+ "房间地址"
+ "聊天室名称"
+ "房间可见性"
+ "创建聊天室"
"主题(可选)"
"在开始聊天时发生了错误"
diff --git a/features/createroom/impl/src/main/res/values/localazy.xml b/features/createroom/impl/src/main/res/values/localazy.xml
index 6ed5510ce0..7900aef801 100644
--- a/features/createroom/impl/src/main/res/values/localazy.xml
+++ b/features/createroom/impl/src/main/res/values/localazy.xml
@@ -13,6 +13,8 @@ You can change this anytime in room settings."
"Room Access"
"Anyone can ask to join the room but an administrator or a moderator will have to accept the request"
"Ask to join"
+ "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"
+ "This room address already exists, please try editing the room address field or change the room name"
"In order for this room to be visible in the public room directory, you will need a room address."
"Room address"
"Room name"
diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenterTest.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenterTest.kt
index 7a9ae7321e..69205e6178 100644
--- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenterTest.kt
+++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeoplePresenterTest.kt
@@ -14,6 +14,7 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.features.createroom.impl.CreateRoomDataStore
import io.element.android.features.createroom.impl.userlist.FakeUserListPresenterFactory
import io.element.android.features.createroom.impl.userlist.UserListDataStore
+import io.element.android.libraries.matrix.test.room.alias.FakeRoomAliasHelper
import io.element.android.libraries.usersearch.test.FakeUserRepository
import io.element.android.tests.testutils.WarmUpRule
import kotlinx.coroutines.test.runTest
@@ -32,7 +33,7 @@ class AddPeoplePresenterTest {
presenter = AddPeoplePresenter(
FakeUserListPresenterFactory(),
FakeUserRepository(),
- CreateRoomDataStore(UserListDataStore())
+ CreateRoomDataStore(UserListDataStore(), FakeRoomAliasHelper())
)
}
diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTest.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTest.kt
index fefb09c241..b39e08ec80 100644
--- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTest.kt
+++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTest.kt
@@ -19,11 +19,15 @@ import io.element.android.libraries.featureflag.api.FeatureFlags
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId
+import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias
+import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
import io.element.android.libraries.matrix.test.A_MESSAGE
+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_THROWABLE
import io.element.android.libraries.matrix.test.FakeMatrixClient
+import io.element.android.libraries.matrix.test.room.alias.FakeRoomAliasHelper
import io.element.android.libraries.matrix.ui.components.aMatrixUser
import io.element.android.libraries.matrix.ui.media.AvatarAction
import io.element.android.libraries.mediapickers.api.PickerProvider
@@ -44,6 +48,8 @@ import io.mockk.mockkStatic
import io.mockk.unmockkAll
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Before
@@ -52,6 +58,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import java.io.File
+import java.util.Optional
private const val AN_URI_FROM_CAMERA = "content://uri_from_camera"
private const val AN_URI_FROM_CAMERA_2 = "content://uri_from_camera_2"
@@ -95,21 +102,21 @@ class ConfigureRoomPresenterTest {
presenter.test {
val initialState = initialState()
var config = initialState.config
- assertThat(initialState.config.isValid).isFalse()
+ assertThat(initialState.isValid).isFalse()
// Room name not empty
initialState.eventSink(ConfigureRoomEvents.RoomNameChanged(A_ROOM_NAME))
var newState: ConfigureRoomState = awaitItem()
config = config.copy(roomName = A_ROOM_NAME)
assertThat(newState.config).isEqualTo(config)
- assertThat(newState.config.isValid).isTrue()
+ assertThat(newState.isValid).isTrue()
// Clear room name
newState.eventSink(ConfigureRoomEvents.RoomNameChanged(""))
newState = awaitItem()
config = config.copy(roomName = null)
assertThat(newState.config).isEqualTo(config)
- assertThat(newState.config.isValid).isFalse()
+ assertThat(newState.isValid).isFalse()
}
}
@@ -118,8 +125,9 @@ class ConfigureRoomPresenterTest {
val userListDataStore = UserListDataStore()
val pickerProvider = FakePickerProvider()
val permissionsPresenter = FakePermissionsPresenter()
+ val roomAliasHelper = FakeRoomAliasHelper()
val presenter = createConfigureRoomPresenter(
- createRoomDataStore = CreateRoomDataStore(userListDataStore),
+ createRoomDataStore = CreateRoomDataStore(userListDataStore, roomAliasHelper),
pickerProvider = pickerProvider,
permissionsPresenter = permissionsPresenter,
)
@@ -191,8 +199,7 @@ class ConfigureRoomPresenterTest {
newState = awaitItem()
expectedConfig = expectedConfig.copy(
roomVisibility = RoomVisibilityState.Public(
- roomAddress = RoomAddress.AutoFilled(expectedConfig.roomName ?: ""),
- roomAddressErrorState = RoomAddressErrorState.None,
+ roomAddress = RoomAddress.AutoFilled(roomAliasHelper.roomAliasNameFromRoomDisplayName(expectedConfig.roomName ?: "")),
roomAccess = RoomAccess.Anyone,
)
)
@@ -254,7 +261,7 @@ class ConfigureRoomPresenterTest {
val matrixClient = createMatrixClient()
val analyticsService = FakeAnalyticsService()
val mediaPreProcessor = FakeMediaPreProcessor()
- val createRoomDataStore = CreateRoomDataStore(UserListDataStore())
+ val createRoomDataStore = CreateRoomDataStore(UserListDataStore(), FakeRoomAliasHelper())
val presenter = createConfigureRoomPresenter(
createRoomDataStore = createRoomDataStore,
mediaPreProcessor = mediaPreProcessor,
@@ -315,17 +322,88 @@ class ConfigureRoomPresenterTest {
}
}
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun `present - address is invalid when format is invalid`() = runTest {
+ val aliasHelper = FakeRoomAliasHelper(
+ isRoomAliasValidLambda = { false }
+ )
+ val presenter = createConfigureRoomPresenter(
+ roomAliasHelper = aliasHelper
+ )
+ presenter.test {
+ val initialState = initialState()
+ initialState.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(RoomVisibilityItem.Public))
+ skipItems(1)
+ initialState.eventSink(ConfigureRoomEvents.RoomAddressChanged("invalid address"))
+ skipItems(1)
+ advanceUntilIdle()
+ awaitItem().also { state ->
+ assertThat(state.roomAddressValidity).isEqualTo(RoomAddressValidity.InvalidSymbols)
+ }
+ }
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun `present - address is not available when alias is not available`() = runTest {
+ val fakeMatrixClient = createMatrixClient(isAliasAvailable = false)
+ val presenter = createConfigureRoomPresenter(
+ matrixClient = fakeMatrixClient,
+ )
+ presenter.test {
+ val initialState = initialState()
+ initialState.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(RoomVisibilityItem.Public))
+ skipItems(1)
+ initialState.eventSink(ConfigureRoomEvents.RoomAddressChanged("address"))
+ skipItems(1)
+ advanceUntilIdle()
+ awaitItem().also { state ->
+ assertThat(state.roomAddressValidity).isEqualTo(RoomAddressValidity.NotAvailable)
+ }
+ }
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun `present - address is valid when alias is available and format is valid`() = runTest {
+ val fakeMatrixClient = createMatrixClient(isAliasAvailable = true)
+ val presenter = createConfigureRoomPresenter(
+ matrixClient = fakeMatrixClient,
+ )
+ presenter.test {
+ val initialState = initialState()
+ initialState.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(RoomVisibilityItem.Public))
+ skipItems(1)
+ initialState.eventSink(ConfigureRoomEvents.RoomAddressChanged("address"))
+ skipItems(1)
+ advanceUntilIdle()
+ awaitItem().also { state ->
+ assertThat(state.roomAddressValidity).isEqualTo(RoomAddressValidity.Valid)
+ }
+ }
+ }
+
private suspend fun TurbineTestContext.initialState(): ConfigureRoomState {
skipItems(1)
return awaitItem()
}
- private fun createMatrixClient() = FakeMatrixClient(
+ private fun createMatrixClient(isAliasAvailable: Boolean = true) = FakeMatrixClient(
userIdServerNameLambda = { "matrix.org" },
+ resolveRoomAliasResult = {
+ val resolvedRoomAlias = if (isAliasAvailable) {
+ Optional.empty()
+ } else {
+ Optional.of(ResolvedRoomAlias(A_ROOM_ID, emptyList()))
+ }
+ Result.success(resolvedRoomAlias)
+ }
)
private fun createConfigureRoomPresenter(
- createRoomDataStore: CreateRoomDataStore = CreateRoomDataStore(UserListDataStore()),
+ roomAliasHelper: RoomAliasHelper = FakeRoomAliasHelper(),
+ createRoomDataStore: CreateRoomDataStore = CreateRoomDataStore(UserListDataStore(), roomAliasHelper),
matrixClient: MatrixClient = createMatrixClient(),
pickerProvider: PickerProvider = FakePickerProvider(),
mediaPreProcessor: MediaPreProcessor = FakeMediaPreProcessor(),
@@ -339,6 +417,7 @@ class ConfigureRoomPresenterTest {
mediaPreProcessor = mediaPreProcessor,
analyticsService = analyticsService,
permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter),
+ roomAliasHelper = roomAliasHelper,
featureFlagService = FakeFeatureFlagService(
mapOf(FeatureFlags.Knock.key to isKnockFeatureEnabled)
)
diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt
index 7df20acb96..16d53a67a8 100644
--- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt
+++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt
@@ -9,7 +9,9 @@
package io.element.android.features.logout.impl
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
@@ -52,19 +54,18 @@ import io.element.android.libraries.designsystem.atomic.organisms.InfoListOrgani
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.form.textFieldState
import io.element.android.libraries.designsystem.components.list.SwitchListItem
+import io.element.android.libraries.designsystem.modifiers.autofill
+import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart
import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.Icon
-import io.element.android.libraries.designsystem.theme.components.IconButton
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Scaffold
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.designsystem.theme.components.autofill
-import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.ui.strings.CommonStrings
@@ -257,26 +258,21 @@ private fun Content(
)
}
- Column(
+ Box(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp),
) {
- Text(
- text = stringResource(CommonStrings.action_confirm_password),
- style = ElementTheme.typography.fontBodySmMedium,
- color = ElementTheme.colors.textSecondary,
- )
var passwordVisible by remember { mutableStateOf(false) }
if (isLoading) {
// Ensure password is hidden when user submits the form
passwordVisible = false
}
- OutlinedTextField(
+ TextField(
value = passwordFieldState,
+ label = stringResource(CommonStrings.action_confirm_password),
readOnly = isLoading,
modifier = Modifier
- .padding(top = 8.dp)
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(focusManager)
.testTag(TestTags.loginPassword)
@@ -293,9 +289,7 @@ private fun Content(
passwordFieldState = sanitized
eventSink(AccountDeactivationEvents.SetPassword(sanitized))
},
- placeholder = {
- Text(text = stringResource(CommonStrings.common_password))
- },
+ placeholder = stringResource(CommonStrings.common_password),
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
val image =
@@ -303,7 +297,7 @@ private fun Content(
val description =
if (passwordVisible) stringResource(CommonStrings.a11y_hide_password) else stringResource(CommonStrings.a11y_show_password)
- IconButton(onClick = { passwordVisible = !passwordVisible }) {
+ Box(modifier = Modifier.clickable { passwordVisible = !passwordVisible }) {
Icon(imageVector = image, description)
}
},
diff --git a/features/deactivation/impl/src/main/res/values-fi/translations.xml b/features/deactivation/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..df2543be70
--- /dev/null
+++ b/features/deactivation/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,14 @@
+
+
+ "Vahvista, että haluat deaktivoida tilisi. Tätä ei voi perua."
+ "Poista kaikki viestini"
+ "Varoitus: Tulevaisuudessa muut voivat nähdä puutteellisia keskusteluja."
+ "Tilisi deaktivointia %1$s. Jos teet sen:"
+ "ei voi peruuttaa"
+ "Tilisi %1$s (et voi kirjautua takaisin sisään, eikä tunnustasi voi käyttää uudelleen)."
+ "poistetaan käytöstä pysyvästi"
+ "Sinut poistetaan kaikista keskusteluhuoneista."
+ "Tilitietosi poistetaan identiteettipalvelimeltamme."
+ "Viestisi näkyvät edelleen rekisteröityneille käyttäjille, mutta ne eivät ole uusien tai rekisteröimättömien käyttäjien saatavilla, jos päätät poistaa ne."
+ "Deaktivoi tili"
+
diff --git a/features/deactivation/impl/src/main/res/values-pt/translations.xml b/features/deactivation/impl/src/main/res/values-pt/translations.xml
index 1a9a694e3a..536f4cec34 100644
--- a/features/deactivation/impl/src/main/res/values-pt/translations.xml
+++ b/features/deactivation/impl/src/main/res/values-pt/translations.xml
@@ -9,6 +9,6 @@
"Desativar permanentemente"
"Removê-lo de todas as salas de chat."
"Exclua as informações da sua conta do nosso servidor de identidade."
- "Suas mensagens ainda estarão visíveis para usuários registrados, mas não estarão disponíveis para usuários novos ou não registrados se você optar por excluí-las."
+ "As tuas mensagens continuarão a ser visíveis para os utilizadores registados, mas não estarão disponíveis para os utilizadores novos ou não registados se optares por as apagar."
"Desativar conta"
diff --git a/features/deactivation/impl/src/main/res/values-ru/translations.xml b/features/deactivation/impl/src/main/res/values-ru/translations.xml
index 1b978b524e..ccd38f218a 100644
--- a/features/deactivation/impl/src/main/res/values-ru/translations.xml
+++ b/features/deactivation/impl/src/main/res/values-ru/translations.xml
@@ -6,7 +6,7 @@
"Отключение вашей учетной записи %1$s и означает следующее:"
"необратимо"
"Ваша учётная запись будет %1$s (вы не сможете войти в неё снова, и ваш ID не может быть использован повторно)."
- "Отключить навсегда"
+ "отключена навсегда"
"Вы будете удалены из всех чатов."
"Данные вашей учётной записи будут удалены с нашего сервера идентификации."
"Ваши сообщения по-прежнему будут видны зарегистрированным пользователям, но не будут доступны новым или незарегистрированным пользователям, если вы решите удалить их."
diff --git a/features/deactivation/impl/src/main/res/values-uk/translations.xml b/features/deactivation/impl/src/main/res/values-uk/translations.xml
new file mode 100644
index 0000000000..62cf66cec1
--- /dev/null
+++ b/features/deactivation/impl/src/main/res/values-uk/translations.xml
@@ -0,0 +1,14 @@
+
+
+ "Будь ласка, підтвердіть, що ви хочете деактивувати свій обліковий запис. Ця дія не може бути скасована."
+ "Видалити всі мої повідомлення"
+ "Попередження: майбутні користувачі можуть бачити неповні розмови."
+ "Деактивація вашого облікового запису%1$s , це буде:"
+ "незворотні"
+ "%1$sваш обліковий запис (ви не можете знову увійти, а ваш ідентифікатор не може бути використаний повторно)."
+ "Назавжди відключити"
+ "Видалити вас з усіх чатів."
+ "Видаліть інформацію свого облікового запису з нашого сервера ідентифікації."
+ "Ваші повідомлення залишатимуться видимими для зареєстрованих користувачів, але недоступними для нових або незареєстрованих користувачів, якщо ви вирішите їх видалити."
+ "Відключити обліковий запис"
+
diff --git a/features/deactivation/impl/src/main/res/values-zh/translations.xml b/features/deactivation/impl/src/main/res/values-zh/translations.xml
new file mode 100644
index 0000000000..ca24375d66
--- /dev/null
+++ b/features/deactivation/impl/src/main/res/values-zh/translations.xml
@@ -0,0 +1,14 @@
+
+
+ "请确认您要停用您的账户。此操作无法撤消。"
+ "删除我的所有消息"
+ "警告:未来的用户可能会看到不完整的对话。"
+ "停用您的帐户是%1$s,它将:"
+ "不可逆转的"
+ "%1$s您的账户(您无法登录回来,并且您的ID无法重复使用)。"
+ "永久禁用"
+ "将您从所有聊天房间中移除。"
+ "从我们的身份服务器中删除您的账户信息。"
+ "注册用户仍可看到您的消息,但如果您选择删除它们,新用户或未注册用户将无法看到您的消息。"
+ "停用账户"
+
diff --git a/features/ftue/impl/src/main/res/values-fi/translations.xml b/features/ftue/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..f04854ffef
--- /dev/null
+++ b/features/ftue/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,11 @@
+
+
+ "Voit muuttaa asetuksia myöhemmin."
+ "Salli ilmoitukset ja älä koskaan missaa viestejä"
+ "Puhelut, kyselyt, haku ja paljon muuta lisätään myöhemmin tänä vuonna."
+ "Salattujen huoneiden viestihistoria ei ole vielä käytettävissä."
+ "Haluaisimme kuulla mielipiteesi, kerro mitä mieltä olet asetuksien kautta."
+ "Mennään!"
+ "Tässä on mitä sinun tarvitsee tietää:"
+ "Tervetuloa %1$s -sovellukseen!"
+
diff --git a/features/ftue/impl/src/main/res/values-uk/translations.xml b/features/ftue/impl/src/main/res/values-uk/translations.xml
index 53909599b2..920f6d3d1c 100644
--- a/features/ftue/impl/src/main/res/values-uk/translations.xml
+++ b/features/ftue/impl/src/main/res/values-uk/translations.xml
@@ -2,10 +2,10 @@
"Ви можете змінити свої налаштування пізніше."
"Дозволити сповіщення і ніколи не пропускати повідомлення"
- "Дзвінки, опитування, пошук тощо будуть додані пізніше цього року."
+ "Виклики, опитування, пошук тощо будуть додані пізніше цього року."
"Історія повідомлень для зашифрованих кімнат ще недоступна."
"Ми хотіли б почути вас, розкажіть нам ваші враження та ідеї щодо застосунку на сторінці налаштувань."
- "Пішли!"
+ "Уперед!"
"Ось що вам потрібно знати:"
"Ласкаво просимо до %1$s!"
diff --git a/features/ftue/impl/src/main/res/values-zh/translations.xml b/features/ftue/impl/src/main/res/values-zh/translations.xml
index bbc5059789..c98be66867 100644
--- a/features/ftue/impl/src/main/res/values-zh/translations.xml
+++ b/features/ftue/impl/src/main/res/values-zh/translations.xml
@@ -3,7 +3,7 @@
"您可以稍后更改设置。"
"允许通知,绝不错过任何消息"
"今年晚些时候将增加通话、投票、搜索等功能。"
- "加密房间的消息历史记录尚不可用。"
+ "加密聊天室的消息历史记录尚不可用。"
"我们很乐意听取您的意见,请通过设置页面告诉我们您的想法。"
"开始吧!"
"以下是您需要了解的内容:"
diff --git a/features/invite/impl/src/main/res/values-fi/translations.xml b/features/invite/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..bf5b83a8c6
--- /dev/null
+++ b/features/invite/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,9 @@
+
+
+ "Haluatko varmasti hylätä kutsun liittyä %1$s -huoneeseen?"
+ "Hylkää kutsu"
+ "Haluatko varmasti hylätä kutsun yksityiseen keskusteluun käyttäjän %1$s kanssa?"
+ "Hylkää keskustelu"
+ "Ei kutsuja"
+ "%1$s (%2$s) kutsui sinut"
+
diff --git a/features/invite/impl/src/main/res/values-uk/translations.xml b/features/invite/impl/src/main/res/values-uk/translations.xml
index f6ecbbb652..fa535213ba 100644
--- a/features/invite/impl/src/main/res/values-uk/translations.xml
+++ b/features/invite/impl/src/main/res/values-uk/translations.xml
@@ -2,8 +2,8 @@
"Ви впевнені, що хочете відхилити запрошення приєднатися до %1$s?"
"Відхилити запрошення"
- "Ви дійсно хочете відмовитися від приватного чату з %1$s?"
- "Відхилити чат"
+ "Ви дійсно хочете відмовитися від приватної бесіди з %1$s?"
+ "Відхилити бесіду"
"Немає запрошень"
- "%1$s (%2$s) запросив (-ла) Вас"
+ "%1$s (%2$s) запрошує вас"
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 0b3e828275..ba909a147b 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
@@ -42,7 +42,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
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.preview.RoomPreview
+import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo
import io.element.android.libraries.matrix.ui.model.toInviteSender
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@@ -96,10 +96,10 @@ class JoinRoomPresenter @AssistedInject constructor(
}
else -> {
value = ContentState.Loading(roomIdOrAlias)
- val result = matrixClient.getRoomPreview(roomIdOrAlias, serverNames)
+ val result = matrixClient.getRoomPreviewInfo(roomIdOrAlias, serverNames)
value = result.fold(
- onSuccess = { roomPreview ->
- roomPreview.toContentState()
+ onSuccess = { previewInfo ->
+ previewInfo.toContentState()
},
onFailure = { throwable ->
if (throwable.message?.contains("403") == true) {
@@ -184,7 +184,7 @@ class JoinRoomPresenter @AssistedInject constructor(
}
}
-private fun RoomPreview.toContentState(): ContentState {
+private fun RoomPreviewInfo.toContentState(): ContentState {
return ContentState.Loaded(
roomId = roomId,
name = name,
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 b73742c05b..3a1c7c8421 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
@@ -60,8 +60,8 @@ 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.OutlinedButton
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
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
@@ -390,19 +390,13 @@ private fun DefaultLoadedContent(
)
} else if (contentState.joinAuthorisationStatus is JoinAuthorisationStatus.CanKnock) {
Spacer(modifier = Modifier.height(24.dp))
- OutlinedTextField(
+ TextField(
value = knockMessage,
onValueChange = onKnockMessageUpdate,
maxLines = 3,
minLines = 3,
- modifier = Modifier.fillMaxWidth()
- )
- Text(
- text = stringResource(R.string.screen_join_room_knock_message_description),
- style = ElementTheme.typography.fontBodySmRegular,
- color = ElementTheme.colors.textPlaceholder,
- textAlign = TextAlign.Start,
- modifier = Modifier.fillMaxWidth()
+ modifier = Modifier.fillMaxWidth(),
+ supportingText = stringResource(R.string.screen_join_room_knock_message_description)
)
}
}
diff --git a/features/joinroom/impl/src/main/res/values-el/translations.xml b/features/joinroom/impl/src/main/res/values-el/translations.xml
index b4c6cfd434..0b114b54e6 100644
--- a/features/joinroom/impl/src/main/res/values-el/translations.xml
+++ b/features/joinroom/impl/src/main/res/values-el/translations.xml
@@ -1,6 +1,9 @@
"Ακύρωση αιτήματος"
+ "Ναι, ακύρωση"
+ "Σίγουρα θες να ακυρώσεις το αίτημά σου για συμμετοχή σε αυτό το δωμάτιο;"
+ "Ακύρωση αίτησης συμμετοχής"
"Συμμετοχή στο δωμάτιο"
"Χτύπα για συμμετοχή"
"Μήνυμα (προαιρετικό)"
diff --git a/features/joinroom/impl/src/main/res/values-fi/translations.xml b/features/joinroom/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..85e4174b4c
--- /dev/null
+++ b/features/joinroom/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,18 @@
+
+
+ "Peruuta pyyntö"
+ "Kyllä, peruuta"
+ "Haluatko varmasti peruuttaa pyyntösi liittyä tähän huoneeseen?"
+ "Peruuta liittymispyyntö"
+ "Liity huoneeseen"
+ "Lähetä liittymispyyntö"
+ "Viesti (valinnainen)"
+ "Saat kutsun liittyä huoneeseen, jos pyyntösi hyväksytään."
+ "Liittymispyyntö lähetetty"
+ "%1$s ei tue vielä tiloja. Voit käyttää tiloja selainversiolla."
+ "Tiloja ei vielä tueta"
+ "Paina alla olevaa nappia ja huoneen ylläpitäjä saa ilmoituksen. Voit liittyä keskusteluun kun pyyntösi on hyväksytty."
+ "Sinun on oltava tämän huoneen jäsen, jotta voit nähdä viestihistorian."
+ "Haluatko liittyä tähän huoneeseen?"
+ "Esikatselu ei ole saatavilla"
+
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 ba19245e40..371ed60c94 100644
--- a/features/joinroom/impl/src/main/res/values-uk/translations.xml
+++ b/features/joinroom/impl/src/main/res/values-uk/translations.xml
@@ -1,8 +1,15 @@
+ "Скасувати запит"
+ "Так, скасувати"
+ "Ви впевнені, що бажаєте скасувати свій запит на приєднання до цієї кімнати?"
+ "Скасувати запит на приєднання"
"Приєднатися до кімнати"
"Постукати, щоб приєднатися"
- "%1$s ще не підтримує простори. Ви можете отримати доступ до них в вебверсії."
+ "Повідомлення (необов\'язково)"
+ "Ви отримаєте запрошення приєднатися до кімнати, якщо ваш запит буде прийнятий."
+ "Запит на приєднання надіслано"
+ "%1$s ще не підтримує простори. Ви можете отримати доступ до них у вебверсії."
"Простори поки що не підтримуються"
"Натисніть кнопку нижче, і адміністратор кімнати отримає сповіщення. Ви зможете приєднатися до розмови після схвалення."
"Ви мусите бути учасником цієї кімнати, щоб переглядати історію повідомлень."
diff --git a/features/joinroom/impl/src/main/res/values-zh/translations.xml b/features/joinroom/impl/src/main/res/values-zh/translations.xml
index 02a9f290b8..1829c27744 100644
--- a/features/joinroom/impl/src/main/res/values-zh/translations.xml
+++ b/features/joinroom/impl/src/main/res/values-zh/translations.xml
@@ -1,11 +1,18 @@
+ "取消请求"
+ "是的,取消"
+ "您确定要取消加入此房间的请求吗?"
+ "取消加入申请"
"加入聊天室"
- "加入房间"
+ "加入聊天室"
+ "消息(可选)"
+ "如果您的请求被接受,您将收到加入房间的邀请。"
+ "加入请求已发送"
"%1$s 尚不支持空间。您可以通过 Web 端访问空间"
"空间尚不支持"
- "点击下面的按钮,系统将通知房间管理员。获得批准后,您将能够加入对话。"
+ "点击下面的按钮,系统将通知聊天室管理员。获得批准后将能够加入对话。"
"只有聊天室成员才能查看消息历史记录。"
- "想加入这个房间吗?"
+ "想加入这个聊天室吗?"
"预览不可用"
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 48bf792447..30ea9c5f04 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
@@ -26,7 +26,7 @@ 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.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.RoomType
-import io.element.android.libraries.matrix.api.room.preview.RoomPreview
+import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo
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
@@ -408,9 +408,9 @@ class JoinRoomPresenterTest {
@Test
fun `present - when room is not known RoomPreview is loaded`() = runTest {
val client = FakeMatrixClient(
- getRoomPreviewResult = { _, _ ->
+ getRoomPreviewInfoResult = { _, _ ->
Result.success(
- RoomPreview(
+ RoomPreviewInfo(
roomId = A_ROOM_ID,
canonicalAlias = RoomAlias("#alias:matrix.org"),
name = "Room name",
@@ -453,7 +453,7 @@ class JoinRoomPresenterTest {
@Test
fun `present - when room is not known RoomPreview is loaded with error`() = runTest {
val client = FakeMatrixClient(
- getRoomPreviewResult = { _, _ ->
+ getRoomPreviewInfoResult = { _, _ ->
Result.failure(AN_EXCEPTION)
}
)
@@ -491,7 +491,7 @@ class JoinRoomPresenterTest {
@Test
fun `present - when room is not known RoomPreview is loaded with error 403`() = runTest {
val client = FakeMatrixClient(
- getRoomPreviewResult = { _, _ ->
+ getRoomPreviewInfoResult = { _, _ ->
Result.failure(Exception("403"))
}
)
diff --git a/features/leaveroom/api/src/main/res/values-fi/translations.xml b/features/leaveroom/api/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..da1ba00ae5
--- /dev/null
+++ b/features/leaveroom/api/src/main/res/values-fi/translations.xml
@@ -0,0 +1,7 @@
+
+
+ "Haluatko varmasti poistua keskustelusta? Tämä keskustelu ei ole julkinen ja et voi liittyä takaisin ilman kutsua."
+ "Haluatko varmasti poistua huoneesta? Olet huoneen ainoa jäsen. Jos poistut, kukaan ei voi liittyä takaisin, et edes sinä."
+ "Haluatko varmasti poistua huoneesta? Tämä huone ei ole julkinen ja et voi liittyä takaisin ilman kutsua."
+ "Haluatko varmasti poistua huoneesta?"
+
diff --git a/features/leaveroom/api/src/main/res/values-uk/translations.xml b/features/leaveroom/api/src/main/res/values-uk/translations.xml
index 56f4122001..c26a0bbaaa 100644
--- a/features/leaveroom/api/src/main/res/values-uk/translations.xml
+++ b/features/leaveroom/api/src/main/res/values-uk/translations.xml
@@ -1,7 +1,7 @@
- "Ви впевнені, що хочете залишити цю розмову? Ця розмова не є загальнодоступною, і ви не зможете знову приєднатися без запрошення."
- "Ви впевнені, що хочете вийти з цієї кімнати? Ви тут єдина людина. Якщо Ви вийдете, ніхто в майбутньому не зможе приєднатися, у тому числі і Ви."
- "Ви впевнені, що хочете вийти з цієї кімнати? Ця кімната не є публічною, і ви не зможете повернутися до неї без запрошення."
+ "Ви впевнені, що хочете залишити цю розмову? Ця розмова не загальнодоступна, і ви не зможете знову приєднатися без запрошення."
+ "Ви впевнені, що хочете вийти з цієї кімнати? Ви тут єдина людина. Якщо ви вийдете, ніхто в майбутньому не зможе приєднатися, у тому числі й ви."
+ "Ви впевнені, що хочете вийти з цієї кімнати? Ця кімната не загальнодоступна, і ви не зможете повернутися до неї без запрошення."
"Ви впевнені, що хочете вийти з кімнати?"
diff --git a/features/leaveroom/api/src/main/res/values-zh-rTW/translations.xml b/features/leaveroom/api/src/main/res/values-zh-rTW/translations.xml
index 7b1b55acf6..f561b08adc 100644
--- a/features/leaveroom/api/src/main/res/values-zh-rTW/translations.xml
+++ b/features/leaveroom/api/src/main/res/values-zh-rTW/translations.xml
@@ -1,5 +1,6 @@
+ "您確定要離開對話嗎?此對話不是公開的,如果沒有收到邀請,您無法重新加入。"
"您確定要離開聊天室嗎?這裡只有您一個人。如果您離開了,包含您在內的所有人都無法再進入此聊天室。"
"您確定要離開聊天室嗎?此聊天室不是公開的,如果沒有收到邀請,您無法重新加入。"
"您確定要離開聊天室嗎?"
diff --git a/features/leaveroom/api/src/main/res/values-zh/translations.xml b/features/leaveroom/api/src/main/res/values-zh/translations.xml
index 9d5f0a5425..e9dcf44fd7 100644
--- a/features/leaveroom/api/src/main/res/values-zh/translations.xml
+++ b/features/leaveroom/api/src/main/res/values-zh/translations.xml
@@ -1,7 +1,7 @@
"您确定要离开此对话吗?此对话不公开,未经邀请您将无法重新加入。"
- "确定要离开这个房间吗?这里只有你一个人。如果你离开此房间,包括你在内的所有人都将无法进入。"
- "确定要离开这个房间吗?此房间不公开,没有邀请你将无法重新加入。"
- "确定要离开房间吗?"
+ "确定要离开此聊天室吗?此处只有你一个人。如果离开此聊天室,包括你在内的所有人都将无法进入。"
+ "确定要离开此聊天室吗?此聊天室不公开,没有邀请你将无法重新加入。"
+ "确定要离开聊天室吗?"
diff --git a/features/lockscreen/impl/src/main/res/values-fi/translations.xml b/features/lockscreen/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..6ed4ea81be
--- /dev/null
+++ b/features/lockscreen/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,37 @@
+
+
+ "biometrinen tunnistus"
+ "biometrinen tunnistus"
+ "Avaa biometrisellä"
+ "Unohtuiko PIN-koodi?"
+ "Vaihda PIN-koodi"
+ "Salli biometrinen tunnistus"
+ "Poista PIN-koodi"
+ "Haluatko varmasti poistaa PIN-koodin?"
+ "Poista PIN-koodi?"
+ "Salli %1$s"
+ "Käytän mieluummin PIN-koodia"
+ "Säästä aikaa ja ota käyttöön %1$s"
+ "Valitse PIN-koodi"
+ "Vahvista PIN-koodi"
+ "Lukitse %1$s -sovellus lisätäksesi turvaa keskusteluihisi.
+
+Valitse PIN-koodi, jonka muistat. Jos unohdat sen, joudut kirjautumaan ulos."
+ "Et voi valita tätä PIN-koodia turvallisuussyistä"
+ "Valitse toinen PIN-koodi"
+ "Anna sama PIN-koodi kahdesti"
+ "PIN-koodit eivät täsmää"
+ "Sinun on kirjauduttava sisään uudelleen ja luotava uusi PIN-koodi jatkaaksesi"
+ "Sinut kirjataan ulos"
+
+ - "Sinulla on %1$d yritys"
+ - "Sinulla on %1$d yritystä"
+
+
+ - "Väärä PIN-koodi. Sinulla on %1$d yritys jäljellä"
+ - "Väärä PIN-koodi. Sinulla on %1$d yritystä jäljellä"
+
+ "Käytä biometristä"
+ "Käytä PIN-koodia"
+ "Kirjaudutaan ulos…"
+
diff --git a/features/lockscreen/impl/src/main/res/values-uk/translations.xml b/features/lockscreen/impl/src/main/res/values-uk/translations.xml
index e97b0211ae..9ec2a38425 100644
--- a/features/lockscreen/impl/src/main/res/values-uk/translations.xml
+++ b/features/lockscreen/impl/src/main/res/values-uk/translations.xml
@@ -1,8 +1,8 @@
- "біометрична аутентифікація"
+ "біометрична автентифікація"
"біометричне розблокування"
- "Розблокуйте за допомогою біометрії"
+ "Розблокувати за допомогою біометрії"
"Забули PIN-код?"
"Змінити PIN-код"
"Дозволити біометричне розблокування"
@@ -10,18 +10,18 @@
"Ви впевнені, що хочете видалити PIN-код?"
"Видалити PIN-код?"
"Дозволити %1$s"
- "Я б краще використав PIN-код"
+ "Мені краще використати PIN-код"
"Заощаджуйте час і використовуйте %1$s для розблокування застосунку щоразу"
"Виберіть PIN-код"
"Підтвердити PIN-код"
"Заблокуйте %1$s, щоб додати додаткову безпеку вашим чатам.
Виберіть щось, що запам\'ятовується. Але якщо ви забудете PIN-код, ви вийдете з застосунку."
- "Ви не можете вибрати його як свій PIN-код з міркувань безпеки"
+ "Ви не можете вибрати його своїм PIN-кодом з міркувань безпеки"
"Виберіть інший PIN-код"
"Будь ласка, введіть один і той самий PIN-код двічі"
"PIN-коди не збігаються"
- "Щоб продовжити, вам потрібно буде повторно увійти та створити новий PIN-код"
+ "Щоб продовжити, вам потрібно повторно ввійти та створити новий PIN-код"
"Ви виходите з системи"
- "Ви маєте %1$d спробу"
@@ -33,7 +33,7 @@
- "Хибний PIN-код. Ви маєте ще %1$d шанси"
- "Хибний PIN-код. Ви маєте ще %1$d шансів"
- "Використовуйте біометрію"
- "Використовуйте PIN-код"
+ "Використати біометрію"
+ "Використати PIN-код"
"Вихід…"
diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordView.kt
index a76a2afbea..bc4ea74773 100644
--- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordView.kt
+++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordView.kt
@@ -7,6 +7,7 @@
package io.element.android.features.login.impl.screens.loginpassword
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@@ -52,17 +53,15 @@ import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog
import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.designsystem.modifiers.autofill
+import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
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.Icon
-import io.element.android.libraries.designsystem.theme.components.IconButton
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Scaffold
-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.designsystem.theme.components.autofill
-import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.ui.strings.CommonStrings
@@ -101,12 +100,12 @@ fun LoginPasswordView(
Column(
modifier = Modifier
- .fillMaxSize()
- .imePadding()
- .padding(padding)
- .consumeWindowInsets(padding)
- .verticalScroll(state = scrollState)
- .padding(start = 20.dp, end = 20.dp, bottom = 20.dp),
+ .fillMaxSize()
+ .imePadding()
+ .padding(padding)
+ .consumeWindowInsets(padding)
+ .verticalScroll(state = scrollState)
+ .padding(start = 20.dp, end = 20.dp, bottom = 20.dp),
) {
// Title
IconTitleSubtitleMolecule(
@@ -140,8 +139,8 @@ fun LoginPasswordView(
onClick = ::submit,
enabled = state.submitEnabled || isLoading,
modifier = Modifier
- .fillMaxWidth()
- .testTag(TestTags.loginContinue)
+ .fillMaxWidth()
+ .testTag(TestTags.loginContinue)
)
Spacer(modifier = Modifier.height(48.dp))
}
@@ -170,16 +169,10 @@ private fun LoginForm(
val eventSink = state.eventSink
Column {
- Text(
- text = stringResource(R.string.screen_login_form_header),
- modifier = Modifier.padding(start = 16.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- )
-
- Spacer(modifier = Modifier.height(8.dp))
- OutlinedTextField(
+ TextField(
+ label = stringResource(R.string.screen_login_form_header),
value = loginFieldState,
- readOnly = isLoading,
+ enabled = !isLoading,
modifier = Modifier
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(focusManager)
@@ -192,9 +185,7 @@ private fun LoginForm(
eventSink(LoginPasswordEvents.SetLogin(sanitized))
}
),
- placeholder = {
- Text(text = stringResource(CommonStrings.common_username))
- },
+ placeholder = stringResource(CommonStrings.common_username),
onValueChange = {
val sanitized = it.sanitize()
loginFieldState = sanitized
@@ -210,10 +201,14 @@ private fun LoginForm(
singleLine = true,
trailingIcon = if (loginFieldState.isNotEmpty()) {
{
- IconButton(onClick = {
+ Box(Modifier.clickable {
loginFieldState = ""
}) {
- Icon(imageVector = CompoundIcons.Close(), contentDescription = stringResource(CommonStrings.action_clear))
+ Icon(
+ imageVector = CompoundIcons.Close(),
+ contentDescription = stringResource(CommonStrings.action_clear),
+ tint = ElementTheme.colors.iconSecondary
+ )
}
}
} else {
@@ -226,9 +221,9 @@ private fun LoginForm(
passwordVisible = false
}
Spacer(Modifier.height(20.dp))
- OutlinedTextField(
+ TextField(
value = passwordFieldState,
- readOnly = isLoading,
+ enabled = !isLoading,
modifier = Modifier
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(focusManager)
@@ -246,18 +241,18 @@ private fun LoginForm(
passwordFieldState = sanitized
eventSink(LoginPasswordEvents.SetPassword(sanitized))
},
- placeholder = {
- Text(text = stringResource(CommonStrings.common_password))
- },
+ placeholder = stringResource(CommonStrings.common_password),
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
val image =
if (passwordVisible) CompoundIcons.VisibilityOn() else CompoundIcons.VisibilityOff()
val description =
if (passwordVisible) stringResource(CommonStrings.a11y_hide_password) else stringResource(CommonStrings.a11y_show_password)
-
- IconButton(onClick = { passwordVisible = !passwordVisible }) {
- Icon(imageVector = image, description)
+ Box(Modifier.clickable { passwordVisible = !passwordVisible }) {
+ Icon(
+ imageVector = image,
+ contentDescription = description,
+ )
}
},
keyboardOptions = KeyboardOptions(
diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt
index 118f3611d0..2bc6f664a3 100644
--- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt
+++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderView.kt
@@ -9,6 +9,7 @@
package io.element.android.features.login.impl.screens.searchaccountprovider
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.consumeWindowInsets
@@ -23,7 +24,6 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
@@ -51,14 +51,12 @@ import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubti
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.Icon
-import io.element.android.libraries.designsystem.theme.components.IconButton
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
-import io.element.android.libraries.designsystem.theme.components.Text
-import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.ui.strings.CommonStrings
@@ -86,10 +84,10 @@ fun SearchAccountProviderView(
) { padding ->
Box(
modifier = Modifier
- .fillMaxSize()
- .imePadding()
- .padding(padding)
- .consumeWindowInsets(padding)
+ .fillMaxSize()
+ .imePadding()
+ .padding(padding)
+ .consumeWindowInsets(padding)
) {
LazyColumn(modifier = Modifier.fillMaxWidth(), state = rememberLazyListState()) {
item {
@@ -104,7 +102,7 @@ fun SearchAccountProviderView(
// TextInput
var userInputState by textFieldState(stateValue = state.userInput)
val focusManager = LocalFocusManager.current
- OutlinedTextField(
+ TextField(
value = userInputState,
// readOnly = isLoading,
modifier = Modifier
@@ -126,7 +124,7 @@ fun SearchAccountProviderView(
singleLine = true,
trailingIcon = if (userInputState.isNotEmpty()) {
{
- IconButton(onClick = {
+ Box(Modifier.clickable {
userInputState = ""
eventSink(SearchAccountProviderEvents.UserInput(""))
}) {
@@ -139,9 +137,7 @@ fun SearchAccountProviderView(
} else {
null
},
- supportingText = {
- Text(text = stringResource(id = R.string.screen_account_provider_form_notice), color = MaterialTheme.colorScheme.secondary)
- }
+ supportingText = stringResource(id = R.string.screen_account_provider_form_notice),
)
}
diff --git a/features/login/impl/src/main/res/values-fi/translations.xml b/features/login/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..37457a9958
--- /dev/null
+++ b/features/login/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,83 @@
+
+
+ "Vaihda palveluntarjoajaa"
+ "Kotipalvelimen osoite"
+ "Kirjoita hakutermi tai osoite."
+ "Hae yritystä, yhteisöä tai yksityistä palvelinta."
+ "Etsi palveluntarjoajaa"
+ "Keskustelusi asuvat täällä — aivan kuten aivan kuten käyttäisit sähköpostipalveluntarjoajaa sähköpostiesi säilyttämiseen."
+ "Olet kirjautumassa sisään %s-palvelimelle"
+ "Keskustelusi asuvat täällä — aivan kuten aivan kuten käyttäisit sähköpostipalveluntarjoajaa sähköpostiesi säilyttämiseen."
+ "Olet luomassa tiliä %s-palvelimelle"
+ "Matrix.org on suuri, ilmainen palvelin julkisessa Matrix-verkossa turvalliseen, hajautettuun viestintään, jota ylläpitää Matrix.org-säätiö."
+ "Muu"
+ "Käytä toista palveluntarjoajaa, kuten omaa yksityistä palvelintasi tai työpaikkaasi."
+ "Vaihda palveluntarjoajaa"
+ "Kotipalvelimeen ei saatu yhteyttä. Varmista, että olet syöttänyt osoitteen oikein. Jos osoite on oikein, ota yhteyttä palvelimesi ylläpitäjään."
+ "Sliding sync ei ole saatavilla well-known tiedostossa olevan ongelman vuoksi:
+%1$s"
+ "Tämä palvelin ei tällä hetkellä tue sliding syncia."
+ "Kotipalvelimen osoite"
+ "Voit yhdistää vain olemassa olevaan palvelimeen, joka tukee sliding syncia. Kotipalvelimesi ylläpitäjän on otettava se käyttöön. %1$s"
+ "Mikä on palvelimesi osoite?"
+ "Valitse palvelimesi"
+ "Luo tili"
+ "Tämä tili on deaktivoitu."
+ "Väärä käyttäjänimi ja/tai salasana"
+ "Tämä ei ole kelvollinen käyttäjätunnus. Odotettu muoto: \'@käyttäjä:kotipalvelin.fi\'"
+ "Tämä palvelin on määritetty käyttämään refresh tokeneja. Näitä ei tueta salasanapohjaisen kirjautumisen kanssa."
+ "Valitsemasi kotipalvelin ei tue salasana- tai OIDC-kirjautumista. Ota yhteyttä palvelimesi ylläpitäjään tai valitse toinen kotipalvelin."
+ "Syötä tietosi"
+ "Matrix on avoin verkko turvallista, hajautettua viestintää varten."
+ "Tervetuloa takaisin!"
+ "Kirjaudu sisään %1$s -palvelimelle"
+ "Muodostetaan turvallista yhteyttä"
+ "Turvallista yhteyttä uuteen laitteeseen ei voitu muodostaa. Olemassa olevat laitteesi ovat edelleen turvassa, eikä sinun tarvitse huolehtia niistä."
+ "Mitä nyt?"
+ "Yritä kirjautua sisään uudelleen QR-koodilla, jos kyseessä oli verkko-ongelma"
+ "Jos kohtaat saman ongelman, kokeile toista wifi-verkkoa tai käytä mobiilidataa wifi-yhteyden sijaan"
+ "Jos tämä ei auta, kirjaudu sisään manuaalisesti"
+ "Yhteys ei ole turvallinen"
+ "Sinua pyydetään antamaan tässä laitteessa näkyvät kaksi numeroa."
+ "Kirjoita alla oleva numero toisella laitteellasi"
+ "Kirjaudu sisään toisella laitteellasi ja yritä sitten uudelleen tai käytä toista laitetta, joka on jo kirjautunut sisään."
+ "Toinen laitteesi ei ole kirjautuneena"
+ "Kirjautuminen peruutettiin toisella laitteella."
+ "Kirjautumispyyntö peruutettu"
+ "Kirjautuminen hylättiin toisella laitteella."
+ "Kirjautuminen hylätty"
+ "Kirjautuminen vanhentui. Yritä uudelleen."
+ "Kirjautumista ei suoritettu ajoissa"
+ "Toinen laitteesi ei tue kirjautumista %s -sovellukseen QR-koodilla.
+
+Yritä kirjautua sisään manuaalisesti tai skannaa QR-koodi toisella laitteella."
+ "QR-koodia ei tueta"
+ "Palveluntarjoajasi ei tue %1$s -sovellusta"
+ "%1$s -sovellusta ei tueta"
+ "Valmis skannaamaan"
+ "Avaa %1$s tietokoneella"
+ "Napsauta avatariasi"
+ "Valitse %1$s"
+ "“Yhdistä uusi laite”"
+ "Skannaa QR-koodi tällä laitteella"
+ "Saatavilla vain, jos palveluntarjoajasi tukee sitä."
+ "Avaa %1$s toisella laitteella saadaksesi QR-koodin"
+ "Käytä toisessa laitteessa näkyvää QR-koodia."
+ "Yritä uudelleen"
+ "Väärä QR-koodi"
+ "Siirry kameran asetuksiin"
+ "Jatkaaksesi sinun on annettava lupa %1$s -sovellukselle käyttää laitteesi kameraa."
+ "Salli lupa kameraan QR-koodin skannaamiseksi"
+ "Skannaa QR-koodi"
+ "Aloita alusta"
+ "Tapahtui odottamaton virhe. Yritä uudelleen."
+ "Odotetaan toista laitettasi"
+ "Palveluntarjoajasi saattaa kysyä seuraavaa koodia kirjautumisen vahvistamiseksi."
+ "Vahvistuskoodisi"
+ "Vaihda palveluntarjoajaa"
+ "Yksityinen palvelin Elementin työntekijöille."
+ "Matrix on avoin verkko turvallista, hajautettua viestintää varten."
+ "Keskustelusi asuvat täällä — aivan kuten aivan kuten käyttäisit sähköpostipalveluntarjoajaa sähköpostiesi säilyttämiseen."
+ "Olet kirjautumassa sisään %1$s-palvelimelle"
+ "Olet luomassa tiliä %1$s-palvelimelle"
+
diff --git a/features/login/impl/src/main/res/values-uk/translations.xml b/features/login/impl/src/main/res/values-uk/translations.xml
index df436a9a69..0fa0be9868 100644
--- a/features/login/impl/src/main/res/values-uk/translations.xml
+++ b/features/login/impl/src/main/res/values-uk/translations.xml
@@ -5,42 +5,43 @@
"Уведіть пошуковий термін або адресу домену."
"Пошук компанії, спільноти або приватного сервера."
"Знайти провайдера облікового запису"
- "Тут будуть зберігатися Ваші розмови - так само, як Ви використовуєте поштову скриньку для зберігання своїх електронних листів."
+ "Тут розміщуватимуться ваші розмови — так само як у поштовій скриньці для зберігання своїх електронних листів."
"Ви збираєтесь увійти в %s"
- "Тут будуть зберігатися Ваші розмови - так само, як Ви використовуєте поштову скриньку для зберігання своїх електронних листів."
+ "Тут розміщуватимуться ваші розмови — так само як у поштовій скриньці для зберігання своїх електронних листів."
"Ви збираєтеся створити обліковий запис на %s"
- "Matrix.org — це великий безплатний сервер у загальнодоступній мережі Matrix для безпечного децентралізованого зв’язку, яким керує Matrix.org Foundation."
+ "Matrix.org — це великий безплатний сервер у загальнодоступній мережі Matrix для безпечного децентралізованого спілкування, яким керує Matrix.org Foundation."
"Інше"
"Використати іншого провайдера облікових записів, наприклад, власний приватний сервер або робочий обліковий запис."
"Змінити провайдера облікового запису"
- "Не вдалося підключитися до цього домашнього сервера. Будь ласка, перевірте, чи правильно Ви ввели URL-адресу домашнього сервера. Якщо URL-адреса правильна, зверніться за додатковою допомогою до адміністратора домашнього сервера."
- "Sliding sync недоступний через проблему у well-known файлі:
+ "Не вдалося під\'єднатися до цього домашнього сервера. Перевірте правильність введеної URL-адреси домашнього сервера. Якщо URL-адреса правильна, зверніться по додаткову допомогу до адміністратора домашнього сервера."
+ "Sliding sync недоступний через проблему у файлі well-known:
%1$s"
"Наразі цей сервер не підтримує sliding sync."
"URL-адреса домашнього сервера"
- "Ви можете підключитися лише до наявного сервера, який підтримує sliding sync. Ваш адміністратор домашнього сервера повинен буде налаштувати його. %1$s"
- "Яка адреса Вашого сервера?"
+ "Ви можете під\'єднатися лише до наявного сервера, який підтримує sliding sync. Адміністратор вашого домашнього сервера повинен буде налаштувати його. %1$s"
+ "Яка адреса вашого сервера?"
"Виберіть свій сервер"
+ "Створити обліковий запис"
"Цей обліковий запис було деактивовано."
"Неправильне ім\'я користувача та/або пароль"
"Це недійсний ідентифікатор користувача. Очікуваний формат: \'@user:homeserver.org\'"
- "Цей сервер налаштований на використання токенів оновлення. Вони не підтримуються при використанні входу на основі пароля."
+ "Цей сервер налаштований на використання оновлюваних токенів. Вони не підтримуються, якщо використовується вхід за допомогою основі пароля."
"Обраний домашній сервер не підтримує вхід за допомогою пароля або OIDC. Зверніться до адміністратора або виберіть інший домашній сервер."
"Введіть свої дані"
"Matrix — це відкрита мережа для безпечної, децентралізованої комунікації."
"З поверненням!"
"Увійти в %1$s"
"Встановлення безпечного з\'єднання"
- "Не вдалося встановити безпечне з\'єднання з новим пристроєм. Ваші існуючі пристрої все ще в безпеці, і вам не потрібно про них турбуватися."
+ "Не вдалося встановити безпечне з\'єднання з новим пристроєм. Ваші наявні пристрої досі в безпеці, і вам не потрібно про них турбуватися."
"Що тепер?"
"Спробуйте увійти ще раз за допомогою QR-коду, якщо це була проблема з мережею"
"Якщо ви зіткнулися з тією ж проблемою, спробуйте іншу мережу Wi-Fi або використовуйте мобільний інтернет замість Wi-Fi"
"Якщо це не спрацює, увійдіть вручну"
- "З\'єднання не є безпечним"
+ "З\'єднання не безпечне"
"Вас попросять ввести дві цифри, показані на цьому пристрої."
"Введіть номер нижче на іншому пристрої"
- "Увійдіть на іншому пристрої та спробуйте ще раз або скористайтеся іншим пристроєм, що вже в обліковому записі."
- "Інший пристрій не ввійшов"
+ "Увійдіть на іншому пристрої та спробуйте ще раз або скористайтеся іншим пристроєм, на якому ви вже ввійшли."
+ "Вхід на іншому пристрої не виконано"
"Вхід було скасовано на іншому пристрої."
"Запит на вхід скасовано"
"Вхід був відхилений на іншому пристрої."
@@ -56,9 +57,10 @@
"Готовий до сканування"
"Відкрийте %1$s на комп\'ютері"
"Натисніть на свою аватарку"
- "Оберіть %1$s"
- "“Підключити новий пристрій”"
- "Відскануйте QR-код цим пристроєм"
+ "Виберіть %1$s"
+ "“Під\'єднати новий пристрій”"
+ "Зіскануйте QR-код цим пристроєм"
+ "Доступно лише в тому випадку, якщо ваш постачальник облікового запису підтримує цю функцію."
"Відкрийте %1$s на іншому пристрої, щоб отримати QR-код"
"Використовуйте QR-код, показаний на іншому пристрої."
"Спробуйте ще раз"
@@ -66,7 +68,7 @@
"Перейти до налаштувань камери"
"Вам потрібно дати дозвіл %1$s на використання камери вашого пристрою, щоб продовжити."
"Надайте доступ до камери, щоб сканувати QR-код"
- "Відскануйте QR-код"
+ "Зіскануйте QR-код"
"Почати спочатку"
"Сталася несподівана помилка. Будь ласка, спробуйте ще раз."
"Чекаємо на ваш інший пристрій"
@@ -75,7 +77,7 @@
"Змінити провайдера облікового запису"
"Приватний сервер для співробітників Element."
"Matrix — це відкрита мережа для безпечної, децентралізованої комунікації."
- "Тут будуть зберігатися Ваші розмови - так само, як Ви використовуєте поштову скриньку для зберігання своїх електронних листів."
+ "Тут розміщуватимуться ваші розмови — так само як у поштовій скриньці для зберігання своїх електронних листів."
"Ви збираєтесь увійти в %1$s"
"Ви збираєтеся створити обліковий запис на %1$s"
diff --git a/features/login/impl/src/main/res/values-zh/translations.xml b/features/login/impl/src/main/res/values-zh/translations.xml
index 2f24aacf69..c23bb10f9f 100644
--- a/features/login/impl/src/main/res/values-zh/translations.xml
+++ b/features/login/impl/src/main/res/values-zh/translations.xml
@@ -1,18 +1,18 @@
- "更改账户提供者"
+ "更改账户提供方"
"服务器地址"
"输入搜索词或域名地址。"
"搜索公司、社区或私人服务器。"
- "查找账户提供者"
- "这是您的对话将进行的地方,就像您使用电子邮件提供商来保存电子邮件一样。"
- "您即将登录%s"
- "这是您的对话将进行的地方,就像您使用电子邮件提供商来保存电子邮件一样。"
+ "寻找账户提供方"
+ "这是您的对话将存在的地方,就像您使用电子邮件提供方来保存电子邮件一样。"
+ "您即将登录 %s"
+ "这是您的对话将存在的地方,就像您使用电子邮件提供方来保存电子邮件一样。"
"您即将在 %s 上创建一个帐户"
"Matrix.org 由 Matrix.org 基金会运营,是用于安全、去中心化的通信的公共 Matrix 网络上的大型免费服务器。"
"其他"
- "使用其他帐户提供者,例如您自己的私人服务器或工作帐户。"
- "更改账户提供者"
+ "使用其他账户提供商,例如您自己的私人服务器或工作账户。"
+ "更改账户提供方"
"我们无法访问此服务器。请检查您输入的服务器网址是否正确。如果 URL 正确,请联系您的服务器管理员寻求进一步帮助。"
"由于 Well Known 文件中的问题,Sliding Sync 不可用:
%1$s"
@@ -21,6 +21,7 @@
"您只能连接到支持 Sliding Sync 的现有服务器。您的服务器管理员需要对其进行配置。%1$s"
"您的服务器地址是什么?"
"选择服务器"
+ "创建账户"
"该账户已被停用。"
"错误的用户名和/或密码"
"这不是合法的用户 ID。期望格式:‘@user:homeserver.org’。"
@@ -51,7 +52,7 @@
尝试手动或使用另一个设备扫描二维码."
"不支持二维码"
- "账户提供者不支持 %1$s."
+ "账户提供方不支持 %1$s."
"不支持 %1$s."
"准备进行扫描"
"在桌面设备上打开 %1$s"
@@ -59,6 +60,7 @@
"选择 %1$s"
"「连接新设备」"
"使用此设备扫描二维码"
+ "仅在您的账户提供方支持时才可用。"
"在另一台设备上打开 %1$s 以获取二维码"
"使用其他设备上显示的二维码。"
"再试一次"
@@ -70,12 +72,12 @@
"重新开始"
"发生了意外错误。请再试一次。"
"等着您的其他设备"
- "您的账户提供商可能会要求您提供以下代码来验证登录。"
+ "您的账户提供方可能会要求您提供以下代码来验证登录。"
"您的验证码"
- "更改账户提供者"
+ "更改账户提供方"
"专为 Element 员工提供的私人服务器。"
"Matrix 是一个用于安全、去中心化通信的开放网络。"
- "这是您的对话将进行的地方,就像您使用电子邮件提供商来保存电子邮件一样。"
+ "这是您的对话将存在的地方,就像您使用电子邮件提供方来保存电子邮件一样。"
"即将登录 %1$s"
"即将在 %1$s 上创建一个账户"
diff --git a/features/logout/impl/src/main/res/values-fi/translations.xml b/features/logout/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..05ec46db68
--- /dev/null
+++ b/features/logout/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,18 @@
+
+
+ "Haluatko varmasti kirjautua ulos?"
+ "Kirjaudu ulos"
+ "Kirjaudu ulos"
+ "Kirjaudutaan ulos…"
+ "Olet kirjautumassa ulos viimeisestä istunnostasi. Jos kirjaudut ulos nyt, menetät pääsyn salattuihin viesteihisi."
+ "Olet poistanut varmuuskopioinnin käytöstä"
+ "Avaimiasi varmuuskopioitiin vielä, kun menit offline-tilaan. Muodosta yhteys uudelleen, jotta avaimesi voidaan varmuuskopioida ennen uloskirjautumista."
+ "Avaimiasi varmuuskopioidaan vielä"
+ "Odota, että tämä on valmis ennen uloskirjautumista."
+ "Avaimiasi varmuuskopioidaan vielä"
+ "Kirjaudu ulos"
+ "Olet kirjautumassa ulos viimeisestä istunnostasi. Jos kirjaudut ulos nyt, menetät pääsyn salattuihin viesteihisi."
+ "Palautus ei ole käytössä"
+ "Olet kirjautumassa ulos viimeisestä istunnostasi. Jos kirjaudut ulos nyt, saatat menettää pääsyn salattuihin viesteihisi."
+ "Oletko tallentanut palautusavaimesi?"
+
diff --git a/features/logout/impl/src/main/res/values-uk/translations.xml b/features/logout/impl/src/main/res/values-uk/translations.xml
index 8e1907e697..7e23189dc6 100644
--- a/features/logout/impl/src/main/res/values-uk/translations.xml
+++ b/features/logout/impl/src/main/res/values-uk/translations.xml
@@ -6,9 +6,9 @@
"Вихід…"
"Ви збираєтеся вийти зі свого останнього сеансу. Якщо ви вийдете зараз, ви втратите доступ до своїх зашифрованих повідомлень."
"Ви вимкнули резервне копіювання"
- "Коли ви вийшли з мережі, резервна копія ваших ключів все ще створювалася. Повторно підключіться, щоб зберегти резервну копію ключів перед виходом з системи."
+ "Коли ви вийшли з мережі, резервна копія ваших ключів все ще створювалася. Повторно під\'єднайтеся, щоб зберегти резервну копію ключів перед виходом."
"Резервне копіювання ваших ключів ще триває"
- "Зачекайте, поки це завершиться, перш ніж вийти."
+ "Дочекайтеся завершення процесу, перш ніж вийти."
"Резервне копіювання ваших ключів ще триває"
"Вийти"
"Ви збираєтеся вийти зі свого останнього сеансу. Якщо ви вийдете зараз, ви втратите доступ до своїх зашифрованих повідомлень."
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 bf76f208e3..9fd823445f 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
@@ -212,7 +212,7 @@ class MessagesNode @AssistedInject constructor(
state = state,
onBackClick = this::navigateUp,
onRoomDetailsClick = this::onRoomDetailsClick,
- onEventClick = this::onEventClick,
+ onEventContentClick = this::onEventClick,
onPreviewAttachments = this::onPreviewAttachments,
onUserDataClick = this::onUserDataClick,
onLinkClick = { url -> onLinkClick(activity, isDark, url, state.timelineState.eventSink) },
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 e5d73fbed6..4351dbcae9 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
@@ -114,7 +114,7 @@ fun MessagesView(
state: MessagesState,
onBackClick: () -> Unit,
onRoomDetailsClick: () -> Unit,
- onEventClick: (event: TimelineItem.Event) -> Boolean,
+ onEventContentClick: (event: TimelineItem.Event) -> Boolean,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
onPreviewAttachments: (ImmutableList) -> Unit,
@@ -142,9 +142,14 @@ fun MessagesView(
// This is needed because the composer is inside an AndroidView that can't be affected by the FocusManager in Compose
val localView = LocalView.current
- fun onMessageClick(event: TimelineItem.Event) {
+ fun hidingKeyboard(block: () -> Unit) {
+ localView.hideKeyboard()
+ block()
+ }
+
+ fun onContentClick(event: TimelineItem.Event) {
Timber.v("onMessageClick= ${event.id}")
- val hideKeyboard = onEventClick(event)
+ val hideKeyboard = onEventContentClick(event)
if (hideKeyboard) {
localView.hideKeyboard()
}
@@ -152,13 +157,14 @@ fun MessagesView(
fun onMessageLongClick(event: TimelineItem.Event) {
Timber.v("OnMessageLongClicked= ${event.id}")
- localView.hideKeyboard()
- state.actionListState.eventSink(
- ActionListEvents.ComputeForMessage(
- event = event,
- userEventPermissions = state.userEventPermissions,
+ hidingKeyboard {
+ state.actionListState.eventSink(
+ ActionListEvents.ComputeForMessage(
+ event = event,
+ userEventPermissions = state.userEventPermissions,
+ )
)
- )
+ }
}
fun onActionSelected(action: TimelineItemAction, event: TimelineItem.Event) {
@@ -189,13 +195,8 @@ fun MessagesView(
roomAvatar = state.roomAvatar.dataOrNull(),
heroes = state.heroes,
roomCallState = state.roomCallState,
- onBackClick = {
- // Since the textfield is now based on an Android view, this is no longer done automatically.
- // We need to hide the keyboard when navigating out of this screen.
- localView.hideKeyboard()
- onBackClick()
- },
- onRoomDetailsClick = onRoomDetailsClick,
+ onBackClick = { hidingKeyboard { onBackClick() } },
+ onRoomDetailsClick = { hidingKeyboard { onRoomDetailsClick() } },
onJoinCallClick = onJoinCallClick,
)
}
@@ -206,9 +207,9 @@ fun MessagesView(
modifier = Modifier
.padding(padding)
.consumeWindowInsets(padding),
- onMessageClick = ::onMessageClick,
+ onContentClick = ::onContentClick,
onMessageLongClick = ::onMessageLongClick,
- onUserDataClick = onUserDataClick,
+ onUserDataClick = { hidingKeyboard { onUserDataClick(it) } },
onLinkClick = onLinkClick,
onReactionClick = ::onEmojiReactionClick,
onReactionLongClick = ::onEmojiReactionLongClick,
@@ -306,7 +307,7 @@ private fun AttachmentStateView(
@Composable
private fun MessagesViewContent(
state: MessagesState,
- onMessageClick: (TimelineItem.Event) -> Unit,
+ onContentClick: (TimelineItem.Event) -> Unit,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
@@ -382,7 +383,7 @@ private fun MessagesViewContent(
timelineProtectionState = state.timelineProtectionState,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
- onMessageClick = onMessageClick,
+ onContentClick = onContentClick,
onMessageLongClick = onMessageLongClick,
onSwipeToReply = onSwipeToReply,
onReactionClick = onReactionClick,
@@ -568,7 +569,7 @@ internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class)
state = state,
onBackClick = {},
onRoomDetailsClick = {},
- onEventClick = { false },
+ onEventContentClick = { false },
onUserDataClick = {},
onLinkClick = {},
onPreviewAttachments = {},
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt
index c34f072c6d..04750b6ad8 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt
@@ -33,7 +33,7 @@ internal fun MessagesViewWithIdentityChangePreview(
),
onBackClick = {},
onRoomDetailsClick = {},
- onEventClick = { false },
+ onEventContentClick = { false },
onUserDataClick = {},
onLinkClick = {},
onPreviewAttachments = {},
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt
index c96e695375..b799de3115 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt
@@ -51,10 +51,12 @@ class ResolveVerifiedUserSendFailurePresenter @Inject constructor(
is ResolveVerifiedUserSendFailureEvents.ComputeForMessage -> {
val sendState = event.messageEvent.localSendState as? LocalEventSendState.Failed.VerifiedUser
val transactionId = event.messageEvent.transactionId
- resolver = if (sendState != null && transactionId != null) {
+ val sendHandle = event.messageEvent.sendhandle
+ resolver = if (sendState != null && transactionId != null && sendHandle != null) {
VerifiedUserSendFailureResolver(
room = room,
transactionId = transactionId,
+ sendHandle = sendHandle,
iterator = VerifiedUserSendFailureIterator.from(sendState)
)
} else {
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/VerifiedUserSendFailureResolver.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/VerifiedUserSendFailureResolver.kt
index be775ed122..f7e68b6cfb 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/VerifiedUserSendFailureResolver.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/VerifiedUserSendFailureResolver.kt
@@ -8,6 +8,7 @@
package io.element.android.features.messages.impl.crypto.sendfailure.resolve
import androidx.compose.runtime.mutableStateOf
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
@@ -22,6 +23,7 @@ import timber.log.Timber
class VerifiedUserSendFailureResolver(
private val room: MatrixRoom,
private val transactionId: TransactionId,
+ private val sendHandle: SendHandle,
private val iterator: VerifiedUserSendFailureIterator,
) {
val currentSendFailure = mutableStateOf(null)
@@ -33,7 +35,7 @@ class VerifiedUserSendFailureResolver(
}
suspend fun resend(): Result {
- return room.retrySendMessage(transactionId)
+ return sendHandle.retry()
.onSuccess {
Timber.d("Succeed to resend message with transactionId: $transactionId")
currentSendFailure.value = null
@@ -46,10 +48,10 @@ class VerifiedUserSendFailureResolver(
suspend fun resolveAndResend(): Result {
return when (val failure = currentSendFailure.value) {
is LocalEventSendState.Failed.VerifiedUserHasUnsignedDevice -> {
- room.ignoreDeviceTrustAndResend(failure.devices, transactionId)
+ room.ignoreDeviceTrustAndResend(failure.devices, sendHandle)
}
is LocalEventSendState.Failed.VerifiedUserChangedIdentity -> {
- room.withdrawVerificationAndResend(failure.users, transactionId)
+ room.withdrawVerificationAndResend(failure.users, sendHandle)
}
else -> {
Result.failure(IllegalStateException("Unknown send failure type"))
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt
index f4a3247cba..35a0a1e893 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListView.kt
@@ -216,7 +216,7 @@ private fun PinnedMessagesListLoaded(
focusedEventId = null,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
- onClick = onEventClick,
+ onContentClick = onEventClick,
onLongClick = ::onMessageLongClick,
inReplyToClick = {},
onReactionClick = { _, _ -> },
@@ -230,6 +230,7 @@ private fun PinnedMessagesListLoaded(
TimelineItemEventContentViewWrapper(
event = event,
timelineProtectionState = state.timelineProtectionState,
+ onContentClick = { onEventClick(event) },
onLinkClick = onLinkClick,
modifier = contentModifier,
onContentLayoutChange = onContentLayoutChange
@@ -244,6 +245,7 @@ private fun PinnedMessagesListLoaded(
private fun TimelineItemEventContentViewWrapper(
event: TimelineItem.Event,
timelineProtectionState: TimelineProtectionState,
+ onContentClick: () -> Unit,
onLinkClick: (String) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
@@ -258,10 +260,12 @@ private fun TimelineItemEventContentViewWrapper(
TimelineItemEventContentView(
content = event.content,
hideMediaContent = timelineProtectionState.hideMediaContent(event.eventId),
- onShowClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onShowContentClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
onLinkClick = onLinkClick,
eventSink = { },
modifier = modifier,
+ onContentClick = onContentClick,
+ onLongClick = null,
onContentLayoutChange = onContentLayoutChange
)
}
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 3ec347a5f0..38e441c26a 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
@@ -27,7 +27,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
@@ -39,9 +38,9 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Button
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Scaffold
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.ui.strings.CommonStrings
@@ -89,21 +88,16 @@ fun ReportMessageView(
) {
Spacer(modifier = Modifier.height(20.dp))
- OutlinedTextField(
+ TextField(
value = state.reason,
onValueChange = { state.eventSink(ReportMessageEvents.UpdateReason(it)) },
- placeholder = { Text(stringResource(R.string.screen_report_content_hint)) },
+ placeholder = stringResource(R.string.screen_report_content_hint),
+ minLines = 3,
enabled = !isSending,
modifier = Modifier
.fillMaxWidth()
- .heightIn(min = 90.dp)
- )
- Text(
- text = stringResource(R.string.screen_report_content_explanation),
- style = ElementTheme.typography.fontBodySmRegular,
- color = MaterialTheme.colorScheme.secondary,
- textAlign = TextAlign.Start,
- modifier = Modifier.padding(top = 4.dp, bottom = 24.dp, start = 16.dp, end = 16.dp)
+ .heightIn(min = 90.dp),
+ supportingText = stringResource(R.string.screen_report_content_explanation),
)
Row(
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt
index 4d7677560e..bbbd458c7e 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt
@@ -169,6 +169,7 @@ internal fun aTimelineItemEvent(
origin = null,
timelineItemDebugInfoProvider = { debugInfo },
messageShieldProvider = { messageShield },
+ sendHandleProvider = { null }
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt
index f0e976e368..6e34bba9e1 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt
@@ -76,7 +76,7 @@ fun TimelineView(
timelineProtectionState: TimelineProtectionState,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
- onMessageClick: (TimelineItem.Event) -> Unit,
+ onContentClick: (TimelineItem.Event) -> Unit,
onMessageLongClick: (TimelineItem.Event) -> Unit,
onSwipeToReply: (TimelineItem.Event) -> Unit,
onReactionClick: (emoji: String, TimelineItem.Event) -> Unit,
@@ -141,7 +141,7 @@ fun TimelineView(
focusedEventId = state.focusedEventId,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
- onClick = onMessageClick,
+ onContentClick = onContentClick,
onLongClick = onMessageLongClick,
inReplyToClick = ::inReplyToClick,
onReactionClick = onReactionClick,
@@ -322,7 +322,7 @@ internal fun TimelineViewPreview(
timelineProtectionState = aTimelineProtectionState(),
onUserDataClick = {},
onLinkClick = {},
- onMessageClick = {},
+ onContentClick = {},
onMessageLongClick = {},
onSwipeToReply = {},
onReactionClick = { _, _ -> },
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewMessageShieldPreview.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewMessageShieldPreview.kt
index 99f69675fa..462e74137a 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewMessageShieldPreview.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewMessageShieldPreview.kt
@@ -41,7 +41,7 @@ internal fun TimelineViewMessageShieldPreview() = ElementPreview {
timelineProtectionState = aTimelineProtectionState(),
onUserDataClick = {},
onLinkClick = {},
- onMessageClick = {},
+ onContentClick = {},
onMessageLongClick = {},
onSwipeToReply = {},
onReactionClick = { _, _ -> },
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt
index 1fa5e7f9a1..02ef734ccc 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt
@@ -30,7 +30,7 @@ internal fun ATimelineItemEventRow(
timelineProtectionState = timelineProtectionState,
isLastOutgoingMessage = isLastOutgoingMessage,
isHighlighted = isHighlighted,
- onClick = {},
+ onEventClick = {},
onLongClick = {},
onLinkClick = {},
onUserDataClick = {},
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt
index 2f0165cd7b..c358dcdd0a 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt
@@ -114,7 +114,7 @@ fun TimelineItemEventRow(
renderReadReceipts: Boolean,
isLastOutgoingMessage: Boolean,
isHighlighted: Boolean,
- onClick: () -> Unit,
+ onEventClick: () -> Unit,
onLongClick: () -> Unit,
onLinkClick: (String) -> Unit,
onUserDataClick: (UserId) -> Unit,
@@ -127,10 +127,15 @@ fun TimelineItemEventRow(
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
modifier: Modifier = Modifier,
eventContentView: @Composable (Modifier, (ContentAvoidingLayoutData) -> Unit) -> Unit = { contentModifier, onContentLayoutChange ->
+ // Only pass down a custom clickable lambda if the content can be clicked separately
+ val onContentClick = onEventClick.takeUnless { event.isWholeContentClickable }
+
TimelineItemEventContentView(
content = event.content,
hideMediaContent = timelineProtectionState.hideMediaContent(event.eventId),
- onShowClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onContentClick = onContentClick,
+ onLongClick = onLongClick,
+ onShowContentClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
onLinkClick = onLinkClick,
eventSink = eventSink,
modifier = contentModifier,
@@ -173,7 +178,7 @@ fun TimelineItemEventRow(
isHighlighted = isHighlighted,
timelineRoomInfo = timelineRoomInfo,
interactionSource = interactionSource,
- onClick = onClick,
+ onContentClick = onEventClick,
onLongClick = onLongClick,
inReplyToClick = ::inReplyToClick,
onUserDataClick = ::onUserDataClick,
@@ -207,7 +212,7 @@ fun TimelineItemEventRow(
isHighlighted = isHighlighted,
timelineRoomInfo = timelineRoomInfo,
interactionSource = interactionSource,
- onClick = onClick,
+ onContentClick = onEventClick,
onLongClick = onLongClick,
inReplyToClick = ::inReplyToClick,
onUserDataClick = ::onUserDataClick,
@@ -263,7 +268,7 @@ private fun TimelineItemEventRowContent(
isHighlighted: Boolean,
timelineRoomInfo: TimelineRoomInfo,
interactionSource: MutableInteractionSource,
- onClick: () -> Unit,
+ onContentClick: () -> Unit,
onLongClick: () -> Unit,
inReplyToClick: () -> Unit,
onUserDataClick: () -> Unit,
@@ -340,7 +345,7 @@ private fun TimelineItemEventRowContent(
},
state = bubbleState,
interactionSource = interactionSource,
- onClick = onClick,
+ onClick = onContentClick,
onLongClick = onLongClick,
) {
MessageEventBubbleContent(
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt
index d280efa62c..d65c9186aa 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt
@@ -57,10 +57,12 @@ fun TimelineItemGroupedEventsRow(
TimelineItemEventContentView(
content = event.content,
hideMediaContent = timelineProtectionState.hideMediaContent(event.eventId),
- onShowClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onShowContentClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
onLinkClick = onLinkClick,
eventSink = eventSink,
modifier = contentModifier,
+ onContentClick = null,
+ onLongClick = null,
onContentLayoutChange = onContentLayoutChange
)
},
@@ -121,10 +123,12 @@ private fun TimelineItemGroupedEventsRowContent(
TimelineItemEventContentView(
content = event.content,
hideMediaContent = timelineProtectionState.hideMediaContent(event.eventId),
- onShowClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onShowContentClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
onLinkClick = onLinkClick,
eventSink = eventSink,
modifier = contentModifier,
+ onContentClick = null,
+ onLongClick = null,
onContentLayoutChange = onContentLayoutChange
)
},
@@ -152,7 +156,7 @@ private fun TimelineItemGroupedEventsRowContent(
focusedEventId = focusedEventId,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
- onClick = onClick,
+ onContentClick = onClick,
onLongClick = onLongClick,
inReplyToClick = inReplyToClick,
onReactionClick = onReactionClick,
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 13c247645b..859c9f3ccf 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
@@ -28,7 +28,6 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateContent
import io.element.android.features.messages.impl.timeline.protection.TimelineProtectionEvent
import io.element.android.features.messages.impl.timeline.protection.TimelineProtectionState
-import io.element.android.features.messages.impl.timeline.protection.mustBeProtected
import io.element.android.libraries.designsystem.text.toPx
import io.element.android.libraries.designsystem.theme.highlightedMessageBackgroundColor
import io.element.android.libraries.matrix.api.core.EventId
@@ -44,7 +43,7 @@ internal fun TimelineItemRow(
focusedEventId: EventId?,
onUserDataClick: (UserId) -> Unit,
onLinkClick: (String) -> Unit,
- onClick: (TimelineItem.Event) -> Unit,
+ onContentClick: (TimelineItem.Event) -> Unit,
onLongClick: (TimelineItem.Event) -> Unit,
inReplyToClick: (EventId) -> Unit,
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
@@ -60,7 +59,9 @@ internal fun TimelineItemRow(
TimelineItemEventContentView(
content = event.content,
hideMediaContent = timelineProtectionState.hideMediaContent(event.eventId),
- onShowClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onShowContentClick = { timelineProtectionState.eventSink(TimelineProtectionEvent.ShowContent(event.eventId)) },
+ onContentClick = { onContentClick(event) },
+ onLongClick = { onLongClick(event) },
onLinkClick = onLinkClick,
eventSink = eventSink,
modifier = contentModifier,
@@ -95,7 +96,7 @@ internal fun TimelineItemRow(
renderReadReceipts = renderReadReceipts,
isLastOutgoingMessage = isLastOutgoingMessage,
isHighlighted = timelineItem.isEvent(focusedEventId),
- onClick = { onClick(timelineItem) },
+ onClick = { onContentClick(timelineItem) },
onReadReceiptsClick = onReadReceiptClick,
onLongClick = { onLongClick(timelineItem) },
eventSink = eventSink,
@@ -118,11 +119,7 @@ internal fun TimelineItemRow(
timelineProtectionState = timelineProtectionState,
isLastOutgoingMessage = isLastOutgoingMessage,
isHighlighted = timelineItem.isEvent(focusedEventId),
- onClick = if (timelineProtectionState.hideMediaContent(timelineItem.eventId) && timelineItem.mustBeProtected()) {
- {}
- } else {
- { onClick(timelineItem) }
- },
+ onEventClick = { onContentClick(timelineItem) },
onLongClick = { onLongClick(timelineItem) },
onLinkClick = onLinkClick,
onUserDataClick = onUserDataClick,
@@ -148,7 +145,7 @@ internal fun TimelineItemRow(
renderReadReceipts = renderReadReceipts,
isLastOutgoingMessage = isLastOutgoingMessage,
focusedEventId = focusedEventId,
- onClick = onClick,
+ onClick = onContentClick,
onLongClick = onLongClick,
inReplyToClick = inReplyToClick,
onUserDataClick = onUserDataClick,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt
index f023a63c35..d523152977 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemStateEventRow.kt
@@ -72,8 +72,10 @@ fun TimelineItemStateEventRow(
content = event.content,
onLinkClick = {},
hideMediaContent = false,
- onShowClick = {},
+ onShowContentClick = {},
eventSink = eventSink,
+ onContentClick = null,
+ onLongClick = null,
modifier = Modifier.defaultTimelineContentPadding()
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEventContentView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEventContentView.kt
index b24a5ca0be..35a8cda293 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEventContentView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemEventContentView.kt
@@ -36,7 +36,9 @@ import io.element.android.libraries.architecture.Presenter
fun TimelineItemEventContentView(
content: TimelineItemEventContent,
hideMediaContent: Boolean,
- onShowClick: () -> Unit,
+ onContentClick: (() -> Unit)?,
+ onLongClick: (() -> Unit)?,
+ onShowContentClick: () -> Unit,
onLinkClick: (url: String) -> Unit,
eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit,
modifier: Modifier = Modifier,
@@ -72,20 +74,28 @@ fun TimelineItemEventContentView(
is TimelineItemImageContent -> TimelineItemImageView(
content = content,
hideMediaContent = hideMediaContent,
- onShowClick = onShowClick,
+ onContentClick = onContentClick,
+ onLongClick = onLongClick,
+ onShowContentClick = onShowContentClick,
+ onLinkClick = onLinkClick,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier,
)
is TimelineItemStickerContent -> TimelineItemStickerView(
content = content,
hideMediaContent = hideMediaContent,
- onShowClick = onShowClick,
+ onContentClick = onContentClick,
+ onLongClick = onLongClick,
+ onShowClick = onShowContentClick,
modifier = modifier,
)
is TimelineItemVideoContent -> TimelineItemVideoView(
content = content,
hideMediaContent = hideMediaContent,
- onShowClick = onShowClick,
+ onContentClick = onContentClick,
+ onLongClick = onLongClick,
+ onShowContentClick = onShowContentClick,
+ onLinkClick = onLinkClick,
onContentLayoutChange = onContentLayoutChange,
modifier = modifier
)
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt
index 63bbac7f6f..84b7026142 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt
@@ -8,7 +8,9 @@
package io.element.android.features.messages.impl.timeline.components.event
import android.text.SpannedString
+import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
+import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
@@ -50,16 +52,19 @@ import io.element.android.features.messages.impl.timeline.protection.ProtectedVi
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
-import io.element.android.libraries.matrix.api.timeline.item.event.MessageFormat
import io.element.android.libraries.textcomposer.ElementRichTextEditorStyle
import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.wysiwyg.compose.EditorStyledText
+@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TimelineItemImageView(
content: TimelineItemImageContent,
hideMediaContent: Boolean,
- onShowClick: () -> Unit,
+ onContentClick: (() -> Unit)?,
+ onLongClick: (() -> Unit)?,
+ onLinkClick: (String) -> Unit,
+ onShowContentClick: () -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
@@ -78,13 +83,14 @@ fun TimelineItemImageView(
) {
ProtectedView(
hideContent = hideMediaContent,
- onShowClick = onShowClick,
+ onShowClick = onShowContentClick,
) {
var isLoaded by remember { mutableStateOf(false) }
AsyncImage(
modifier = Modifier
.fillMaxWidth()
- .then(if (isLoaded) Modifier.background(Color.White) else Modifier),
+ .then(if (isLoaded) Modifier.background(Color.White) else Modifier)
+ .then(if (onContentClick != null) Modifier.combinedClickable(onClick = onContentClick, onLongClick = onLongClick) else Modifier),
model = content.thumbnailMediaRequestData,
contentScale = ContentScale.Fit,
alignment = Alignment.Center,
@@ -99,9 +105,7 @@ fun TimelineItemImageView(
val caption = if (LocalInspectionMode.current) {
SpannedString(content.caption)
} else {
- content.formattedCaption?.body
- ?.takeIf { content.formattedCaption.format == MessageFormat.HTML }
- ?: SpannedString(content.caption)
+ content.formattedCaption ?: SpannedString(content.caption)
}
CompositionLocalProvider(
LocalContentColor provides ElementTheme.colors.textPrimary,
@@ -114,6 +118,7 @@ fun TimelineItemImageView(
.widthIn(min = MIN_HEIGHT_IN_DP.dp * aspectRatio, max = MAX_HEIGHT_IN_DP.dp * aspectRatio),
text = caption,
style = ElementRichTextEditorStyle.textStyle(),
+ onLinkClickedListener = onLinkClick,
releaseOnDetach = false,
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChange = onContentLayoutChange),
)
@@ -128,7 +133,10 @@ internal fun TimelineItemImageViewPreview(@PreviewParameter(TimelineItemImageCon
TimelineItemImageView(
content = content,
hideMediaContent = false,
- onShowClick = {},
+ onShowContentClick = {},
+ onContentClick = {},
+ onLongClick = {},
+ onLinkClick = {},
onContentLayoutChange = {},
)
}
@@ -139,7 +147,10 @@ internal fun TimelineItemImageViewHideMediaContentPreview() = ElementPreview {
TimelineItemImageView(
content = aTimelineItemImageContent(),
hideMediaContent = true,
- onShowClick = {},
+ onShowContentClick = {},
+ onContentClick = {},
+ onLongClick = {},
+ onLinkClick = {},
onContentLayoutChange = {},
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLegacyCallInviteView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLegacyCallInviteView.kt
index a59741597b..74f27e5327 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLegacyCallInviteView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLegacyCallInviteView.kt
@@ -7,24 +7,21 @@
package io.element.android.features.messages.impl.timeline.components.event
-import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
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
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
+import io.element.android.features.messages.impl.R
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text
-import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun TimelineItemLegacyCallInviteView(
@@ -32,20 +29,18 @@ fun TimelineItemLegacyCallInviteView(
) {
Row(
modifier = modifier,
- horizontalArrangement = Arrangement.Center,
- verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = CompoundIcons.VoiceCall(),
contentDescription = null,
- tint = MaterialTheme.colorScheme.secondary,
+ tint = ElementTheme.colors.iconSecondary,
)
Spacer(modifier = Modifier.width(8.dp))
Text(
- color = MaterialTheme.colorScheme.secondary,
+ color = ElementTheme.colors.textSecondary,
style = ElementTheme.typography.fontBodyMdRegular,
- text = stringResource(CommonStrings.common_call_invite),
- textAlign = TextAlign.Center,
+ text = stringResource(R.string.screen_room_timeline_legacy_call),
+ textAlign = TextAlign.Start,
)
}
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLocationView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLocationView.kt
index 91cfcff1d8..964f3ecb18 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLocationView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemLocationView.kt
@@ -51,5 +51,7 @@ fun TimelineItemLocationView(
@Composable
internal fun TimelineItemLocationViewPreview(@PreviewParameter(TimelineItemLocationContentProvider::class) content: TimelineItemLocationContent) =
ElementPreview {
- TimelineItemLocationView(content)
+ TimelineItemLocationView(
+ content = content,
+ )
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt
index 0574843dba..9037d0dffa 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt
@@ -7,7 +7,9 @@
package io.element.android.features.messages.impl.timeline.components.event
+import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
+import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
@@ -36,10 +38,13 @@ import io.element.android.libraries.ui.strings.CommonStrings
private const val STICKER_SIZE_IN_DP = 128
+@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TimelineItemStickerView(
content: TimelineItemStickerContent,
hideMediaContent: Boolean,
+ onContentClick: (() -> Unit)?,
+ onLongClick: (() -> Unit)?,
onShowClick: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -61,7 +66,8 @@ fun TimelineItemStickerView(
AsyncImage(
modifier = Modifier
.fillMaxSize()
- .then(if (isLoaded) Modifier.background(Color.White) else Modifier),
+ .then(if (isLoaded) Modifier.background(Color.White) else Modifier)
+ .then(if (onContentClick != null) Modifier.combinedClickable(onClick = onContentClick, onLongClick = onLongClick) else Modifier),
model = MediaRequestData(
source = content.preferredMediaSource,
kind = MediaRequestData.Kind.File(
@@ -85,6 +91,8 @@ internal fun TimelineItemStickerViewPreview(@PreviewParameter(TimelineItemSticke
TimelineItemStickerView(
content = content,
hideMediaContent = false,
+ onContentClick = {},
+ onLongClick = {},
onShowClick = {},
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVideoView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVideoView.kt
index 64e6d00d71..afd45b171a 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVideoView.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVideoView.kt
@@ -8,8 +8,10 @@
package io.element.android.features.messages.impl.timeline.components.event
import android.text.SpannedString
+import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
+import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@@ -56,7 +58,6 @@ import io.element.android.libraries.designsystem.components.blurhash.blurHashBac
import io.element.android.libraries.designsystem.modifiers.roundedBackground
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
-import io.element.android.libraries.matrix.api.timeline.item.event.MessageFormat
import io.element.android.libraries.matrix.ui.media.MAX_THUMBNAIL_HEIGHT
import io.element.android.libraries.matrix.ui.media.MAX_THUMBNAIL_WIDTH
import io.element.android.libraries.matrix.ui.media.MediaRequestData
@@ -64,11 +65,15 @@ import io.element.android.libraries.textcomposer.ElementRichTextEditorStyle
import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.wysiwyg.compose.EditorStyledText
+@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TimelineItemVideoView(
content: TimelineItemVideoContent,
hideMediaContent: Boolean,
- onShowClick: () -> Unit,
+ onContentClick: (() -> Unit)?,
+ onLongClick: (() -> Unit)?,
+ onShowContentClick: () -> Unit,
+ onLinkClick: (String) -> Unit,
onContentLayoutChange: (ContentAvoidingLayoutData) -> Unit,
modifier: Modifier = Modifier,
) {
@@ -90,13 +95,14 @@ fun TimelineItemVideoView(
) {
ProtectedView(
hideContent = hideMediaContent,
- onShowClick = onShowClick,
+ onShowClick = onShowContentClick,
) {
var isLoaded by remember { mutableStateOf(false) }
AsyncImage(
modifier = Modifier
.fillMaxWidth()
- .then(if (isLoaded) Modifier.background(Color.White) else Modifier),
+ .then(if (isLoaded) Modifier.background(Color.White) else Modifier)
+ .then(if (onContentClick != null) Modifier.combinedClickable(onClick = onContentClick, onLongClick = onLongClick) else Modifier),
model = MediaRequestData(
source = content.thumbnailSource,
kind = MediaRequestData.Kind.Thumbnail(
@@ -128,9 +134,7 @@ fun TimelineItemVideoView(
val caption = if (LocalInspectionMode.current) {
SpannedString(content.caption)
} else {
- content.formattedCaption?.body
- ?.takeIf { content.formattedCaption.format == MessageFormat.HTML }
- ?: SpannedString(content.caption)
+ content.formattedCaption ?: SpannedString(content.caption)
}
CompositionLocalProvider(
LocalContentColor provides ElementTheme.colors.textPrimary,
@@ -142,6 +146,7 @@ fun TimelineItemVideoView(
.padding(horizontal = 4.dp) // This is (12.dp - 8.dp) contentPadding from CommonLayout
.widthIn(min = MIN_HEIGHT_IN_DP.dp * aspectRatio, max = MAX_HEIGHT_IN_DP.dp * aspectRatio),
text = caption,
+ onLinkClickedListener = onLinkClick,
style = ElementRichTextEditorStyle.textStyle(),
releaseOnDetach = false,
onTextLayout = ContentAvoidingLayout.measureLegacyLastTextLine(onContentLayoutChange = onContentLayoutChange),
@@ -157,7 +162,10 @@ internal fun TimelineItemVideoViewPreview(@PreviewParameter(TimelineItemVideoCon
TimelineItemVideoView(
content = content,
hideMediaContent = false,
- onShowClick = {},
+ onShowContentClick = {},
+ onContentClick = {},
+ onLongClick = {},
+ onLinkClick = {},
onContentLayoutChange = {},
)
}
@@ -168,7 +176,10 @@ internal fun TimelineItemVideoViewHideMediaContentPreview() = ElementPreview {
TimelineItemVideoView(
content = aTimelineItemVideoContent(),
hideMediaContent = true,
- onShowClick = {},
+ onShowContentClick = {},
+ onContentClick = {},
+ onLongClick = {},
+ onLinkClick = {},
onContentLayoutChange = {},
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt
index 001d40b254..ff5ca57c11 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt
@@ -86,7 +86,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemImageContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
mediaSource = messageType.source,
thumbnailSource = messageType.info?.thumbnailSource,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -105,7 +105,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemStickerContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
mediaSource = messageType.source,
thumbnailSource = messageType.info?.thumbnailSource,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -142,7 +142,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemVideoContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
thumbnailSource = messageType.info?.thumbnailSource,
videoSource = messageType.source,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -161,7 +161,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemAudioContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
mediaSource = messageType.source,
duration = messageType.info?.duration ?: Duration.ZERO,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -176,7 +176,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
eventId = eventId,
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
mediaSource = messageType.source,
duration = messageType.info?.duration ?: Duration.ZERO,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -187,7 +187,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemAudioContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
mediaSource = messageType.source,
duration = messageType.info?.duration ?: Duration.ZERO,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
@@ -202,7 +202,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemFileContent(
filename = messageType.filename,
caption = messageType.caption?.trimEnd(),
- formattedCaption = messageType.formattedCaption,
+ formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(),
thumbnailSource = messageType.info?.thumbnailSource,
fileSource = messageType.source,
mimeType = messageType.info?.mimetype ?: MimeTypes.fromFileExtension(fileExtension),
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt
index 21004fb4ab..d94ca9013a 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt
@@ -88,6 +88,7 @@ class TimelineItemEventFactory @AssistedInject constructor(
origin = currentTimelineItem.event.origin,
timelineItemDebugInfoProvider = currentTimelineItem.event.timelineItemDebugInfoProvider,
messageShieldProvider = currentTimelineItem.event.messageShieldProvider,
+ sendHandleProvider = currentTimelineItem.event.sendHandleProvider,
)
}
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt
index dcf0e16aa8..0a392aac6a 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt
@@ -9,11 +9,14 @@ package io.element.android.features.messages.impl.timeline.model
import androidx.compose.runtime.Immutable
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent
+import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent
+import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.matrix.api.core.EventId
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.matrix.api.core.UserId
@@ -23,6 +26,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSen
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShieldProvider
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
+import io.element.android.libraries.matrix.api.timeline.item.event.SendHandleProvider
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemDebugInfoProvider
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
@@ -80,6 +84,7 @@ sealed interface TimelineItem {
val origin: TimelineItemEventOrigin?,
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
val messageShieldProvider: MessageShieldProvider,
+ val sendHandleProvider: SendHandleProvider,
) : TimelineItem {
val showSenderInformation = groupPosition.isNew() && !isMine
@@ -93,6 +98,17 @@ sealed interface TimelineItem {
val isRemote = eventId != null
+ /** Whether a click on any part of the event bubble should trigger the 'onContentClick' callback.
+ *
+ * This is `true` for all events except for visual media events with a caption or formatted caption.
+ */
+ val isWholeContentClickable = when (content) {
+ is TimelineItemStickerContent -> content.formattedCaption == null && content.caption == null
+ is TimelineItemImageContent -> content.formattedCaption == null && content.caption == null
+ is TimelineItemVideoContent -> content.formattedCaption == null && content.caption == null
+ else -> true
+ }
+
val eventOrTransactionId: EventOrTransactionId
get() = EventOrTransactionId.from(eventId = eventId, transactionId = transactionId)
@@ -101,6 +117,8 @@ sealed interface TimelineItem {
val debugInfo: TimelineItemDebugInfo
get() = timelineItemDebugInfoProvider()
+
+ val sendhandle: SendHandle? get() = sendHandleProvider()
}
@Immutable
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt
index fa2957b860..0ecf45ec55 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt
@@ -8,14 +8,13 @@
package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
import io.element.android.libraries.mediaviewer.api.helper.formatFileExtensionAndSize
import kotlin.time.Duration
data class TimelineItemAudioContent(
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val duration: Duration,
val mediaSource: MediaSource,
val mimeType: String,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt
index 10204a75d8..fafadcbf79 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt
@@ -8,7 +8,6 @@
package io.element.android.features.messages.impl.timeline.model.event
import androidx.compose.runtime.Immutable
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
@Immutable
sealed interface TimelineItemEventContent {
@@ -19,7 +18,7 @@ sealed interface TimelineItemEventContent {
sealed interface TimelineItemEventContentWithAttachment : TimelineItemEventContent {
val filename: String
val caption: String?
- val formattedCaption: FormattedBody?
+ val formattedCaption: CharSequence?
val bestDescription: String
get() = caption ?: filename
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt
index f11325727c..b7007c8bbc 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt
@@ -8,13 +8,12 @@
package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
import io.element.android.libraries.mediaviewer.api.helper.formatFileExtensionAndSize
data class TimelineItemFileContent(
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val fileSource: MediaSource,
val thumbnailSource: MediaSource?,
val formattedFileSize: String,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt
index e6e4bffb9b..b13c7a4e37 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt
@@ -9,7 +9,6 @@ package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAnimatedImage
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
import io.element.android.libraries.matrix.ui.media.MAX_THUMBNAIL_HEIGHT
import io.element.android.libraries.matrix.ui.media.MAX_THUMBNAIL_WIDTH
import io.element.android.libraries.matrix.ui.media.MediaRequestData
@@ -17,7 +16,7 @@ import io.element.android.libraries.matrix.ui.media.MediaRequestData
data class TimelineItemImageContent(
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val mediaSource: MediaSource,
val thumbnailSource: MediaSource?,
val formattedFileSize: String,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt
index 3476d97e2f..06886307ae 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt
@@ -8,12 +8,11 @@
package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
data class TimelineItemStickerContent(
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val mediaSource: MediaSource,
val thumbnailSource: MediaSource?,
val formattedFileSize: String,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt
index 5c0e601708..486a71b5d4 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt
@@ -8,13 +8,12 @@
package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
import kotlin.time.Duration
data class TimelineItemVideoContent(
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val duration: Duration,
val videoSource: MediaSource,
val thumbnailSource: MediaSource?,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt
index 853cc01045..ebeabef715 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt
@@ -9,7 +9,6 @@ package io.element.android.features.messages.impl.timeline.model.event
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.media.MediaSource
-import io.element.android.libraries.matrix.api.timeline.item.event.FormattedBody
import kotlinx.collections.immutable.ImmutableList
import kotlin.time.Duration
@@ -17,7 +16,7 @@ data class TimelineItemVoiceContent(
val eventId: EventId?,
override val filename: String,
override val caption: String?,
- override val formattedCaption: FormattedBody?,
+ override val formattedCaption: CharSequence?,
val duration: Duration,
val mediaSource: MediaSource,
val mimeType: String,
diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt
index f39645088d..595987be35 100644
--- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt
+++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt
@@ -56,7 +56,7 @@ class DefaultMessageSummaryFormatter @Inject constructor(
is TimelineItemVideoContent -> context.getString(CommonStrings.common_video)
is TimelineItemFileContent -> context.getString(CommonStrings.common_file)
is TimelineItemAudioContent -> context.getString(CommonStrings.common_audio)
- is TimelineItemLegacyCallInviteContent -> context.getString(CommonStrings.common_call_invite)
+ is TimelineItemLegacyCallInviteContent -> context.getString(CommonStrings.common_unsupported_call)
is TimelineItemCallNotifyContent -> context.getString(CommonStrings.common_call_started)
}.take(MAX_SAFE_LENGTH)
}
diff --git a/features/messages/impl/src/main/res/values-cs/translations.xml b/features/messages/impl/src/main/res/values-cs/translations.xml
index 3ef8438a08..af33e7376d 100644
--- a/features/messages/impl/src/main/res/values-cs/translations.xml
+++ b/features/messages/impl/src/main/res/values-cs/translations.xml
@@ -31,6 +31,7 @@
"Přidat emoji"
"Toto je začátek %1$s."
"Toto je začátek této konverzace."
+ "Nepodporované volání. Zeptejte se, zda volající může používat novou aplikaci Element X."
"Zobrazit méně"
"Zpráva zkopírována"
"Nemáte oprávnění zveřejňovat příspěvky v této místnosti"
diff --git a/features/messages/impl/src/main/res/values-et/translations.xml b/features/messages/impl/src/main/res/values-et/translations.xml
index 516ce75595..13a187cedc 100644
--- a/features/messages/impl/src/main/res/values-et/translations.xml
+++ b/features/messages/impl/src/main/res/values-et/translations.xml
@@ -31,6 +31,7 @@
"Lisa emotikon"
"See on %1$s jututoa algus."
"See on antud vestluse algus."
+ "Kõne pole nende rakenduste vahel toetatud. Palun küsi teiselt osapoolelt, kas ta oleks nõus kasutama Element X rakendust."
"Näita vähem"
"Sõnum on kopeeritud"
"Sul pole õigusi siia jututuppa kirjutada"
diff --git a/features/messages/impl/src/main/res/values-fi/translations.xml b/features/messages/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..c5353b6cf8
--- /dev/null
+++ b/features/messages/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,53 @@
+
+
+ "Aktiviteetit"
+ "Liput"
+ "Ruoka ja juoma"
+ "Eläimet ja luonto"
+ "Esineet"
+ "Hymiöt ja ihmiset"
+ "Matkustaminen ja paikat"
+ "Symbolit"
+ "Estä käyttäjä"
+ "Valitse tämä, jos haluat piilottaa kaikki nykyiset ja tulevat viestit tältä käyttäjältä"
+ "Tämä viesti ilmoitetaan kotipalvelimesi ylläpitäjälle. Ylläpitäjä ei pysty lukemaan salattuja viestejä."
+ "Syy tämän sisällön ilmoittamiseen"
+ "Kamera"
+ "Ota kuva"
+ "Nauhoita video"
+ "Liite"
+ "Kuva- ja videokirjasto"
+ "Sijainti"
+ "Kysely"
+ "Tekstin muotoilu"
+ "Viestihistoria ei ole tällä hetkellä saatavilla"
+ "Viestihistoria ei ole käytettävissä tässä huoneessa. Vahvista tämä laite nähdäksesi viestihistoriasi."
+ "Haluatko kutsua heidät takaisin?"
+ "Olet yksin tässä keskustelussa"
+ "Ilmoita koko huoneelle"
+ "Kaikki"
+ "Lähetä uudelleen"
+ "Viestisi lähettäminen epäonnistui"
+ "Lisää emoji"
+ "Tämä on huoneen %1$s alku."
+ "Tämä on tämän keskustelun alku."
+ "Näytä vähemmän"
+ "Viesti kopioitu"
+ "Sinulla ei ole oikeutta kirjoittaa tässä huoneessa"
+ "Näytä vähemmän"
+ "Näytä lisää"
+ "Uusi"
+
+ - "%1$d muutos huoneeseen"
+ - "%1$d muutosta huoneeseen"
+
+
+ - "%1$s, %2$s ja %3$d muu"
+ - "%1$s, %2$s ja %3$d muuta"
+
+
+ - "%1$s kirjoittaa"
+ - "%1$s kirjoittavat"
+
+ "%1$s ja %2$s"
+
diff --git a/features/messages/impl/src/main/res/values-ru/translations.xml b/features/messages/impl/src/main/res/values-ru/translations.xml
index 7845607e15..084829ba49 100644
--- a/features/messages/impl/src/main/res/values-ru/translations.xml
+++ b/features/messages/impl/src/main/res/values-ru/translations.xml
@@ -31,6 +31,7 @@
"Добавить эмодзи"
"Это начало %1$s."
"Это начало разговора."
+ "Неподдерживаемый вызов. уточните, может ли звонящий использовать новое приложение Element X."
"Показать меньше"
"Сообщение скопировано"
"У вас нет разрешения публиковать сообщения в этой комнате"
diff --git a/features/messages/impl/src/main/res/values-sk/translations.xml b/features/messages/impl/src/main/res/values-sk/translations.xml
index 932cf1d9b1..215e7f4cc4 100644
--- a/features/messages/impl/src/main/res/values-sk/translations.xml
+++ b/features/messages/impl/src/main/res/values-sk/translations.xml
@@ -31,6 +31,7 @@
"Pridať emoji"
"Toto je začiatok %1$s."
"Toto je začiatok tejto konverzácie."
+ "Nepodporovaný hovor. Opýtajte sa, či volajúci môže použiť novú aplikáciu Element X."
"Zobraziť menej"
"Správa skopírovaná"
"Nemáte povolenie uverejňovať príspevky v tejto miestnosti"
diff --git a/features/messages/impl/src/main/res/values-uk/translations.xml b/features/messages/impl/src/main/res/values-uk/translations.xml
index e2aed62a60..12c82594ef 100644
--- a/features/messages/impl/src/main/res/values-uk/translations.xml
+++ b/features/messages/impl/src/main/res/values-uk/translations.xml
@@ -9,8 +9,8 @@
"Подорожі та місця"
"Символи"
"Заблокувати користувача"
- "Перевірте, чи хочете Ви приховати всі поточні та майбутні повідомлення від цього користувача"
- "Це повідомлення буде надіслано адміністратору вашого домашнього сервера. Він (вона) не зможе прочитати жодні зашифровані повідомлення."
+ "Перевірте, чи хочете ви приховати всі поточні та майбутні повідомлення від цього користувача"
+ "Це повідомлення буде надіслано адміністраторам вашого домашнього сервера. Вони не зможуть прочитати зашифровані повідомлення."
"Причина скарги на цей вміст"
"Камера"
"Зробити фото"
@@ -22,18 +22,18 @@
"Форматування тексту"
"Історія повідомлень наразі недоступна."
"Історія повідомлень недоступна в цій кімнаті. Перевірте цей пристрій, щоб побачити історію повідомлень."
- "Чи хотіли б Ви запросити їх знову?"
- "Ви одні в цьому чаті"
- "Сповістіть усю кімнату"
+ "Чи хотіли б ви запросити їх знову?"
+ "Ви одні в цій бесіді"
+ "Сповістити всю кімнату"
"Усі"
"Надіслати знову"
- "Ваше повідомлення не вдалося надіслати"
+ "Не вдалося надіслати ваше повідомлення"
"Додати смайлики"
"Це початок %1$s"
"Це початок цієї розмови."
"Показувати менше"
"Повідомлення скопійовано"
- "У Вас немає дозволу на публікацію в цій кімнаті"
+ "У вас немає дозволу на публікацію в цій кімнаті"
"Показувати менше"
"Показати більше"
"Нове"
@@ -45,7 +45,7 @@
- "%1$s%2$s та %3$d інший"
- "%1$s%2$s та %3$d інші"
- - "%1$s%2$s та %3$d інші"
+ - "%1$s%2$s та %3$d інших"
- "%1$s пише"
diff --git a/features/messages/impl/src/main/res/values-zh/translations.xml b/features/messages/impl/src/main/res/values-zh/translations.xml
index 6276eb5959..5ad42882f1 100644
--- a/features/messages/impl/src/main/res/values-zh/translations.xml
+++ b/features/messages/impl/src/main/res/values-zh/translations.xml
@@ -24,7 +24,7 @@
"此聊天室无法查看消息历史记录。请验证此设备以查看之。"
"您想邀请他们回来吗?"
"聊天中只有你一个人"
- "通知整个房间"
+ "通知整个聊天室"
"所有人"
"再次发送"
"消息发送失败"
@@ -33,12 +33,12 @@
"这是本对话的开始。"
"折叠"
"消息已复制"
- "您无权在此房间发言"
+ "您无权在此聊天室发言"
"折叠"
"展开"
"新消息"
- - "%1$d 聊天室变更"
+ - "%1$d 个聊天室变化"
- "%1$s,%2$s 和其他 %3$d 个人"
diff --git a/features/messages/impl/src/main/res/values/localazy.xml b/features/messages/impl/src/main/res/values/localazy.xml
index 63d3d90382..73d266f799 100644
--- a/features/messages/impl/src/main/res/values/localazy.xml
+++ b/features/messages/impl/src/main/res/values/localazy.xml
@@ -31,6 +31,7 @@
"Add emoji"
"This is the beginning of %1$s."
"This is the beginning of this conversation."
+ "Unsupported call. Ask if the caller can use the new Element X app."
"Show less"
"Message copied"
"You do not have permission to post to this room"
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt
index a20acaa5df..c040ce9926 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt
@@ -529,7 +529,7 @@ private fun AndroidComposeTestRule.setMessa
state = state,
onBackClick = onBackClick,
onRoomDetailsClick = onRoomDetailsClick,
- onEventClick = onEventClick,
+ onEventContentClick = onEventClick,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
onPreviewAttachments = onPreviewAttachments,
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenterTest.kt
index e74ae89b4f..5f5774afb6 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenterTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenterTest.kt
@@ -111,9 +111,6 @@ class ResolveVerifiedUserSendFailurePresenterTest {
userDisplayNameResult = { userId ->
Result.success(userId.value)
},
- retrySendMessageResult = {
- Result.success(Unit)
- },
)
val presenter = createResolveVerifiedUserSendFailurePresenter(room)
presenter.test {
@@ -219,9 +216,6 @@ class ResolveVerifiedUserSendFailurePresenterTest {
userDisplayNameResult = { userId ->
Result.success(userId.value)
},
- retrySendMessageResult = {
- Result.success(Unit)
- },
)
val presenter = createResolveVerifiedUserSendFailurePresenter(room)
presenter.test {
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt
index 3a4d343203..6050592bd0 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/MessageEventFixtures.kt
@@ -19,13 +19,15 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UniqueId
-import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
-import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
+import io.element.android.libraries.matrix.api.timeline.item.event.MessageShieldProvider
+import io.element.android.libraries.matrix.api.timeline.item.event.SendHandleProvider
+import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemDebugInfoProvider
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.A_MESSAGE
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.A_USER_NAME
+import io.element.android.libraries.matrix.test.core.FakeSendHandle
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
import io.element.android.libraries.matrix.ui.messages.reply.aProfileTimelineDetailsReady
import kotlinx.collections.immutable.toImmutableList
@@ -39,9 +41,10 @@ internal fun aMessageEvent(
content: TimelineItemEventContent = TimelineItemTextContent(body = A_MESSAGE, htmlDocument = null, formattedBody = null, isEdited = false),
inReplyTo: InReplyToDetails? = null,
isThreaded: Boolean = false,
- debugInfo: TimelineItemDebugInfo = aTimelineItemDebugInfo(),
sendState: LocalEventSendState = LocalEventSendState.Sent(AN_EVENT_ID),
- messageShield: MessageShield? = null,
+ debugInfoProvider: TimelineItemDebugInfoProvider = TimelineItemDebugInfoProvider { aTimelineItemDebugInfo() },
+ messageShieldProvider: MessageShieldProvider = MessageShieldProvider { null },
+ sendHandleProvider: SendHandleProvider = SendHandleProvider { FakeSendHandle() }
) = TimelineItem.Event(
id = UniqueId(eventId?.value.orEmpty()),
eventId = eventId,
@@ -60,6 +63,7 @@ internal fun aMessageEvent(
inReplyTo = inReplyTo,
isThreaded = isThreaded,
origin = null,
- timelineItemDebugInfoProvider = { debugInfo },
- messageShieldProvider = { messageShield },
+ timelineItemDebugInfoProvider = debugInfoProvider,
+ messageShieldProvider = messageShieldProvider,
+ sendHandleProvider = sendHandleProvider,
)
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt
index 315abd8302..6a7b49c34c 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt
@@ -158,7 +158,7 @@ private fun AndroidComposeTestRule.setTimel
timelineProtectionState = timelineProtectionState,
onUserDataClick = onUserDataClick,
onLinkClick = onLinkClick,
- onMessageClick = onMessageClick,
+ onContentClick = onMessageClick,
onMessageLongClick = onMessageLongClick,
onSwipeToReply = onSwipeToReply,
onReactionClick = onReactionClick,
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt
index e9343bf21d..a34e601e5d 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt
@@ -286,7 +286,7 @@ class TimelineItemContentMessageFactoryTest {
val expected = TimelineItemVideoContent(
filename = "body.mp4",
caption = "body.mp4 caption",
- formattedCaption = FormattedBody(MessageFormat.HTML, "formatted"),
+ formattedCaption = SpannedString("formatted"),
duration = 1.minutes,
videoSource = MediaSource(url = "url", json = null),
thumbnailSource = MediaSource("url_thumbnail"),
@@ -527,7 +527,7 @@ class TimelineItemContentMessageFactoryTest {
)
val expected = TimelineItemImageContent(
filename = "body.jpg",
- formattedCaption = FormattedBody(MessageFormat.HTML, "formatted"),
+ formattedCaption = SpannedString("formatted"),
caption = "body.jpg caption",
mediaSource = MediaSource(url = "url", json = null),
thumbnailSource = MediaSource("url_thumbnail"),
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt
index a5a806fe5b..53d7c7ad4b 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt
@@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.A_USER_ID
+import io.element.android.libraries.matrix.test.core.FakeSendHandle
import io.element.android.libraries.matrix.ui.messages.reply.aProfileTimelineDetailsReady
import kotlinx.collections.immutable.toImmutableList
import org.junit.Test
@@ -44,6 +45,7 @@ class TimelineItemGrouperTest {
origin = null,
timelineItemDebugInfoProvider = { aTimelineItemDebugInfo() },
messageShieldProvider = { null },
+ sendHandleProvider = { FakeSendHandle() },
)
private val aNonGroupableItem = aMessageEvent()
private val aNonGroupableItemNoEvent = TimelineItem.Virtual(UniqueId("virtual"), aTimelineItemDaySeparatorModel("Today"))
diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt
index a980467add..1b7f101ba0 100644
--- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt
+++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManagerTest.kt
@@ -19,6 +19,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.RedactedConte
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.AN_EVENT_ID_2
import io.element.android.libraries.matrix.test.A_USER_ID
+import io.element.android.libraries.matrix.test.core.FakeSendHandle
import io.element.android.libraries.mediaplayer.api.MediaPlayer
import io.element.android.libraries.mediaplayer.test.FakeMediaPlayer
import io.element.android.tests.testutils.testCoroutineDispatchers
@@ -96,6 +97,7 @@ fun aRedactedMatrixTimeline(eventId: EventId) = listOf(
)
},
messageShieldProvider = { null },
+ sendHandleProvider = { FakeSendHandle() },
),
)
)
diff --git a/features/onboarding/impl/src/main/res/values-fi/translations.xml b/features/onboarding/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..fb34bae048
--- /dev/null
+++ b/features/onboarding/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,9 @@
+
+
+ "Kirjaudu sisään manuaalisesti"
+ "Kirjaudu sisään QR-koodilla"
+ "Luo tili"
+ "Tervetuloa kaikkien aikojen nopeimpaan %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella."
+ "Tervetuloa %1$s -sovellukseen. Ahdettu nopeudella ja yksinkertaisuudella."
+ "Ole elementissäsi"
+
diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt
index de782e33c5..00f57d25d8 100644
--- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt
+++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt
@@ -33,7 +33,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
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.features.poll.impl.R
@@ -48,10 +47,10 @@ import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconSource
import io.element.android.libraries.designsystem.theme.components.ListItem
import io.element.android.libraries.designsystem.theme.components.ListItemStyle
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
+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.poll.PollKind
import io.element.android.libraries.ui.strings.CommonStrings
@@ -109,14 +108,10 @@ fun CreatePollView(
) {
item {
Column {
- Text(
- text = stringResource(id = R.string.screen_create_poll_question_desc),
- modifier = Modifier.padding(start = 32.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- )
ListItem(
headlineContent = {
- OutlinedTextField(
+ TextField(
+ label = stringResource(id = R.string.screen_create_poll_question_desc),
value = state.question,
onValueChange = {
state.eventSink(CreatePollEvents.SetQuestion(it))
@@ -124,9 +119,7 @@ fun CreatePollView(
modifier = Modifier
.focusRequester(questionFocusRequester)
.fillMaxWidth(),
- placeholder = {
- Text(text = stringResource(id = R.string.screen_create_poll_question_hint))
- },
+ placeholder = stringResource(id = R.string.screen_create_poll_question_hint),
keyboardOptions = keyboardOptions,
)
}
@@ -137,7 +130,7 @@ fun CreatePollView(
val isLastItem = index == state.answers.size - 1
ListItem(
headlineContent = {
- OutlinedTextField(
+ TextField(
value = answer.text,
onValueChange = {
state.eventSink(CreatePollEvents.SetAnswer(index, it))
@@ -145,9 +138,7 @@ fun CreatePollView(
modifier = Modifier
.then(if (isLastItem) Modifier.focusRequester(answerFocusRequester) else Modifier)
.fillMaxWidth(),
- placeholder = {
- Text(text = stringResource(id = R.string.screen_create_poll_answer_hint, index + 1))
- },
+ placeholder = stringResource(id = R.string.screen_create_poll_answer_hint, index + 1),
keyboardOptions = keyboardOptions,
)
},
diff --git a/features/poll/impl/src/main/res/values-fi/translations.xml b/features/poll/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..f8017704b6
--- /dev/null
+++ b/features/poll/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,19 @@
+
+
+ "Lisää vaihtoehto"
+ "Näytä tulokset vasta kyselyn päätyttyä"
+ "Piilota äänet"
+ "Vaihtoehto %1$d"
+ "Muutoksiasi ei ole tallennettu. Haluatko varmasti palata takaisin?"
+ "Kysymys tai aihe"
+ "Mistä kyselyssä on kyse?"
+ "Luo kysely"
+ "Haluatko varmasti poistaa tämän kyselyn?"
+ "Poista kysely"
+ "Muokkaa kyselyä"
+ "Meneillään olevia kyselyjä ei löytynyt."
+ "Aiempia kyselyjä ei löytynyt."
+ "Meneillään olevat"
+ "Aiemmat"
+ "Kyselyt"
+
diff --git a/features/poll/impl/src/main/res/values-uk/translations.xml b/features/poll/impl/src/main/res/values-uk/translations.xml
index 508bfb0e9a..ec1a7bda20 100644
--- a/features/poll/impl/src/main/res/values-uk/translations.xml
+++ b/features/poll/impl/src/main/res/values-uk/translations.xml
@@ -11,8 +11,8 @@
"Ви впевнені, що хочете видалити це опитування?"
"Видалити опитування"
"Редагувати опитування"
- "Не можу знайти жодних поточних опитувань."
- "Не можу знайти жодних минулих опитувань."
+ "Не вдалося знайти жодних поточних опитувань."
+ "Не вдалося знайти жодних минулих опитувань."
"Поточні"
"Минулі"
"Опитування"
diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt
index 66574f4c28..b245b9ff9a 100644
--- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt
+++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt
@@ -93,7 +93,7 @@ class NotificationSettingsPresenter @Inject constructor(
LaunchedEffect(refreshPushProvider) {
val p = pushService.getCurrentPushProvider()
- val name = p?.getCurrentDistributor(matrixClient)?.name
+ val name = p?.getCurrentDistributor(matrixClient.sessionId)?.name
currentDistributorName = if (name != null) {
AsyncData.Success(name)
} else {
diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt
index 5048580da0..078469fd34 100644
--- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt
+++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileView.kt
@@ -29,7 +29,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.preferences.impl.R
-import io.element.android.libraries.designsystem.components.LabelledOutlinedTextField
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
@@ -41,6 +40,7 @@ import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.ui.components.AvatarActionBottomSheet
import io.element.android.libraries.matrix.ui.components.EditableAvatarView
@@ -112,7 +112,7 @@ fun EditUserProfileView(
textAlign = TextAlign.Center,
)
Spacer(modifier = Modifier.height(40.dp))
- LabelledOutlinedTextField(
+ TextField(
label = stringResource(R.string.screen_edit_profile_display_name),
value = state.displayName,
placeholder = stringResource(CommonStrings.common_room_name_placeholder),
diff --git a/features/preferences/impl/src/main/res/values-cs/translations.xml b/features/preferences/impl/src/main/res/values-cs/translations.xml
index bc0e36ed9e..6faec4a988 100644
--- a/features/preferences/impl/src/main/res/values-cs/translations.xml
+++ b/features/preferences/impl/src/main/res/values-cs/translations.xml
@@ -8,8 +8,8 @@
"Vlastní URL pro Element Call"
"Nastavte vlastní URL pro Element Call."
"Neplatné URL, ujistěte se, že jste uvedli protokol (http/https) a správnou adresu."
- "Optimalizovat pro nahrávání"
- "Média"
+ "Rychlejší nahrávání fotografií a videí a snížení spotřeby dat"
+ "Optimalizace kvality médií"
"Poskytovatel push oznámení"
"Vypněte editor formátovaného textu pro ruční zadání Markdown."
"Potvrzení o přečtení"
diff --git a/features/preferences/impl/src/main/res/values-fi/translations.xml b/features/preferences/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..710447578f
--- /dev/null
+++ b/features/preferences/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,60 @@
+
+
+ "Salli koko näytön ilmoitukset, kun laite on lukittu, jos et halua koskaan missata tärkeää puhelua."
+ "Paranna puhelukokemustasi"
+ "Valitse, miten haluat vastaanottaa ilmoituksia"
+ "Kehittäjätila"
+ "Ottamalla käyttöön pääset käsiksi kehittäjille tarkoitettuihin ominaisuuksiin."
+ "Mukautettu Element Call URL-osoite"
+ "Aseta mukautettu URL-osoite Element Callille."
+ "Virheellinen URL-osoite. Varmista, että sisällytät protokollan (http/https) ja oikean osoitteen."
+ "Lähetä valokuvia ja videoita nopeammin ja vähennä datan käyttöä."
+ "Optimoi median laatu"
+ "Push-ilmoitusten tarjoaja"
+ "Ota rikastettu tekstieditori pois käytöstä, jotta voit kirjoittaa Markdownia manuaalisesti."
+ "Lukukuittaukset"
+ "Jos tämä on poissa päältä, sinun lukukuittauksia ei lähetetä kenellekään. Vastaanotat silti lukukuittauksia muilta käyttäjiltä."
+ "Jaa läsnäolo"
+ "Jos tämä on poissa päältä, et lähetä tai vastaanota lukukuittauksia tai kirjoitusilmotuksia."
+ "Ota käyttöön mahdollisuus tarkastella viestin lähdettä aikajanalla."
+ "Et ole estänyt ketään"
+ "Poista esto"
+ "Näet jälleen kaikki heidän lähettämänsä viestit."
+ "Poista käyttäjän esto"
+ "Poistetaan estoa…"
+ "Näyttönimi"
+ "Näyttönimesi"
+ "Tuntematon virhe tapahtui, eikä tietoja voitu muuttaa."
+ "Profiilin muokkaaminen ei onnistunut"
+ "Muokkaa profiilia"
+ "Muokataan profiilia…"
+ "Lisäasetukset"
+ "Ääni- ja videopuheluista"
+ "Konfiguraatio ei täsmää"
+ "Olemme yksinkertaistaneet ilmoitusasetuksia, jotta vaihtoehdot olisi helpompi löytää. Joitakin aiemmin valitsemiasi asetuksia ei näytetä tässä, mutta ne ovat edelleen voimassa.
+
+Jos jatkat, jotkin asetukset saattavat muuttua."
+ "Yksityiskeskusteluissa"
+ "Keskustelukohtaiset asetukset"
+ "Ilmoitusasetusten muokkaamisessa tapahtui virhe."
+ "Kaikista viesteistä"
+ "Vain maininnoista ja avainsanoista"
+ "Yksityiskeskusteluissa, ilmoita minulle"
+ "Ryhmäkeskusteluissa, ilmoita minulle"
+ "Ota ilmoitukset käyttöön tällä laitteella"
+ "Määritystä ei ole korjattu, yritä uudelleen."
+ "Ryhmäkeskusteluissa"
+ "Kutsut"
+ "Kotipalvelimesi ei tue tätä vaihtoehtoa salatuissa huoneissa, joten et ehkä saa ilmoitusta joissakin huoneissa."
+ "Maininnat"
+ "Kaikki"
+ "Maininnat"
+ "Ilmoita minulle"
+ "Ilmoita minulle @room-maininnoista"
+ "Jos haluat saada ilmoituksia, vaihda %1$s."
+ "järjestelmäsi asetuksia"
+ "Järjestelmän ilmoitukset on poissa päältä"
+ "Ilmoitukset"
+ "Vianmääritys"
+ "Ilmoitusten vianmääritys"
+
diff --git a/features/preferences/impl/src/main/res/values-fr/translations.xml b/features/preferences/impl/src/main/res/values-fr/translations.xml
index 82d28bd954..d48b102b9b 100644
--- a/features/preferences/impl/src/main/res/values-fr/translations.xml
+++ b/features/preferences/impl/src/main/res/values-fr/translations.xml
@@ -8,8 +8,8 @@
"URL de base pour Element Call personnalisée"
"Configurer une URL de base pour Element Call."
"URL invalide, assurez-vous d’inclure le protocol (http/https) et l’adresse correcte."
- "Optimisé pour le téléchargement"
- "Media"
+ "Téléchargez des photos et des vidéos plus rapidement et réduisez la consommation de données"
+ "Optimisez la qualité des médias"
"Fournisseur de Push"
"Désactivez l’éditeur de texte enrichi pour saisir manuellement du Markdown."
"Accusés de lecture"
diff --git a/features/preferences/impl/src/main/res/values-sk/translations.xml b/features/preferences/impl/src/main/res/values-sk/translations.xml
index 2e26f68322..118cd7d6a5 100644
--- a/features/preferences/impl/src/main/res/values-sk/translations.xml
+++ b/features/preferences/impl/src/main/res/values-sk/translations.xml
@@ -8,6 +8,8 @@
"Vlastná Element Call základná URL adresa"
"Nastaviť vlastnú základnú URL adresu pre Element Call."
"Neplatná adresa URL, uistite sa, že ste uviedli protokol (http/https) a správnu adresu."
+ "Nahrávajte fotografie a videá rýchlejšie a znížte spotrebu dát"
+ "Optimalizovať kvalitu médií"
"Poskytovateľ oznámení Push"
"Vypnite rozšírený textový editor na ručné písanie Markdown."
"Potvrdenia o prečítaní"
diff --git a/features/preferences/impl/src/main/res/values-uk/translations.xml b/features/preferences/impl/src/main/res/values-uk/translations.xml
index 8905fb3366..afbbe97e39 100644
--- a/features/preferences/impl/src/main/res/values-uk/translations.xml
+++ b/features/preferences/impl/src/main/res/values-uk/translations.xml
@@ -1,27 +1,30 @@
- "Щоб ніколи не пропустити важливий дзвінок, змініть налаштування, щоб увімкнути повноекранні сповіщення, коли телефон заблоковано."
+ "Щоб ніколи не пропустити важливий виклик, змініть налаштування, щоб увімкнути повноекранні сповіщення, коли телефон заблоковано."
+ "Покращуйте досвід дзвінків"
"Виберіть спосіб отримання сповіщень"
"Режим розробника"
"Увімкніть доступ до функцій і можливостей для розробників."
"Користувацька URL-адреса Element Call"
"Встановіть URL-адресу для Element Call."
- "Неправильна URL-адреса, будь ласка, переконайтеся, що ви вказали протокол (http/https) та правильну адресу."
+ "Неправильна URL-адреса. Переконайтеся, що ви вказали протокол (http/https) та правильну адресу."
+ "Швидше завантажуйте фотографії та відео та зменшуйте використання даних"
+ "Оптимізуйте медіаякість"
"Постачальник push-сповіщень"
"Вимкніть редактор розширеного тексту, щоб вводити Markdown вручну."
"Читати журнали"
"Якщо вимкнено, ваші сповіщення про прочитання нікому не надсилатимуться. Ви все одно отримуватимете сповіщення про прочитання від інших користувачів."
"Поділіться присутністю"
- "Якщо вимкнено, ви не зможете надсилати та отримувати сповіщення про прочитання або введення тексту"
+ "Якщо цей параметр вимкнено, ви не зможете надсилати й отримувати звіти про прочитання чи сповіщення про введення тексту."
"Увімкнути опцію для перегляду коду повідомлення в стрічці"
"У вас немає заблокованих користувачів."
"Розблокувати"
"Ви знову зможете бачити всі повідомлення від них."
"Розблокувати користувача"
"Розблокування…"
- "Відображуване ім\'я"
- "Ваше відображуване ім\'я"
- "Була виявлена невідома помилка, і інформацію не вдалося змінити."
+ "Показуване ім\'я"
+ "Ваше показуване ім\'я"
+ "Виявлена невідома помилка, і не вдалося змінити інформацію."
"Неможливо оновити профіль"
"Редагувати профіль"
"Оновлення профілю…"
@@ -31,24 +34,24 @@
"Ми спростили налаштування сповіщень, щоб полегшити пошук параметрів. Деякі користувацькі налаштування, які ви вибрали раніше, тут не відображаються, але вони все ще активні.
Якщо ви продовжите, деякі з ваших налаштувань можуть змінитися."
- "Особисті чати"
- "Користувальницькі налаштування для чату"
+ "Особисті бесіди"
+ "Користувальницькі налаштування бесід"
"Під час оновлення налаштувань сповіщень сталася помилка."
"Всі повідомлення"
"Тільки згадки та ключові слова"
- "В особистих чатах сповіщати про"
- "У групових чатах повідомляти мене про"
+ "В особистих бесідах сповіщати про"
+ "У групових бесідах сповіщати мене про"
"Увімкнути сповіщення на цьому пристрої"
"Конфігурацію не виправлено, спробуйте ще раз."
- "Групові чати"
+ "Групові бесіди"
"Запрошення"
"Ваш домашній сервер не підтримує цю опцію в зашифрованих кімнатах, ви можете не отримати сповіщення в деяких кімнатах."
"Згадки"
"Усі"
"Згадки"
- "Повідомляти мене про"
+ "Сповіщати мене про"
"Сповіщати про @room"
- "Щоб отримувати сповіщення, будь ласка, змініть свої %1$s."
+ "Щоб отримувати сповіщення змініть свої %1$s."
"системні налаштування"
"Системні сповіщення вимкнені"
"Сповіщення"
diff --git a/features/preferences/impl/src/main/res/values-zh/translations.xml b/features/preferences/impl/src/main/res/values-zh/translations.xml
index 6e74db47c2..b332624f13 100644
--- a/features/preferences/impl/src/main/res/values-zh/translations.xml
+++ b/features/preferences/impl/src/main/res/values-zh/translations.xml
@@ -8,12 +8,14 @@
"自定义 Element Call URL"
"为 Element 通话设置根 URL。"
"URL 无效,请确保包含协议(http/https)和正确的地址。"
+ "针对上传进行优化"
+ "媒体"
"通知推送提供者"
"禁用富文本编辑器,手动输入 Markdown。"
"已读回执"
- "如果关闭,您的已读回执将不会发送给别人。您仍能收到别人的已读回执。"
+ "关闭后已读回执将不会发送给他人,但仍能收到他人的已读回执。"
"分享在线状态"
- "如果关闭,您将无法发送或接收已读回执、输入通知"
+ "关闭后将无法发送或接收已读回执、输入通知"
"启用在时间轴中查看消息源码的选项。"
"您没有屏蔽用户"
"解封"
@@ -32,7 +34,7 @@
"我们简化了通知设置,使选项更易于查找。您过去选择的某些自定义设置未在此处显示,但它们仍然有效。
如果继续,您的某些设置可能会更改。"
- "直接聊天"
+ "私聊"
"各聊天室的独立设置"
"更新通知设置时出错。"
"全部消息"
@@ -43,12 +45,12 @@
"配置尚未更正,请重试。"
"群聊"
"邀请"
- "您的服务器在加密房间中不支持此选项,因此在某些房间您可能无法收到通知。"
+ "服务器在加密聊天室中不支持此选项,因此在某些聊天室可能无法收到通知。"
"提及"
"全部"
"提及"
"请通知我:"
- "在 @room 通知我"
+ @room 时通知我
"要接收通知,请更改您的 %1$s。"
"系统设置"
"系统通知已关闭"
diff --git a/features/rageshake/api/src/main/res/values-fi/translations.xml b/features/rageshake/api/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..4e79809827
--- /dev/null
+++ b/features/rageshake/api/src/main/res/values-fi/translations.xml
@@ -0,0 +1,7 @@
+
+
+ "%1$s kaatui edellisellä käyttökerralla. Haluatko jakaa virheraportin kanssamme?"
+ "Näytät ravistelevan puhelinta turhautuneena. Haluatko avata vikailmoitusnäytön?"
+ "Raivostunut ravistaminen"
+ "Havaitsemiskynnys"
+
diff --git a/features/rageshake/api/src/main/res/values-uk/translations.xml b/features/rageshake/api/src/main/res/values-uk/translations.xml
index 9eec9f9960..67c94daa9e 100644
--- a/features/rageshake/api/src/main/res/values-uk/translations.xml
+++ b/features/rageshake/api/src/main/res/values-uk/translations.xml
@@ -1,7 +1,7 @@
- "%1$s аварійно завершив роботу під час останнього використання. Бажаєте поділитися з нами звітом про збій?"
+ "Стався збій %1$s під час останнього користування. Хочете поділитися з нами звітом про збій?"
"Здається, ви роздратовано трясете телефоном. Бажаєте запустити вікно для звіту про помилку?"
- "Rageshake"
+ "Лютострус"
"Поріг виявлення"
diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportView.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportView.kt
index 9010523041..1fb22ebfb0 100644
--- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportView.kt
+++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportView.kt
@@ -39,13 +39,12 @@ import io.element.android.libraries.designsystem.components.preferences.Preferen
import io.element.android.libraries.designsystem.components.preferences.PreferenceRow
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
import io.element.android.libraries.designsystem.components.preferences.PreferenceText
+import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.debugPlaceholderBackground
import io.element.android.libraries.designsystem.theme.components.Button
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
-import io.element.android.libraries.designsystem.theme.components.Text
-import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
@@ -70,17 +69,14 @@ fun BugReportView(
)
Spacer(modifier = Modifier.height(16.dp))
PreferenceRow {
- OutlinedTextField(
+ TextField(
value = descriptionFieldState,
- modifier = Modifier.fillMaxWidth()
- .onTabOrEnterKeyFocusNext(LocalFocusManager.current),
+ modifier = Modifier
+ .fillMaxWidth()
+ .onTabOrEnterKeyFocusNext(LocalFocusManager.current),
enabled = isFormEnabled,
- label = {
- Text(text = stringResource(id = R.string.screen_bug_report_editor_placeholder))
- },
- supportingText = {
- Text(text = stringResource(id = R.string.screen_bug_report_editor_description))
- },
+ placeholder = stringResource(id = R.string.screen_bug_report_editor_placeholder),
+ supportingText = stringResource(id = R.string.screen_bug_report_editor_description),
onValueChange = {
descriptionFieldState = it
eventSink(BugReportEvents.SetDescription(it))
@@ -152,8 +148,8 @@ fun BugReportView(
enabled = state.submitEnabled,
showProgress = state.sending.isLoading(),
modifier = Modifier
- .fillMaxWidth()
- .padding(top = 24.dp, bottom = 16.dp)
+ .fillMaxWidth()
+ .padding(top = 24.dp, bottom = 16.dp)
)
}
}
diff --git a/features/rageshake/impl/src/main/res/values-fi/translations.xml b/features/rageshake/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..dbfeb6d23e
--- /dev/null
+++ b/features/rageshake/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,17 @@
+
+
+ "Liitä kuvakaappaus"
+ "Voitte ottaa minuun yhteyttä, jos teillä on lisäkysymyksiä."
+ "Ota minuun yhteyttä"
+ "Muokkaa kuvakaappausta"
+ "Kuvaile ongelmaasi. Mitä teit? Mitä odotit tapahtuvan? Mitä oikeasti tapahtui? Kerro niin paljon kuin mahdollista."
+ "Kuvaile ongelmaasi…"
+ "Jos mahdollista, kirjoita englanniksi."
+ "Kuvaus on liian lyhyt. Kerro tarkemmin mitä tapahtui, kiitos!"
+ "Lähetä kaatumislokit"
+ "Lähetä lokitiedostot"
+ "Lähetä kuvakaappaus"
+ "Lähetä lokitiedostot viestisi kanssa, jotta voimme varmistaa, että kaikki toimii oikein. Jos haluat lähettää viestisi ilman lokeja, jätä tämä asetus valitsematta."
+ "%1$s kaatui edellisellä käyttökerralla. Haluatko jakaa virheraportin kanssamme?"
+ "Näytä lokitiedostot"
+
diff --git a/features/rageshake/impl/src/main/res/values-uk/translations.xml b/features/rageshake/impl/src/main/res/values-uk/translations.xml
index c3de32efea..30465c4ca4 100644
--- a/features/rageshake/impl/src/main/res/values-uk/translations.xml
+++ b/features/rageshake/impl/src/main/res/values-uk/translations.xml
@@ -1,17 +1,17 @@
- "Прикріпити знімок екрану"
+ "Прикріпити знімок екрана"
"Ви можете зв\'язатися зі мною, якщо у вас виникнуть додаткові запитання."
"Звʼязатися зі мною"
- "Редагувати знімок екрану"
- "Опишіть, будь ласка, проблему. Що Ви зробили? Чого Ви очікували? Що сталося? Будь ласка, опишіть якомога детальніше."
+ "Редагувати знімок екрана"
+ "Будь ласка, опишіть проблему. Які дії ви виконали? Який очікуваний результат? Що сталося? Будь ласка, опишіть якомога детальніше."
"Опишіть проблему…"
"Якщо можливо, будь ласка, напишіть опис англійською мовою."
- "Опис занадто короткий, будь ласка, надайте докладнішу інформацію про те, що сталося. Дякую!"
+ "Опис закороткий, будь ласка, надайте докладнішу інформацію про те, що сталося. Дякуємо!"
"Надіслати журнали збоїв"
"Дозволити журнали"
"Надіслати знімок екрана"
"Журнали будуть додані до вашого повідомлення, щоб переконатися, що все працює належним чином. Щоб надіслати повідомлення без журналів, вимкніть це налаштування."
- "%1$s аварійно завершив роботу під час останнього використання. Бажаєте поділитися з нами звітом про збій?"
+ "Стався збій %1$s під час останнього користування. Хочете поділитися з нами звітом про збій?"
"Переглянути журнали"
diff --git a/features/roomaliasresolver/impl/src/main/res/values-fi/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..20b00dcdd7
--- /dev/null
+++ b/features/roomaliasresolver/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,4 @@
+
+
+ "Huoneen aliaksen ratkaiseminen epäonnistui."
+
diff --git a/features/roomaliasresolver/impl/src/main/res/values-zh/translations.xml b/features/roomaliasresolver/impl/src/main/res/values-zh/translations.xml
index 420d74e4a4..633d2131c2 100644
--- a/features/roomaliasresolver/impl/src/main/res/values-zh/translations.xml
+++ b/features/roomaliasresolver/impl/src/main/res/values-zh/translations.xml
@@ -1,4 +1,4 @@
- "无法解析房间别名。"
+ "无法解析聊天室别名。"
diff --git a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperPresenterTest.kt
similarity index 98%
rename from features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt
rename to features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperPresenterTest.kt
index 9894c2b342..ab4d9bc8a6 100644
--- a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt
+++ b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperPresenterTest.kt
@@ -26,7 +26,7 @@ import org.junit.Rule
import org.junit.Test
import java.util.Optional
-class RoomAliasResolverPresenterTest {
+class RoomAliasHelperPresenterTest {
@get:Rule
val warmUpRule = WarmUpRule()
diff --git a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperViewTest.kt
similarity index 98%
rename from features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt
rename to features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperViewTest.kt
index 6fc3aa64a2..7f4f26cc3d 100644
--- a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt
+++ b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasHelperViewTest.kt
@@ -27,7 +27,7 @@ import org.junit.rules.TestRule
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
-class RoomAliasResolverViewTest {
+class RoomAliasHelperViewTest {
@get:Rule val rule = createAndroidComposeRule()
@Test
diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt
index d1c48e43c2..a56af7f5f4 100644
--- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt
+++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt
@@ -9,7 +9,6 @@
package io.element.android.features.roomdetails.impl.edit
-import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
@@ -21,7 +20,6 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -33,7 +31,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.roomdetails.impl.R
-import io.element.android.libraries.designsystem.components.LabelledTextField
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.async.AsyncActionViewDefaults
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
@@ -45,6 +42,7 @@ import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TextButton
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.ui.components.AvatarActionBottomSheet
import io.element.android.libraries.matrix.ui.components.EditableAvatarView
@@ -110,40 +108,28 @@ fun RoomDetailsEditView(
)
Spacer(modifier = Modifier.height(60.dp))
- if (state.canChangeName) {
- LabelledTextField(
- label = stringResource(id = R.string.screen_room_details_room_name_label),
- value = state.roomRawName,
- placeholder = stringResource(CommonStrings.common_room_name_placeholder),
- singleLine = true,
- onValueChange = { state.eventSink(RoomDetailsEditEvents.UpdateRoomName(it)) },
- )
- } else {
- LabelledReadOnlyField(
- title = stringResource(R.string.screen_room_details_room_name_label),
- value = state.roomRawName
- )
- }
+ TextField(
+ label = stringResource(id = R.string.screen_room_details_room_name_label),
+ value = state.roomRawName,
+ placeholder = stringResource(CommonStrings.common_room_name_placeholder),
+ singleLine = true,
+ readOnly = !state.canChangeName,
+ onValueChange = { state.eventSink(RoomDetailsEditEvents.UpdateRoomName(it)) },
+ )
Spacer(modifier = Modifier.height(28.dp))
- if (state.canChangeTopic) {
- LabelledTextField(
- label = stringResource(CommonStrings.common_topic),
- value = state.roomTopic,
- placeholder = stringResource(CommonStrings.common_topic_placeholder),
- maxLines = 10,
- onValueChange = { state.eventSink(RoomDetailsEditEvents.UpdateRoomTopic(it)) },
- keyboardOptions = KeyboardOptions(
- capitalization = KeyboardCapitalization.Sentences,
- ),
- )
- } else {
- LabelledReadOnlyField(
- title = stringResource(R.string.screen_room_details_topic_title),
- value = state.roomTopic
- )
- }
+ TextField(
+ label = stringResource(CommonStrings.common_topic),
+ value = state.roomTopic,
+ placeholder = stringResource(CommonStrings.common_topic_placeholder),
+ maxLines = 10,
+ readOnly = !state.canChangeTopic,
+ onValueChange = { state.eventSink(RoomDetailsEditEvents.UpdateRoomTopic(it)) },
+ keyboardOptions = KeyboardOptions(
+ capitalization = KeyboardCapitalization.Sentences,
+ ),
+ )
}
}
@@ -171,30 +157,6 @@ fun RoomDetailsEditView(
)
}
-@Composable
-private fun LabelledReadOnlyField(
- title: String,
- value: String,
-) {
- Column(
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- color = MaterialTheme.colorScheme.primary,
- text = title,
- )
-
- Text(
- modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 8.dp, bottom = 12.dp),
- style = MaterialTheme.typography.bodyLarge,
- color = MaterialTheme.colorScheme.primary,
- text = value,
- )
- }
-}
-
@PreviewsDayNight
@Composable
internal fun RoomDetailsEditViewPreview(@PreviewParameter(RoomDetailsEditStateProvider::class) state: RoomDetailsEditState) = ElementPreview {
diff --git a/features/roomdetails/impl/src/main/res/values-fi/translations.xml b/features/roomdetails/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..db8b78d779
--- /dev/null
+++ b/features/roomdetails/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,116 @@
+
+
+ "Ilmoitusasetusten muokkaamisessa tapahtui virhe."
+ "Kotipalvelimesi ei tue tätä vaihtoehtoa salatuissa huoneissa, joten et ehkä saa ilmoitusta joissakin huoneissa."
+ "Kyselyt"
+ "Vain ylläpitäjät"
+ "Porttikieltojen antaminen"
+ "Viestien poistaminen"
+ "Kaikki"
+ "Kutsujen antaminen"
+ "Jäsenten valvonta"
+ "Viestit ja sisältö"
+ "Ylläpitäjät ja valvojat"
+ "Henkilöiden poistaminen"
+ "Huoneen avatarin vaihtaminen"
+ "Huoneen tiedot"
+ "Huoneen nimen vaihtaminen"
+ "Huoneen aiheen vaihtaminen"
+ "Viestien lähettäminen"
+ "Muokkaa ylläpitäjiä"
+ "Et voi peruuttaa tätä toimenpidettä. Ylennät käyttäjän samalle oikeustasolle kuin sinä."
+ "Lisää ylläpitäjä?"
+ "Alenna"
+ "Et voi perua tätä muutosta, koska olet alentamassa itseäsi. Jos olet viimeinen oikeutettu henkilö tässä huoneessa, oikeuksia ei voi enää saada takaisin."
+ "Alenna itsesi?"
+ "%1$s (Kutsuttu)"
+ "(Kutsuttu)"
+ "Ylläpitäjillä on automaattisesti valvojan oikeudet"
+ "Muokkaa valvojia"
+ "Ylläpitäjät"
+ "Valvojat"
+ "Jäsenet"
+ "Sinulla on tallentamattomia muutoksia"
+ "Tallenna muutokset?"
+ "Lisää aihe"
+ "On jo jäsen"
+ "On jo kutsuttu"
+ "Salattu"
+ "Ei salattu"
+ "Julkinen huone"
+ "Muokkaa huonetta"
+ "Tuntematon virhe tapahtui, eikä tietoja voitu muuttaa."
+ "Huoneen muokkaaminen ei onnistunut"
+ "Viestisi suojataan lukoilla. Vain sinulla ja viesiten vastaanottajilla on uniikit avaimet niiden avaamiseen."
+ "Viestien salaus käytössä"
+ "Ilmoitusasetuksia ladattaessa tapahtui virhe."
+ "Tämän huoneen mykistäminen epäonnistui, yritä uudelleen."
+ "Tämän huoneen mykistyksen poistaminen epäonnistui, yritä uudelleen."
+ "Kutsu ihmisiä"
+ "Poistu keskustelusta"
+ "Poistu huoneesta"
+ "Mukautettu"
+ "Oletus"
+ "Ilmoitukset"
+ "Roolit ja oikeudet"
+ "Huoneen nimi"
+ "Turvallisuus"
+ "Jaa huone"
+ "Huoneen tiedot"
+ "Aihe"
+ "Muokataan huonetta…"
+ "Anna porttikielto"
+ "He eivät voi enää liittyä tähän huoneeseen, jos heidät kutsutaan."
+ "Haluatko varmasti antaa tälle jäsenelle porttikiellon?"
+ "Tässä huoneessa ei ole porttikieltoja"
+ "Annetaan porttikieltoa käyttäjälle %1$s"
+
+ - "%1$d henkilö"
+ - "%1$d henkilöä"
+
+ "Poista jäsen huoneesta ja anna porttikielto"
+ "Poista huoneesta"
+ "Poista jäsen huoneesta ja anna porttikielto"
+ "Poista vain jäsen huoneesta"
+ "Poistetaanko jäsen huoneesta ja kielletäänkö heitä liittymästä tulevaisuudessa?"
+ "Poista porttikielto"
+ "He voivat liittyä tähän huoneeseen uudelleen, jos heidät kutsutaan."
+ "Poista käyttäjän porttikielto"
+ "Näytä profiili"
+ "Porttikiellot"
+ "Jäsenet"
+ "Kutsutut"
+ "Poistetaan käyttäjää %1$s huoneesta…"
+ "Ylläpitäjä"
+ "Valvoja"
+ "Huoneen jäsenet"
+ "Poistetaan käyttäjän %1$s porttikieltoa"
+ "Salli mukautettu asetus"
+ "Tämän ottaminen käyttöön ohittaa oletusasetuksesi"
+ "Ilmoita minulle tässä keskustelussa"
+ "Voit muuttaa sen %1$s."
+ "yleisissä asetuksissa"
+ "Oletusasetus"
+ "Poista mukautettu asetus"
+ "Ilmoitusasetusten lataamisessa tapahtui virhe."
+ "Oletustilan palauttaminen epäonnistui, yritä uudelleen."
+ "Tilan asettaminen epäonnistui, yritä uudelleen."
+ "Kotipalvelimesi ei tue tätä vaihtoehtoa salatuissa huoneissa, joten et saa ilmoituksia tästä huoneesta."
+ "Kaikista viesteistä"
+ "Vain maininnoista ja avainsanoista"
+ "Ilmoita minulle tässä huoneessa"
+ "Ylläpitäjät"
+ "Vaihda rooliani"
+ "Alenna jäseneksi"
+ "Alenna valvojaksi"
+ "Jäsenten valvonta"
+ "Viestit ja sisältö"
+ "Valvojat"
+ "Oikeudet"
+ "Nollaa oikeudet"
+ "Kun nollaat käyttöoikeudet, menetät nykyiset asetukset."
+ "Nollataanko oikeudet?"
+ "Roolit"
+ "Huoneen tiedot"
+ "Roolit ja oikeudet"
+
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 92d68b0fc7..616f293554 100644
--- a/features/roomdetails/impl/src/main/res/values-uk/translations.xml
+++ b/features/roomdetails/impl/src/main/res/values-uk/translations.xml
@@ -21,11 +21,11 @@
"Ви не зможете скасувати цю дію. Ви просуваєте користувача, щоб він мав такий же рівень прав, як і ви."
"Додати адміністратора?"
"Понизити"
- "Ви не зможете скасувати цю зміну, оскільки ви знижуєте себе, якщо ви останній привілейований користувач у кімнаті, відновити привілеї буде неможливо."
+ "Ви не зможете скасувати цю зміну, оскільки ви понижуєте себе, якщо ви останній привілейований користувач у кімнаті, відновити повноваження буде неможливо."
"Понизити себе?"
"%1$s (Очікується)"
"(Очікується)"
- "Адміністратори автоматично мають права модератора"
+ "Адміністратори автоматично мають повноваження модератора"
"Керувати модераторами"
"Адміністратори"
"Модератори"
@@ -37,11 +37,11 @@
"Уже запрошені"
"Зашифровано"
"Не зашифровано"
- "Публічна кімната"
+ "Загальнодоступна кімната"
"Редагувати кімнату"
"Сталася невідома помилка, й інформацію не вдалося змінити."
"Не вдалося оновити кімнату"
- "Повідомлення захищені замками. Тільки Ви та одержувачі маєте унікальні ключі для їх розблокування."
+ "Повідомлення захищені замками. Тільки ви та одержувачі маєте унікальні ключі для їх розблокування."
"Шифрування повідомлень увімкнено"
"Виникла помилка при завантаженні налаштувань сповіщень."
"Не вдалося вимкнути цю кімнату. Будь ласка, спробуйте ще раз."
@@ -50,7 +50,7 @@
"Залишити розмову"
"Вийти з кімнати"
"Власні"
- "За замовчуванням"
+ "Типово"
"Сповіщення"
"Ролі та дозволи"
"Назва кімнати"
@@ -72,8 +72,8 @@
"Вилучити й заблокувати учасника"
"Вилучити з кімнати"
"Вилучити й заблокувати учасника"
- "Лише видалити учасника"
- "Видалити учасника та заборонити приєднання в майбутньому?"
+ "Лише вилучити учасника"
+ "Вилучити учасника та заборонити приєднання в майбутньому?"
"Розблокувати"
"Вони зможуть знову приєднатися до цієї кімнати, якщо їх запросять."
"Розблокувати користувача"
@@ -81,25 +81,25 @@
"Заблоковані"
"Учасники"
"На розгляді"
- "Вилучаємо %1$s…"
+ "Вилучення %1$s…"
"Адміністратор"
"Модератор"
"Учасники кімнати"
"Розблокування %1$s"
"Дозволити користувальницькі налаштування"
- "Увімкнення цього параметра змінить налаштування за замовчуванням"
- "Повідомте мене в цьому чаті для"
+ "Увімкнення цього параметра змінить типові налаштування"
+ "Сповіщати мене в цій бесіді про"
"Ви можете змінити це у своїх %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 660021d604..a2f6e26e9b 100644
--- a/features/roomdetails/impl/src/main/res/values-zh/translations.xml
+++ b/features/roomdetails/impl/src/main/res/values-zh/translations.xml
@@ -1,7 +1,7 @@
"更新通知设置时出错。"
- "您的服务器在加密房间中不支持此选项,因此在某些房间您可能无法收到通知。"
+ "服务器在加密聊天室中不支持此选项,因此在某些聊天室可能无法收到通知。"
"投票"
"仅限管理员"
"封禁成员"
@@ -21,7 +21,7 @@
"您将无法撤消此操作。您正在提升用户的权限,使其拥有与您平权。"
"添加管理员?"
"降级"
- "由于您正在降级,您将无法撤消此更改。如果您是房间中的最后一个特权用户,则无法重新获得权限。"
+ "您正在降级,此更改将无法撤消。如果您是聊天室中的最后一个特权用户,则无法重新获得权限。"
"降级自己?"
"%1$s(待处理)"
"(已邀请)"
@@ -37,43 +37,43 @@
"已邀请"
"加密的"
"未加密的"
- "公开房间"
+ "公共聊天室"
"编辑聊天室"
"出现未知错误,无法更改信息。"
"无法更新聊天室"
"消息已加密,只有你和消息接收者拥有唯一解密密钥。"
"消息加密已启用"
"加载通知设置时出错。"
- "无法将此房间静音,请重试。"
- "无法取消此房间的静音,请重试。"
+ "无法将此聊天室静音,请重试。"
+ "无法取消此聊天室的静音,请重试。"
"邀请朋友"
"离开聊天"
- "离开房间"
+ "离开聊天室"
"自定义"
"默认"
"通知"
"角色与权限"
- "房间名称"
+ "聊天室名称"
"安全"
- "分享房间"
+ "分享聊天室"
"聊天室信息"
"话题"
- "正在更新房间……"
+ "正在更新聊天室……"
"封禁"
- "即使受到邀请,他们也无法再次加入房间。"
+ "即使受到邀请,他们也无法再次加入聊天室。"
"您确定要封禁该成员吗?"
- "这个房间里没有被封禁的用户。"
+ "此聊天室里没有被封禁的用户。"
"封禁 %1$s"
- "%1$d 人"
"移除并封禁成员"
- "从房间移除"
+ "从聊天室移除"
"移除并封禁成员"
"仅移除成员"
"删除成员并禁止重新加入?"
"取消封禁"
- "如果受到邀请,他们可以重新加入房间。"
+ "如果受到邀请,他们可以重新加入聊天室。"
"解封用户"
"查看个人资料"
"已封禁用户"
@@ -94,7 +94,7 @@
"加载通知设置时出错。"
"恢复默认模式失败,请重试。"
"设置模式失败,请重试。"
- "您的服务器在加密房间中不支持此选项,您无法在此房间收到通知。"
+ "服务器在加密聊天室中不支持此选项,无法在此聊天室收到通知。"
"所有消息"
"仅限提及和关键词"
"在这个聊天室,通知我:"
diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditViewTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditViewTest.kt
index 50f0d3ed8b..6ae21da28f 100644
--- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditViewTest.kt
+++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditViewTest.kt
@@ -9,9 +9,9 @@ package io.element.android.features.roomdetails.edit
import androidx.activity.ComponentActivity
import androidx.annotation.StringRes
-import androidx.compose.ui.test.assertHasClickAction
-import androidx.compose.ui.test.assertHasNoClickAction
+import androidx.compose.ui.test.assert
import androidx.compose.ui.test.hasTestTag
+import androidx.compose.ui.test.isEditable
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
@@ -78,7 +78,6 @@ class RoomDetailsEditViewTest {
roomRawName = "Marketing",
),
)
- rule.onNodeWithText("Marketing").assertHasClickAction()
rule.onNodeWithText("Marketing").performTextInput("A")
eventsRecorder.assertSingle(RoomDetailsEditEvents.UpdateRoomName("AMarketing"))
}
@@ -93,7 +92,7 @@ class RoomDetailsEditViewTest {
canChangeName = false,
),
)
- rule.onNodeWithText("Marketing").assertHasNoClickAction()
+ rule.onNodeWithText("Marketing").assert(!isEditable())
}
@Test
@@ -105,7 +104,6 @@ class RoomDetailsEditViewTest {
roomTopic = "My Topic",
),
)
- rule.onNodeWithText("My Topic").assertHasClickAction()
rule.onNodeWithText("My Topic").performTextInput("A")
eventsRecorder.assertSingle(RoomDetailsEditEvents.UpdateRoomTopic("AMy Topic"))
}
@@ -120,7 +118,7 @@ class RoomDetailsEditViewTest {
canChangeTopic = false,
),
)
- rule.onNodeWithText("My Topic").assertHasNoClickAction()
+ rule.onNodeWithText("My Topic").assert(!isEditable())
}
@Ignore("This test is failing because the bottom sheet does not open")
diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt
index 0402a276fc..9c6eeeff21 100644
--- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt
+++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryView.kt
@@ -45,11 +45,11 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
+import io.element.android.libraries.designsystem.theme.components.FilledTextField
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold
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.testtags.TestTags
import io.element.android.libraries.ui.strings.CommonStrings
@@ -145,7 +145,7 @@ private fun RoomDirectoryRoomList(
Text(
text = stringResource(id = CommonStrings.common_no_results),
style = ElementTheme.typography.fontBodyLgRegular,
- color = ElementTheme.colors.textPlaceholder,
+ color = ElementTheme.colors.textSecondary,
modifier = Modifier.padding(16.dp)
)
}
@@ -185,8 +185,8 @@ private fun SearchTextField(
colors: TextFieldColors = TextFieldDefaults.colors(
focusedContainerColor = Color.Transparent,
unfocusedContainerColor = Color.Transparent,
- unfocusedPlaceholderColor = ElementTheme.colors.textPlaceholder,
- focusedPlaceholderColor = ElementTheme.colors.textPlaceholder,
+ unfocusedPlaceholderColor = ElementTheme.colors.textSecondary,
+ focusedPlaceholderColor = ElementTheme.colors.textSecondary,
focusedTextColor = ElementTheme.colors.textPrimary,
unfocusedTextColor = ElementTheme.colors.textPrimary,
focusedIndicatorColor = ElementTheme.colors.borderInteractiveSecondary,
@@ -194,7 +194,7 @@ private fun SearchTextField(
),
) {
val focusManager = LocalFocusManager.current
- TextField(
+ FilledTextField(
modifier = modifier.testTag(TestTags.searchTextField.value),
textStyle = ElementTheme.typography.fontBodyLgRegular,
singleLine = true,
diff --git a/features/roomdirectory/impl/src/main/res/values-fi/translations.xml b/features/roomdirectory/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..e5f2d91cfe
--- /dev/null
+++ b/features/roomdirectory/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,5 @@
+
+
+ "Lataus epäonnistui"
+ "Huoneluettelo"
+
diff --git a/features/roomdirectory/impl/src/main/res/values-zh/translations.xml b/features/roomdirectory/impl/src/main/res/values-zh/translations.xml
index 705b8e353f..742a762858 100644
--- a/features/roomdirectory/impl/src/main/res/values-zh/translations.xml
+++ b/features/roomdirectory/impl/src/main/res/values-zh/translations.xml
@@ -1,5 +1,5 @@
"加载失败"
- "房间目录"
+ "聊天室目录"
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt
index 8b216f3854..4c9e7e0595 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt
+++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListContentStateProvider.kt
@@ -21,6 +21,7 @@ open class RoomListContentStateProvider : PreviewParameterProvider RoomListContentState.Empty
+ showEmpty -> RoomListContentState.Empty(securityBannerState = securityBannerState)
showSkeleton -> RoomListContentState.Skeleton(count = 16)
else -> {
- val securityBannerState by rememberSecurityBannerState(securityBannerDismissed, needsSlidingSyncMigration)
RoomListContentState.Rooms(
securityBannerState = securityBannerState,
fullScreenIntentPermissionsState = fullScreenIntentPermissionsPresenter.present(),
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt
index 642c7d879b..a6b9673b54 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt
+++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt
@@ -61,7 +61,9 @@ enum class SecurityBannerState {
@Immutable
sealed interface RoomListContentState {
data class Skeleton(val count: Int) : RoomListContentState
- data object Empty : RoomListContentState
+ data class Empty(
+ val securityBannerState: SecurityBannerState,
+ ) : RoomListContentState
data class Rooms(
val securityBannerState: SecurityBannerState,
val fullScreenIntentPermissionsState: FullScreenIntentPermissionsState,
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt
index d4af5a3fe5..503b00f348 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt
+++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListContentView.kt
@@ -76,6 +76,10 @@ fun RoomListContentView(
}
is RoomListContentState.Empty -> {
EmptyView(
+ state = contentState,
+ eventSink = eventSink,
+ onSetUpRecoveryClick = onSetUpRecoveryClick,
+ onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick,
onCreateRoomClick = onCreateRoomClick,
)
}
@@ -110,21 +114,44 @@ private fun SkeletonView(count: Int, modifier: Modifier = Modifier) {
@Composable
private fun EmptyView(
+ state: RoomListContentState.Empty,
+ eventSink: (RoomListEvents) -> Unit,
+ onSetUpRecoveryClick: () -> Unit,
+ onConfirmRecoveryKeyClick: () -> Unit,
onCreateRoomClick: () -> Unit,
- modifier: Modifier = Modifier
+ modifier: Modifier = Modifier,
) {
- EmptyScaffold(
- title = R.string.screen_roomlist_empty_title,
- subtitle = R.string.screen_roomlist_empty_message,
- action = {
- Button(
- text = stringResource(CommonStrings.action_start_chat),
- leadingIcon = IconSource.Vector(CompoundIcons.Compose()),
- onClick = onCreateRoomClick,
- )
- },
- modifier = modifier.fillMaxSize(),
- )
+ Box(modifier.fillMaxSize()) {
+ EmptyScaffold(
+ title = R.string.screen_roomlist_empty_title,
+ subtitle = R.string.screen_roomlist_empty_message,
+ action = {
+ Button(
+ text = stringResource(CommonStrings.action_start_chat),
+ leadingIcon = IconSource.Vector(CompoundIcons.Compose()),
+ onClick = onCreateRoomClick,
+ )
+ },
+ modifier = Modifier.align(Alignment.Center),
+ )
+ Box {
+ when (state.securityBannerState) {
+ SecurityBannerState.SetUpRecovery -> {
+ SetUpRecoveryKeyBanner(
+ onContinueClick = onSetUpRecoveryClick,
+ onDismissClick = { eventSink(RoomListEvents.DismissBanner) }
+ )
+ }
+ SecurityBannerState.RecoveryKeyConfirmation -> {
+ ConfirmRecoveryKeyBanner(
+ onContinueClick = onConfirmRecoveryKeyClick,
+ onDismissClick = { eventSink(RoomListEvents.DismissBanner) }
+ )
+ }
+ else -> Unit
+ }
+ }
+ }
}
@Composable
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt
index 73f00330b6..ffcc050977 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt
+++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt
@@ -49,11 +49,11 @@ import io.element.android.libraries.designsystem.modifiers.applyIf
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.ButtonSize
+import io.element.android.libraries.designsystem.theme.components.FilledTextField
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Scaffold
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.designsystem.utils.copy
import io.element.android.libraries.matrix.api.core.RoomId
@@ -130,7 +130,7 @@ private fun RoomListSearchContent(
title = {
val filter = state.query
val focusRequester = FocusRequester()
- TextField(
+ FilledTextField(
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester),
diff --git a/features/roomlist/impl/src/main/res/values-cs/translations.xml b/features/roomlist/impl/src/main/res/values-cs/translations.xml
index c26aeabc68..921bb77027 100644
--- a/features/roomlist/impl/src/main/res/values-cs/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-cs/translations.xml
@@ -7,8 +7,10 @@
"Vygenerujte nový klíč pro obnovení, který lze použít k obnovení historie šifrovaných zpráv v případě, že ztratíte přístup ke svým zařízením."
"Nastavení obnovy"
"Nastavení obnovy"
- "Vaše záloha chatu není aktuálně synchronizována. Abyste si zachovali přístup k záloze chatu, musíte potvrdit klíč pro obnovení."
- "Potvrďte klíč pro obnovení"
+ "Potvrďte klíč pro obnovení, abyste zachovali přístup k úložišti klíčů a historii zpráv."
+ "Zadejte klíč pro obnovení"
+ "Zapomněli jste klíč pro obnovení?"
+ "Vaše úložiště klíčů není synchronizováno"
"Abyste nikdy nezmeškali důležitý hovor, změňte nastavení tak, abyste povolili oznámení na celé obrazovce, když je telefon uzamčen."
"Vylepšete si zážitek z volání"
"Opravdu chcete odmítnout pozvánku do %1$s?"
diff --git a/features/roomlist/impl/src/main/res/values-el/translations.xml b/features/roomlist/impl/src/main/res/values-el/translations.xml
index 151d995f4f..7156603892 100644
--- a/features/roomlist/impl/src/main/res/values-el/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-el/translations.xml
@@ -7,8 +7,8 @@
"Δημιούργησε ένα νέο κλειδί ανάκτησης που μπορεί να χρησιμοποιηθεί για την επαναφορά του ιστορικού των κρυπτογραφημένων μηνυμάτων σου σε περίπτωση που χάσεις την πρόσβαση στις συσκευές σου."
"Ρύθμιση ανάκτησης"
"Ρύθμιση ανάκτησης"
- "Το αντίγραφο ασφαλείας της συνομιλίας σου δεν είναι συγχρονισμένο αυτήν τη στιγμή. Πρέπει να εισαγάγεις το κλειδί ανάκτησης για να διατηρήσεις την πρόσβαση στο αντίγραφο ασφαλείας της συνομιλίας σου."
- "Εισήγαγε το κλειδί ανάκτησης"
+ "Επιβεβαίωσε το κλειδί ανάκτησης για να διατηρήσεις την πρόσβαση στο χώρο αποθήκευσης κλειδιών και στο ιστορικό μηνυμάτων."
+ "Ο χώρος αποθήκευσης κλειδιών σου δεν είναι συγχρονισμένος"
"Για να διασφαλίσεις ότι δεν θα χάσεις ποτέ μια σημαντική κλήση, άλλαξε τις ρυθμίσεις σου για να επιτρέψεις τις ειδοποιήσεις πλήρους οθόνης όταν το τηλέφωνό σου είναι κλειδωμένο."
"Βελτίωσε την εμπειρία κλήσεων"
"Σίγουρα θες να απορρίψεις την πρόσκληση συμμετοχής στο %1$s;"
diff --git a/features/roomlist/impl/src/main/res/values-fi/translations.xml b/features/roomlist/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..5927a1bc57
--- /dev/null
+++ b/features/roomlist/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,50 @@
+
+
+ "Kirjaudu Ulos & Päivitä"
+ "Palvelimesi tukee nyt uutta, nopeampaa protokollaa. Kirjaudu ulos ja takaisin sisään päivittääksesi nyt. Jos teet tämän nyt, voit välttää pakotetun uloskirjautumisen, kun vanha protokolla poistetaan myöhemmin."
+ "Kotipalvelimesi ei enää tue vanhaa protokollaa. Kirjaudu ulos ja takaisin sisään jatkaaksesi sovelluksen käyttöä."
+ "Päivitys saatavilla"
+ "Palauta kryptografinen identiteettisi ja viestihistoriasi palautusavaimella, mikäli menetät pääsyn kaikkiin laitteisiisi."
+ "Ota palautus käyttöön"
+ "Ota palautus käyttöön tilisi suojaamiseksi"
+ "Vahvista palautusavaimesi, jotta pääset edelleen käyttämään avainten säilytystä ja viestihistoriaa."
+ "Syötä palautusavaimesi"
+ "Unohditko palautusavaimesi?"
+ "Avainten säilytys ei ole synkronoitu"
+ "Salli koko näytön ilmoitukset, kun laite on lukittu, jos et halua koskaan missata tärkeää puhelua."
+ "Paranna puhelukokemustasi"
+ "Haluatko varmasti hylätä kutsun liittyä %1$s -huoneeseen?"
+ "Hylkää kutsu"
+ "Haluatko varmasti hylätä kutsun yksityiseen keskusteluun käyttäjän %1$s kanssa?"
+ "Hylkää keskustelu"
+ "Ei kutsuja"
+ "%1$s (%2$s) kutsui sinut"
+ "Liittymispyyntö lähetetty"
+ "Tämä on kertaluonteinen prosessi, kiitos odottamisesta."
+ "Tiliä määritetään."
+ "Luo uusi keskustelu tai huone"
+ "Aloita lähettämällä viesti jollekin."
+ "Sinulla ei ole vielä keskusteluja."
+ "Suosikit"
+ "Voit lisätä keskustelun suosikkeihisi keskustelun asetuksissa.
+Toistaiseksi voit poistaa suodattimien valinnan, jotta näet muut keskustelut."
+ "Sinulla ei ole vielä suosikkikeskusteluja"
+ "Kutsut"
+ "Sinulla ei ole yhtään odottavaa kutsua."
+ "Matala prioriteetti"
+ "Voit poistaa suodattimien valinnan nähdäksesi muut keskustelusi."
+ "Sinulla ei ole sopivia keskusteluja tähän valintaan"
+ "Ihmiset"
+ "Sinulla ei ole vielä yhtään yksityisviestiä"
+ "Huoneet"
+ "Et ole vielä missään huoneessa"
+ "Lukemattomat"
+ "Onnittelut!
+Sinulla ei ole lukemattomia viestejä!"
+ "Keskustelut"
+ "Merkitse luetuksi"
+ "Merkitse lukemattomaksi"
+ "Selaa kaikkia huoneita"
+ "Vaikuttaisi siltä, että käytät uutta laitetta. Vahvista toisella laitteella nähdäksesi salatut viestit."
+ "Vahvista, että se olet sinä"
+
diff --git a/features/roomlist/impl/src/main/res/values-fr/translations.xml b/features/roomlist/impl/src/main/res/values-fr/translations.xml
index 91b0d9621d..315efb3478 100644
--- a/features/roomlist/impl/src/main/res/values-fr/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-fr/translations.xml
@@ -7,8 +7,10 @@
"Générez une nouvelle clé de récupération qui peut être utilisée pour restaurer l’historique de vos messages chiffrés au cas où vous perdriez l’accès à vos appareils."
"Configurer la sauvegarde"
"Configurer la récupération"
- "La sauvegarde des conversations est désynchronisée. Vous devez confirmer la clé de récupération pour accéder à votre historique."
- "Confirmer votre clé de récupération"
+ "Confirmez votre clé de récupération pour conserver l’accès à votre stockage de clés et à l’historique des messages."
+ "Saisissez votre clé de récupération"
+ "Clé de récupération oubliée?"
+ "Le stockage de vos clés n’est pas synchronisé"
"Afin de ne jamais manquer un appel important, veuillez modifier vos paramètres pour autoriser les notifications en plein écran lorsque votre appareil est verrouillé."
"Améliorez votre expérience d’appel"
"Êtes-vous sûr de vouloir décliner l’invitation à rejoindre %1$s ?"
diff --git a/features/roomlist/impl/src/main/res/values-pt/translations.xml b/features/roomlist/impl/src/main/res/values-pt/translations.xml
index e0ddffa056..b6198aa5a4 100644
--- a/features/roomlist/impl/src/main/res/values-pt/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-pt/translations.xml
@@ -4,7 +4,7 @@
"O teu servidor suporta agora um protocolo novo e mais rápido. Termina a sessão e volta a iniciar sessão para atualizar agora. Se o fizeres agora, evitarás um fim de sessão forçado quando o protocolo antigo for removido mais tarde."
"Seu homeserver não suporta mais o protocolo antigo. Termine sessão e volte a iniciar sessão para continuar a utilizar a aplicação."
"Atualização disponível"
- "Gere uma nova chave de recuperação que pode ser usada para restaurar seu histórico de mensagens criptografadas caso você perca o acesso aos seus dispositivos."
+ "Recupera a tua identidade criptográfica e o histórico de mensagens com uma chave de recuperação se tiveres perdido todos os teus dispositivos existentes."
"Configurar recuperação"
"Configurar a recuperação"
"Confirma a tua chave de recuperação para manteres o acesso ao teu armazenamento de chaves e ao histórico de mensagens."
diff --git a/features/roomlist/impl/src/main/res/values-sk/translations.xml b/features/roomlist/impl/src/main/res/values-sk/translations.xml
index 4c5079a51b..610d9bb489 100644
--- a/features/roomlist/impl/src/main/res/values-sk/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-sk/translations.xml
@@ -7,8 +7,10 @@
"Vytvorte nový kľúč na obnovenie, ktorý môžete použiť na obnovenie vašej histórie šifrovaných správ v prípade straty prístupu k vašim zariadeniam."
"Nastaviť obnovenie"
"Nastaviť obnovenie"
- "Vaša záloha konverzácie nie je momentálne synchronizovaná. Na zachovanie prístupu k zálohe konverzácie musíte potvrdiť svoj kľúč na obnovu."
- "Potvrďte svoj kľúč na obnovenie"
+ "Potvrďte svoj kľúč na obnovenie, aby ste zachovali prístup k úložisku kľúčov a histórii správ."
+ "Zadajte kľúč na obnovenie"
+ "Zabudli ste svoj kľúč na obnovenie?"
+ "Vaše úložisko kľúčov nie je synchronizované"
"Aby ste už nikdy nezmeškali dôležitý hovor, zmeňte svoje nastavenia a povoľte upozornenia na celú obrazovku, keď je váš telefón uzamknutý."
"Vylepšite svoj zážitok z hovoru"
"Naozaj chcete odmietnuť pozvánku na pripojenie do %1$s?"
diff --git a/features/roomlist/impl/src/main/res/values-uk/translations.xml b/features/roomlist/impl/src/main/res/values-uk/translations.xml
index 91564da550..783bac68c0 100644
--- a/features/roomlist/impl/src/main/res/values-uk/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-uk/translations.xml
@@ -1,40 +1,50 @@
+ "Вийти та оновити"
+ "Ваш сервер тепер підтримує новий, швидший протокол. Вийдіть із системи та увійдіть знову, щоб оновити систему зараз. Якщо ви зробите це зараз, це допоможе вам уникнути примусового виходу з системи, коли старий протокол буде видалено пізніше."
+ "Ваш домашній сервер більше не підтримує старий протокол. Будь ласка, вийдіть і увійдіть знову, щоб продовжити використання програми."
+ "Доступне оновлення"
+ "Відновіть свою криптографічну ідентичність та історію повідомлень за допомогою ключа відновлення, якщо ви втратили всі наявні пристрої."
"Налаштувати відновлення"
- "Ваша резервна копія чату наразі не синхронізована. Вам потрібно підтвердити ключ відновлення, щоб зберегти доступ до резервної копії чату."
- "Підтвердіть ключ відновлення"
- "Щоб ніколи не пропустити важливий дзвінок, змініть налаштування, щоб увімкнути повноекранні сповіщення, коли телефон заблоковано."
+ "Налаштуйте відновлення для захисту свого облікового запису"
+ "Підтвердіть свій ключ відновлення, щоб мати доступ до сховища ключів та історії повідомлень."
+ "Введіть ключ відновлення"
+ "Забули ключ відновлення?"
+ "Ваше сховище ключів не синхронізовано"
+ "Щоб ніколи не пропустити важливий виклик, змініть налаштування, щоб увімкнути повноекранні сповіщення, коли телефон заблоковано."
+ "Покращуйте досвід дзвінків"
"Ви впевнені, що хочете відхилити запрошення приєднатися до %1$s?"
"Відхилити запрошення"
- "Ви дійсно хочете відмовитися від приватного чату з %1$s?"
- "Відхилити чат"
+ "Ви дійсно хочете відмовитися від приватної бесіди з %1$s?"
+ "Відхилити бесіду"
"Немає запрошень"
- "%1$s (%2$s) запросив (-ла) Вас"
+ "%1$s (%2$s) запрошує вас"
+ "Запит на приєднання надіслано"
"Це одноразовий процес, дякую за очікування."
"Налаштування облікового запису."
"Створити нову розмову або кімнату"
"Почніть з обміну повідомленнями з кимось."
- "Ще немає чатів."
- "Улюблені"
- "Ви можете додати чат до улюблених у налаштуваннях чату.
-Наразі ви можете зняти фільтри, щоб побачити інші ваші чати"
- "Ви ще не маєте улюблених чатів"
+ "Ще немає бесід."
+ "Обране"
+ "Ви можете додати бесіду до обраних у налаштуваннях бесіди.
+Наразі ви можете зняти фільтри, щоб побачити інші ваші бесіди"
+ "Ви ще не маєте обраних бесід"
"Запрошення"
"У вас немає запрошень, що очікують на розгляд."
"Низький пріоритет"
- "Ви можете зняти фільтри, щоб побачити інші ваші чати"
- "Ви не маєте чатів для цієї категорії"
+ "Ви можете зняти фільтри, щоб побачити інші ваші бесіди"
+ "Ви не маєте бесід для цієї категорії"
"Люди"
- "Ви ще не маєте жодного особистого чату"
+ "Ви ще не маєте жодної особистої бесіди"
"Кімнати"
"Ви ще не учасник жодної кімнати"
"Непрочитані"
"Вітаємо!
У вас немає непрочитаних повідомлень!"
- "Усі чати"
+ "Бесіди"
"Позначити прочитаним"
"Позначити непрочитаним"
"Переглянути всі кімнати"
- "Схоже, Ви використовуєте новий пристрій. Щоб отримати доступ до зашифрованих повідомлень, підтвердьте особу за допомогою іншого пристрою."
- "Підтвердьте, що це Ви"
+ "Схоже, ви використовуєте новий пристрій. Щоб отримати доступ до зашифрованих повідомлень, підтвердьте особу за допомогою іншого пристрою."
+ "Підтвердьте, що це ви"
diff --git a/features/roomlist/impl/src/main/res/values-zh/translations.xml b/features/roomlist/impl/src/main/res/values-zh/translations.xml
index f578323790..7c2555d489 100644
--- a/features/roomlist/impl/src/main/res/values-zh/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-zh/translations.xml
@@ -7,8 +7,10 @@
"生成新的恢复密钥,该密钥可用于在您无法访问设备时恢复加密的消息历史记录。"
"设置恢复"
"设置恢复"
- "聊天备份目前不同步,需要输入恢复密钥才能访问聊天备份。"
- "输入恢复密钥"
+ "确认恢复密钥,以保持对密钥存储和消息历史的访问。"
+ "输入恢复密钥"
+ "忘记了恢复密钥?"
+ "你的密钥存储已不同步"
"为确保您不会错过重要来电,请更改设置以允许锁屏时的全屏通知。"
"提升通话体验"
"您确定要拒绝加入 %1$s 的邀请吗?"
@@ -17,6 +19,7 @@
"拒绝聊天"
"没有邀请"
"%1$s (%2$s)邀请了你"
+ "加入请求已发送"
"这是一个一次性的过程,感谢您的等待。"
"设置您的账户。"
"创建新的对话或聊天室"
@@ -41,7 +44,7 @@
"全部聊天"
"标记为已读"
"标记为未读"
- "浏览所有房间"
+ "浏览所有聊天室"
"您似乎正在使用新设备。使用另一台设备进行验证以访问您的加密消息。"
"验证是你本人"
diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordView.kt
index 49d545e457..6b0c2036a1 100644
--- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordView.kt
+++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordView.kt
@@ -7,6 +7,8 @@
package io.element.android.features.securebackup.impl.reset.password
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -25,14 +27,12 @@ import io.element.android.libraries.designsystem.atomic.pages.FlowStepPage
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.ProgressDialog
import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
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.Icon
-import io.element.android.libraries.designsystem.theme.components.IconButton
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
-import io.element.android.libraries.designsystem.theme.components.Text
-import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
@@ -80,14 +80,13 @@ fun ResetIdentityPasswordView(
@Composable
private fun Content(text: String, onTextChange: (String) -> Unit, hasError: Boolean) {
var showPassword by remember { mutableStateOf(false) }
- OutlinedTextField(
+ TextField(
modifier = Modifier
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
value = text,
onValueChange = onTextChange,
- label = { Text(stringResource(CommonStrings.common_password)) },
- placeholder = { Text(stringResource(R.string.screen_reset_encryption_password_placeholder)) },
+ placeholder = stringResource(CommonStrings.common_password),
singleLine = true,
visualTransformation = if (showPassword) VisualTransformation.None else PasswordVisualTransformation(),
trailingIcon = {
@@ -96,13 +95,13 @@ private fun Content(text: String, onTextChange: (String) -> Unit, hasError: Bool
val description =
if (showPassword) stringResource(CommonStrings.a11y_hide_password) else stringResource(CommonStrings.a11y_show_password)
- IconButton(onClick = { showPassword = !showPassword }) {
+ Box(Modifier.clickable { showPassword = !showPassword }) {
Icon(imageVector = image, description)
}
},
isError = hasError,
supportingText = if (hasError) {
- { Text(stringResource(R.string.screen_reset_encryption_password_error)) }
+ stringResource(R.string.screen_reset_encryption_password_error)
} else {
null
}
diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt
index 7ebf2d0219..7d03eb7fba 100644
--- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt
+++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/views/RecoveryKeyView.kt
@@ -36,14 +36,14 @@ import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.securebackup.impl.R
import io.element.android.features.securebackup.impl.tools.RecoveryKeyVisualTransformation
+import io.element.android.libraries.designsystem.modifiers.autofill
import io.element.android.libraries.designsystem.modifiers.clickableIfNotNull
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.Icon
-import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Text
-import io.element.android.libraries.designsystem.theme.components.autofill
+import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag
import io.element.android.libraries.ui.strings.CommonStrings
@@ -62,7 +62,6 @@ internal fun RecoveryKeyView(
) {
Text(
text = stringResource(id = CommonStrings.common_recovery_key),
- modifier = Modifier.padding(start = 16.dp),
style = ElementTheme.typography.fontBodyMdRegular,
)
RecoveryKeyContent(state, onClick, onChange, onSubmit)
@@ -159,7 +158,7 @@ private fun RecoveryKeyFormContent(
// Do not apply a visual transformation if the key has spaces, to let user enter passphrase
if (keyHasSpace) VisualTransformation.None else RecoveryKeyVisualTransformation()
}
- OutlinedTextField(
+ TextField(
modifier = Modifier
.fillMaxWidth()
.testTag(TestTags.recoveryKey)
@@ -179,7 +178,7 @@ private fun RecoveryKeyFormContent(
keyboardActions = KeyboardActions(
onDone = { onSubmit() }
),
- label = { Text(text = stringResource(id = R.string.screen_recovery_key_confirm_key_placeholder)) }
+ placeholder = stringResource(id = R.string.screen_recovery_key_confirm_key_placeholder),
)
}
@@ -198,14 +197,12 @@ private fun RecoveryKeyFooter(state: RecoveryKeyViewState) {
}
),
color = ElementTheme.colors.textSecondary,
- modifier = Modifier.padding(start = 16.dp),
style = ElementTheme.typography.fontBodySmRegular,
)
} else {
Text(
text = stringResource(id = R.string.screen_recovery_key_save_key_description),
color = ElementTheme.colors.textSecondary,
- modifier = Modifier.padding(start = 16.dp),
style = ElementTheme.typography.fontBodySmRegular,
)
}
@@ -214,7 +211,6 @@ private fun RecoveryKeyFooter(state: RecoveryKeyViewState) {
Text(
text = stringResource(id = R.string.screen_recovery_key_confirm_key_description),
color = ElementTheme.colors.textSecondary,
- modifier = Modifier.padding(start = 16.dp),
style = ElementTheme.typography.fontBodySmRegular,
)
}
diff --git a/features/securebackup/impl/src/main/res/values-cs/translations.xml b/features/securebackup/impl/src/main/res/values-cs/translations.xml
index 30e9f5128d..3ba3bd98ee 100644
--- a/features/securebackup/impl/src/main/res/values-cs/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-cs/translations.xml
@@ -10,7 +10,7 @@
"Změnit klíč pro obnovení"
"Obnovte svou kryptografickou identitu a historii zpráv pomocí klíče pro obnovení, pokud jste ztratili všechna stávající zařízení."
"Zadejte klíč pro obnovení"
- "Vaše záloha chatu není aktuálně synchronizována."
+ "Vaše úložiště klíčů je momentálně nesynchronizované."
"Nastavení obnovy"
"Získejte přístup ke svým zašifrovaným zprávám, pokud ztratíte všechna zařízení nebo jste všude odhlášeni z %1$s."
"Otevřít %1$s na stolním počítači"
@@ -40,12 +40,13 @@
"Změnit klíč pro obnovení?"
"Vytvořit nový klíč pro obnovení"
"Ujistěte se, že tuto obrazovku nikdo nevidí!"
- "Zkuste prosím znovu potvrdit přístup k záloze chatu."
+ "Zkuste prosím znovu potvrdit přístup k úložišti klíčů."
"Nesprávný klíč pro obnovení"
"Pokud máte bezpečnostní klíč nebo bezpečnostní frázi, bude to fungovat také."
"Zadejte…"
"Ztratili jste klíč pro obnovení?"
"Klíč pro obnovení potvrzen"
+ "Zadejte klíč pro obnovení"
"Klíč pro obnovení zkopírován"
"Generování…"
"Uložit klíč pro obnovení"
diff --git a/features/securebackup/impl/src/main/res/values-el/translations.xml b/features/securebackup/impl/src/main/res/values-el/translations.xml
index add44a56f7..ef98e8ee37 100644
--- a/features/securebackup/impl/src/main/res/values-el/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-el/translations.xml
@@ -6,7 +6,7 @@
"Χώρος αποθήκευσης κλειδιού"
"Αλλαγή κλειδιού ανάκτησης"
"Εισαγωγή κλειδιού ανάκτησης"
- "Το αντίγραφο ασφαλείας της συνομιλίας σου δεν είναι συγχρονισμένο αυτήν τη στιγμή."
+ "Ο αποθηκευτικός χώρος κλειδιών σου δεν είναι συγχρονισμένος αυτήν τη στιγμή."
"Ρύθμιση ανάκτησης"
"Απόκτησε πρόσβαση στα κρυπτογραφημένα σου μηνύματα εάν χάσεις όλες τις συσκευές σου ή έχεις αποσυνδεθεί από το %1$s παντού."
"Άνοιγμα %1$s σε συσκευή υπολογιστή"
@@ -36,7 +36,7 @@
"Αλλαγή κλειδιού ανάκτησης;"
"Δημιουργία νέου κλειδιού ανάκτησης"
"Βεβαιώσου ότι κανείς δεν μπορεί να δει αυτήν την οθόνη!"
- "Προσπάθησε ξανά για να επιβεβαιώσεις την πρόσβαση στο αντίγραφο ασφαλείας της συνομιλίας σου."
+ "Προσπάθησε ξανά για να επιβεβαιώσεις την πρόσβαση στον αποθηκευτικό χώρο κλειδιών σου."
"Λανθασμένο κλειδί ανάκτησης"
"Εάν έχεις ένα κλειδί ασφαλείας ή μια φράση ασφαλείας, θα λειτουργήσει επίσης."
"Εισαγωγή…"
diff --git a/features/securebackup/impl/src/main/res/values-fi/translations.xml b/features/securebackup/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..8d0c57cb7e
--- /dev/null
+++ b/features/securebackup/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,70 @@
+
+
+ "Ota avainten säilytys pois käytöstä"
+ "Ota varmuuskopiointi käyttöön"
+ "Säilytä kryptografinen identiteettisi ja viestien avaimet turvallisesti palvelimellasi. Tämän avulla pääset käsiksi viestihistoriaan uusillakin laitteilla. %1$s."
+ "Avainten säilytys"
+ "Avainten säilytys on oltava käytössä, jotta palautus voidaan ottaa käyttöön."
+ "Lataa avaimet tästä laitteesta"
+ "Salli avainten säilytys"
+ "Vaihda palautusavain"
+ "Palauta kryptografinen identiteettisi ja viestihistoriasi palautusavaimella, jos olet menettänyt kaikki nykyiset laitteesi."
+ "Käytä palautusavainta"
+ "Avainten säilytys ei ole tällä hetkellä synkronoitu."
+ "Ota palautus käyttöön"
+ "Pääset käsiksi salattuihin viesteihisi, jos menetät kaikki laitteesi tai olet kirjautunut ulos %1$s -sovelluksesta kaikkialla."
+ "Avaa %1$s tietokoneella"
+ "Kirjaudu tilillesi uudelleen"
+ "Kun sinua pyydetään vahvistamaan laitteesi, valitse %1$s"
+ "“Nollaa kaikki”"
+ "Seuraa ohjeita uuden palautusavaimen luomiseksi"
+ "Tallenna uusi palautusavaimesi salasanojen hallintaohjelmaan tai salattuun muistiinpanoon"
+ "Nollaa tilisi salaus toisella laitteella"
+ "Jatka nollausta"
+ "Tilitietosi, yhteystiedot, asetukset ja keskustelulista säilytetään"
+ "Menetät kaiken viestihistorian, joka on tallella vain palvelimella"
+ "Sinun on vahvistettava kaikki olemassa olevat laitteesi ja yhteystietosi uudelleen"
+ "Nollaa identiteettisi vain, jos et voi käyttää toista laitetta, johon olet kirjautunut, ja olet kadottanut palautusavaimesi."
+ "Etkö voi vahvistaa? Sinun on nollattava identiteettisi."
+ "Poista käytöstä"
+ "Menetät salatut viestisi, jos kirjaudut ulos kaikista laitteista."
+ "Haluatko varmasti poistaa varmuuskopioinnin käytöstä?"
+ "Avainten säilytyksen poistaminen poistaa sinun kryptografisen identiteetin ja viestien avaimet palvelimeltasi ja poistaa seuraavat suojausominausuudet käytöstä:"
+ "Et saa salattua viestihistoriaa uusilla laitteilla"
+ "Menetät pääsyn salattuihin viestihisi, jos kirjaudut ulos %1$s -sovelluksesta kaikkialla."
+ "Haluatko varmasti ottaa avainten säilytyksen pois käytöstä ja poistaa sen?"
+ "Hanki uusi palautusavain, jos olet kadottanut nykyisen avaimen. Palautusavaimen vaihtamisen jälkeen vanha avaimesi ei enää toimi."
+ "Luo uusi palautusavain"
+ "Älä jaa tätä kenenkään kanssa!"
+ "Palautusavain vaihdettu"
+ "Vaihda palautusavain?"
+ "Luo uusi palautusavain"
+ "Varmista, ettei kukaan näe tätä ruutua!"
+ "Yritä uudelleen vahvistaaksesi pääsyn avainten säilytykseen."
+ "Väärä palautusavain"
+ "Jos sinulla on turva-avain tai turvalause, sekin toimii."
+ "Syötä…"
+ "Hukkasitko palautusavaimesi?"
+ "Palautusavain vahvistettu"
+ "Syötä palautusavaimesi"
+ "Palautusavain kopioitu"
+ "Luodaan…"
+ "Tallenna palautusavain"
+ "Kirjoita tämä palautusavain turvalliseen paikkaan, kuten salasanojen hallintaohjelmaan, salattuun muistiinpanoon tai fyysiseen kassakaappiin."
+ "Kopioi palautusavain napauttamalla"
+ "Tallenna palautusavain turvalliseen paikkaan"
+ "Et voi palata katsomaan uutta palautusavaintasi uudelleen tämän vaiheen jälkeen."
+ "Oletko tallentanut palautusavaimesi?"
+ "Avainten säilytys on suojattu palautusavaimella. Jos tarvitset uuden palautusavaimen tämän jälkeen, voit luoda uuden valitsemalla ‘Vaihda palautusavain’."
+ "Luo palautusavaimesi"
+ "Älä jaa tätä kenenkään kanssa!"
+ "Palautuksen käyttöönotto onnistui"
+ "Ota palautus käyttöön"
+ "Kyllä, nollaa nyt"
+ "Tätä prosessia ei voi peruuttaa."
+ "Haluatko varmasti nollata identiteettisi?"
+ "Tapahtui tuntematon virhe. Tarkista, että tilisi salasana on oikein ja yritä uudelleen."
+ "Syötä…"
+ "Vahvista, että haluat nollata identiteettisi."
+ "Kirjoita tilisi salasana jatkaaksesi"
+
diff --git a/features/securebackup/impl/src/main/res/values-fr/translations.xml b/features/securebackup/impl/src/main/res/values-fr/translations.xml
index 43c3fdbc28..867d43b7e7 100644
--- a/features/securebackup/impl/src/main/res/values-fr/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-fr/translations.xml
@@ -4,12 +4,13 @@
"Activer la sauvegarde"
"Stockez votre identité cryptographique et vos clés de message en toute sécurité sur le serveur. Cela vous permettra de consulter l’historique de vos messages sur tous les nouveaux appareils. %1$s."
"Stockage des clés"
+ "Le stockage des clés doit être activé pour configurer la restauration."
"Télécharger les clés depuis cet appareil"
"Autoriser le stockage des clés"
"Changer la clé de récupération"
"Récupérez votre identité cryptographique et l’historique de vos messages à l’aide d’une clé de récupération si vous avez perdu tous vos appareils existants."
"Utiliser la clé de récupération"
- "La sauvegarde des discussions est désynchronisée."
+ "Le stockage de vos clés est actuellement désynchronisé."
"Configurer la sauvegarde"
"Accédez à vos messages chiffrés si vous perdez tous vos appareils ou que vous êtes déconnectés de %1$s partout."
"Ouvrez %1$s sur un ordinateur"
@@ -39,12 +40,13 @@
"Changer la clé de récupération?"
"Créer une nouvelle clé de récupération"
"Assurez vous que personne d’autre ne regarde votre écran!"
- "Veuillez réessayer afin de pouvoir accéder à vos anciens messages."
+ "Veuillez réessayer pour confirmer l’accès à votre stockage de clés."
"Clé de récupération incorrecte"
"Si vous avez une clé de sécurité ou une phrase de sécurité, cela fonctionnera également."
"Saisissez la clé ici…"
"Clé de récupération perdue?"
"Clé de récupération confirmée"
+ "Saisissez votre clé de récupération"
"Clé de récupération copiée"
"Génération…"
"Enregistrer la clé"
diff --git a/features/securebackup/impl/src/main/res/values-sk/translations.xml b/features/securebackup/impl/src/main/res/values-sk/translations.xml
index 0d75ce1bf6..7d73522091 100644
--- a/features/securebackup/impl/src/main/res/values-sk/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-sk/translations.xml
@@ -4,12 +4,13 @@
"Zapnúť zálohovanie"
"Uložte svoju kryptografickú identitu a kľúče správ bezpečne na server. To vám umožní zobraziť históriu správ na všetkých nových zariadeniach. %1$s."
"Úložisko kľúčov"
+ "Úložisko kľúčov musí byť zapnuté, aby bolo možné nastaviť obnovenie."
"Nahrať kľúče z tohto zariadenia"
"Povoliť úložisko kľúčov"
"Zmeniť kľúč na obnovenie"
"Obnovte svoju kryptografickú totožnosť a históriu správ pomocou kľúča na obnovenie, ak ste stratili všetky svoje existujúce zariadenia."
"Zadajte kľúč na obnovenie"
- "Vaša záloha konverzácie nie je momentálne synchronizovaná."
+ "Vaše úložisko kľúčov nie je momentálne synchronizované."
"Nastaviť obnovenie"
"Získajte prístup k vašim šifrovaným správam aj keď stratíte všetky svoje zariadenia alebo sa odhlásite zo všetkých %1$s zariadení."
"Otvoriť %1$s v stolnom počítači"
@@ -39,12 +40,13 @@
"Zmeniť kľúč na obnovenie?"
"Vytvoriť nový kľúč na obnovenie"
"Uistite sa, že túto obrazovku nikto nevidí!"
- "Skúste prosím znova potvrdiť prístup k vašej zálohe konverzácie."
+ "Skúste prosím znova potvrdiť prístup k úložisku kľúčov."
"Nesprávny kľúč na obnovenie"
"Ak máte bezpečnostný kľúč alebo bezpečnostnú frázu, bude to fungovať tiež."
"Zadať…"
"Stratili ste kľúč na obnovenie?"
"Kľúč na obnovu potvrdený"
+ "Zadajte kľúč na obnovenie"
"Skopírovaný kľúč na obnovenie"
"Generovanie…"
"Uložiť kľúč na obnovenie"
diff --git a/features/securebackup/impl/src/main/res/values-uk/translations.xml b/features/securebackup/impl/src/main/res/values-uk/translations.xml
index a1ce5e529f..db669fe52c 100644
--- a/features/securebackup/impl/src/main/res/values-uk/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-uk/translations.xml
@@ -2,13 +2,17 @@
"Вимкнути резервне копіювання"
"Увімкнути резервне копіювання"
- "Резервне копіювання гарантує, що ви не втратите історію повідомлень. %1$s."
+ "Зберігайте свій криптографічний ідентифікатор і ключі повідомлень на сервері. Це дозволить вам переглядати історію повідомлень на будь-яких нових пристроях. %1$s."
"Резервне копіювання"
+ "Щоб налаштувати відновлення, потрібно ввімкнути зберігання ключів."
+ "Завантажте ключі з цього пристрою"
+ "Дозволити зберігання ключів"
"Змінити ключ відновлення"
+ "Відновіть криптографічну ідентичність та історію повідомлень за допомогою ключа відновлення, якщо ви втратили всі наявні пристрої."
"Введіть ключ відновлення"
- "Ваша резервна копія чату наразі не синхронізована."
+ "Сховище ключів наразі не синхронізовано."
"Налаштувати відновлення"
- "Отримайте доступ до своїх зашифрованих повідомлень, якщо ви втратите всі свої пристрої або вийшли з %1$s системи."
+ "Отримайте доступ до своїх зашифрованих повідомлень, якщо ви втратите всі свої пристрої або вийшли з %1$s на всіх пристроях."
"Відкрийте %1$s на комп\'ютері"
"Увійдіть до вашого облікового запису знову"
"Коли вас попросять підтвердити пристрій, виберіть %1$s"
@@ -16,11 +20,12 @@
"Дотримуйтесь інструкцій, щоб створити новий ключ відновлення"
"Збережіть новий ключ відновлення у менеджері паролів або зашифрованій нотатці"
"Скинути шифрування облікового запису за допомогою іншого пристрою"
- "Дані вашого облікового запису, контакти, налаштування й чати будуть збережені"
+ "Продовжити скидання налаштувань"
+ "Дані вашого облікового запису, контакти, налаштування й бесіди будуть збережені"
"Ви втратите свою наявну історію повідомлень"
- "Вам доведеться підтвердити всі наявні пристрої та контакти знову"
+ "Вам доведеться верифікувати всі наявні пристрої та контакти повторно"
"Скидайте ідентичність тільки якщо ви не маєте доступу до інших пристроїв в обліковому записі та втратили свій ключ відновлення."
- "Скиньте свою ідентичність, якщо не можете підтвердити іншим способом"
+ "Не можете підтвердити? Вам доведеться скинути свою ідентичність."
"Вимкнути"
"Ви втратите зашифровані повідомлення, якщо вийдете з усіх пристроїв."
"Ви впевнені, що хочете вимкнути резервне копіювання?"
@@ -28,36 +33,38 @@
"Не матимете історії зашифрованих повідомлень на нових пристроях"
"Втратите доступ до зашифрованих повідомлень, якщо вийдете з усіх сеансів %1$s"
"Ви впевнені, що хочете вимкнути резервне копіювання?"
- "Отримайте новий ключ відновлення, якщо ви втратили існуючий ключ. Після зміни ключа відновлення ваш старий більше не буде працювати."
+ "Отримайте новий ключ відновлення, якщо ви втратили наявний ключ. Після зміни ключа відновлення ваш попередній більше не працюватиме."
"Згенерувати новий ключ відновлення"
- "Переконайтеся, що ви можете зберігати ключ відновлення в безпечному місці"
+ "Не діліться цим ні з ким!"
"Ключ відновлення змінено"
"Змінити ключ відновлення?"
"Створити новий ключ відновлення"
"Впевніться, що ніхто не дивиться!"
- "Будь ласка, спробуйте ще раз, щоб підтвердити доступ до резервної копії чату."
+ "Будь ласка, спробуйте ще раз, щоб підтвердити доступ до сховища ключів."
"Неправильний ключ відновлення"
"Якщо у вас є ключ безпеки або фраза безпеки, це теж спрацює."
- "Ввести…"
+ "Входимо…"
"Загубили ключ відновлення?"
"Ключ відновлення підтверджено"
+ "Введіть ключ відновлення"
"Скопійовано ключ відновлення"
"Створення…"
"Зберегти ключ відновлення"
- "Запишіть свій ключ відновлення в безпечному місці або збережіть його в диспетчері паролів."
+ "Запишіть цей ключ відновлення в безпечне місце, наприклад, у менеджер паролей, зашифровану записку або власноруч у фізично безпечному місці."
"Торкніться, щоб скопіювати ключ відновлення"
"Збережіть ключ відновлення"
"Після цього кроку ви не зможете отримати доступ до нового ключа відновлення."
"Ви зберегли ключ відновлення?"
"Ваша резервна копія чату захищена ключем відновлення. Якщо вам потрібен новий ключ відновлення після налаштування, ви можете відтворити, вибравши «Змінити ключ відновлення»."
- "Створіть свій ключ відновлення"
- "Переконайтеся, що ви можете зберігати ключ відновлення в безпечному місці"
+ "Згенеруйте ключ відновлення"
+ "Не діліться цим ні з ким!"
"Налаштування відновлення виконано успішно"
"Налаштувати відновлення"
"Так, скинути зараз"
"Цей процес незворотний."
"Ви впевнені, що хочете скинути шифрування?"
- "Ввести…"
+ "Сталася невідома помилка. Будь ласка, перевірте правильність пароля свого облікового запису та повторіть спробу."
+ "Входимо…"
"Підтвердьте, що ви хочете скинути шифрування."
"Введіть пароль облікового запису, щоб продовжити"
diff --git a/features/securebackup/impl/src/main/res/values-zh/translations.xml b/features/securebackup/impl/src/main/res/values-zh/translations.xml
index 74ff0f4414..dc70389692 100644
--- a/features/securebackup/impl/src/main/res/values-zh/translations.xml
+++ b/features/securebackup/impl/src/main/res/values-zh/translations.xml
@@ -2,11 +2,15 @@
"关闭备份"
"开启备份"
- "备份可确保你不会丢失消息历史记录。%1$s。"
- "备份"
+ "将您的密码学身份和消息密钥安全地存储在服务器上。这样您就可以在任何新设备上查看您的消息历史记录。%1$s。"
+ "密钥存储"
+ "必须打开密钥存储才能设置恢复。"
+ "从此设备上传密钥"
+ "允许密钥存储"
"更改恢复密钥"
+ "如果您丢失了所有现有设备,使用恢复密钥恢复您的密码学身份和消息历史记录。"
"输入恢复密钥"
- "您的聊天备份当前不同步。"
+ "您的密钥存储当前不同步。"
"设置恢复"
"在丢失或从 %1$s 登出所有设备的情况下访问加密消息。"
"在桌面设备中打开 %1$s"
@@ -31,28 +35,29 @@
"您确定要关闭备份吗?"
"如果您丢失了现有的恢复密钥,请获取新的恢复密钥。更改恢复密钥后,您的旧密钥将不再起作用。"
"生成新的恢复密钥"
- "确保将恢复密钥存储在安全的地方"
+ "不要告诉任何人!"
"恢复密钥已更改"
"更改恢复密钥?"
"创建新的恢复密钥"
"确保没有人能看到这个界面!"
- "请重试以访问您的聊天备份。"
+ "请重试以确认访问您的密钥存储。"
"恢复密钥不正确"
"如果您有安全密钥或安全短语,也可以用。"
"输入……"
"丢失了恢复密钥?"
"恢复密钥已确认"
+ "输入恢复密钥"
"恢复密钥已复制"
"正在生成……"
"保存恢复密钥"
- "在安全的地方写下恢复密钥或将其保存在密码管理器中。"
+ "将此恢复密钥保存在安全的地方,例如密码管理器、加密笔记或物理保险箱。"
"点击复制恢复密钥"
"保存您的恢复密钥"
"完成此步骤后,您将无法访问新的恢复密钥。"
"您保存了恢复密钥吗?"
"您的聊天备份受恢复密钥保护。如果您在安装后需要新的恢复密钥,则可以通过选择「更改恢复密钥」来重新创建。"
"生成恢复密钥"
- "确保将恢复密钥存储在安全的地方"
+ "不要告诉任何人!"
"恢复设置成功"
"设置恢复"
"是的,立即重置"
diff --git a/features/signedout/impl/src/main/res/values-fi/translations.xml b/features/signedout/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..023a2e81c3
--- /dev/null
+++ b/features/signedout/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,8 @@
+
+
+ "Olet vaihtanut salasanasi toisessa istunnossa"
+ "Olet poistanut istunnon toisesta istunnosta"
+ "Palvelimesi ylläpitäjä on mitätöinyt käyttöoikeutesi"
+ "Sinut on saatettu kirjata ulos jostakin alla luetellusta syystä. Kirjaudu uudelleen sisään jatkaaksesi %s -sovelluksen käyttöä."
+ "Sinut on kirjattu ulos"
+
diff --git a/features/signedout/impl/src/main/res/values-uk/translations.xml b/features/signedout/impl/src/main/res/values-uk/translations.xml
index e11c88388b..ebf364518b 100644
--- a/features/signedout/impl/src/main/res/values-uk/translations.xml
+++ b/features/signedout/impl/src/main/res/values-uk/translations.xml
@@ -2,7 +2,7 @@
"Ви змінили пароль під час іншого сеансу"
"Ви видалили сеанс з іншого сеансу"
- "Адміністратор вашого сервера визнав недійсним ваш доступ"
+ "Адміністратор вашого сервера визнав ваш доступ недійсним"
"Можливо, ви вийшли з системи з однієї з причин, наведених нижче. Будь ласка, увійдіть знову, щоб продовжити використання %s."
"Ви вийшли з системи"
diff --git a/features/userprofile/shared/src/main/res/values-el/translations.xml b/features/userprofile/shared/src/main/res/values-el/translations.xml
index 8dfb9fff92..7d36240486 100644
--- a/features/userprofile/shared/src/main/res/values-el/translations.xml
+++ b/features/userprofile/shared/src/main/res/values-el/translations.xml
@@ -13,5 +13,7 @@
"Άρση αποκλεισμού"
"Θα μπορείς να δεις ξανά όλα τα μηνύματα του."
"Κατάργηση αποκλεισμού χρήστη"
+ "Χρησιμοποίησε την εφαρμογή ιστού για να επαληθεύσεις αυτόν τον χρήστη."
+ "Επαλήθευση %1$s"
"Παρουσιάστηκε σφάλμα κατά την προσπάθεια έναρξης μιας συνομιλίας"
diff --git a/features/userprofile/shared/src/main/res/values-fi/translations.xml b/features/userprofile/shared/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..13e101b18e
--- /dev/null
+++ b/features/userprofile/shared/src/main/res/values-fi/translations.xml
@@ -0,0 +1,19 @@
+
+
+ "Estä"
+ "Estetyt käyttäjät eivät voi lähettää sinulle viestejä ja kaikki heidän viestit piilotetaan. Voit poistaa eston milloin tahansa."
+ "Estä käyttäjä"
+ "Poista esto"
+ "Näet jälleen kaikki heidän lähettämänsä viestit."
+ "Poista käyttäjän esto"
+ "Estä"
+ "Estetyt käyttäjät eivät voi lähettää sinulle viestejä ja kaikki heidän viestit piilotetaan. Voit poistaa eston milloin tahansa."
+ "Estä käyttäjä"
+ "Profiili"
+ "Poista esto"
+ "Näet jälleen kaikki heidän lähettämänsä viestit."
+ "Poista käyttäjän esto"
+ "Vahvista tämä käyttäjä verkkosovelluksen avulla."
+ "Vahvista %1$s"
+ "Keskustelun aloituksessa tapahtui virhe"
+
diff --git a/features/userprofile/shared/src/main/res/values-uk/translations.xml b/features/userprofile/shared/src/main/res/values-uk/translations.xml
index 2caa1d99f0..40dfa190ba 100644
--- a/features/userprofile/shared/src/main/res/values-uk/translations.xml
+++ b/features/userprofile/shared/src/main/res/values-uk/translations.xml
@@ -1,17 +1,19 @@
"Заблокувати"
- "Заблоковані користувачі не зможуть надсилати Вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час."
+ "Заблоковані користувачі не зможуть надсилати вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час."
"Заблокувати користувача"
"Розблокувати"
"Ви знову зможете бачити всі повідомлення від них."
"Розблокувати користувача"
"Заблокувати"
- "Заблоковані користувачі не зможуть надсилати Вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час."
+ "Заблоковані користувачі не зможуть надсилати вам повідомлення, і всі їхні повідомлення будуть приховані. Ви можете розблокувати їх у будь-який час."
"Заблокувати користувача"
"Профіль"
"Розблокувати"
"Ви знову зможете бачити всі повідомлення від них."
"Розблокувати користувача"
- "Під час спроби почати чат сталася помилка"
+ "Використовуйте веб-додаток, щоб верифікувати цього користувача."
+ "Перевірте %1$s"
+ "Під час спроби почати бесіду сталася помилка"
diff --git a/features/userprofile/shared/src/main/res/values-zh/translations.xml b/features/userprofile/shared/src/main/res/values-zh/translations.xml
index dd3df4c2cc..b1b37bdbdc 100644
--- a/features/userprofile/shared/src/main/res/values-zh/translations.xml
+++ b/features/userprofile/shared/src/main/res/values-zh/translations.xml
@@ -13,5 +13,7 @@
"解封"
"可以重新接收他们的消息。"
"解封用户"
+ "使用 Web 应用程序验证此用户。"
+ "验证 %1$s"
"在开始聊天时发生了错误"
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 02a83751a7..30e43eadc9 100644
--- a/features/verifysession/impl/src/main/res/values-cs/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-cs/translations.xml
@@ -35,6 +35,10 @@
"Požadováno ověření"
"Neshodují se"
"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í"
+ "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í"
"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-el/translations.xml b/features/verifysession/impl/src/main/res/values-el/translations.xml
index 3a956d01e8..4da4315796 100644
--- a/features/verifysession/impl/src/main/res/values-el/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-el/translations.xml
@@ -17,6 +17,7 @@
"Σύγκριση αριθμών"
"Η νέα σου συνεδρία έχει πλέον επαληθευτεί. Έχει πρόσβαση στα κρυπτογραφημένα μηνύματά σας και άλλοι χρήστες θα το βλέπουν ως αξιόπιστο."
"Εισαγωγή κλειδιού ανάκτησης"
+ "Είτε το αίτημα έληξε είτε απορρίφθηκε είτε υπήρξε αναντιστοιχία επαλήθευσης."
"Απέδειξε ότι είσαι εσύ για να αποκτήσεις πρόσβαση στο κρυπτογραφημένο ιστορικό μηνυμάτων σου."
"Άνοιξε μια υπάρχουσα συνεδρία"
"Επανάληψη επαλήθευσης"
@@ -24,6 +25,10 @@
"Αναμονή για αντιστοίχιση"
"Σύγκρινε ένα μοναδικό σύνολο emojis."
"Σύγκρινε τα μοναδικά emoji και σιγουρέψου ότι εμφανίζονται με την ίδια σειρά."
+ "Έχεις συνδεθεί"
+ "Είτε το αίτημα έληξε είτε απορρίφθηκε είτε υπήρξε αναντιστοιχία επαλήθευσης."
+ "Συνέχισε μόνο εάν ξεκίνησες εσύ αυτήν την επαλήθευση."
+ "Επαλήθευσε την άλλη συσκευή για να διατηρήσεις το ιστορικό μηνυμάτων σου ασφαλές."
"Ζητήθηκε επαλήθευση"
"Δεν ταιριάζουν"
"Ταιριάζουν"
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 94464855ec..dc9367bd02 100644
--- a/features/verifysession/impl/src/main/res/values-et/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-et/translations.xml
@@ -35,6 +35,10 @@
"Verifitseerimispäring"
"Nad ei klapi omavahel"
"Nad klapivad omavahel"
+ "Enne kui alustad siin verifitseerimist, palun ava rakendus teises seadmes."
+ "Ava rakendus teises verifitseeritud seadmes"
+ "Sa peaksid teises seadmes nägema hüpikakent. Palun alusta sealt verifitseerimist."
+ "Alusta verifitseerimist teises seadmes"
"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-fi/translations.xml b/features/verifysession/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..ec67f48d3a
--- /dev/null
+++ b/features/verifysession/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,45 @@
+
+
+ "Etkö voi vahvistaa?"
+ "Luo uusi palautusavain"
+ "Vahvista tämä laite suojattua viestintää varten."
+ "Vahvista identiteettisi"
+ "Käytä toista laitetta"
+ "Käytä palautusavainta"
+ "Nyt voit lukea ja lähettää viestejä turvallisesti, ja kaikki, joiden kanssa keskustelet, voivat myös luottaa tähän laitteeseen."
+ "Laite vahvistettu"
+ "Käytä toista laitetta"
+ "Odotetaan toista laitetta…"
+ "Jokin ei vaikuta oikealta. Joko pyyntö aikakatkaistiin tai hylättiin."
+ "Vahvista, että alla olevat hymiöt vastaavat toisella laitteella näkyviä hymiöitä."
+ "Vertaa hymiöitä"
+ "Varmista, että alla olevat numerot vastaavat toisessa istunnossa näkyviä numeroita."
+ "Vertaa numeroita"
+ "Uusi kirjautumisesi on nyt vahvistettu. Sillä on pääsy salattuihin viesteihisi, ja muut käyttäjät näkevät sen luotettuna."
+ "Käytä palautusavainta"
+ "Joko pyyntö aikakatkaistiin, pyyntö hylättiin tai vahvistus ei täsmännyt."
+ "Vahvista, että se olet sinä, jotta näet aiemmat salatut viestisi."
+ "Avaa laite, jossa olet jo kirjautuneena"
+ "Yritä vahvistusta uudelleen"
+ "Olen valmis"
+ "Odotetaan vahvistusta…"
+ "Vertaa emojisarjaa."
+ "Vertaa hymiöitä, varmistaen että ne ovat samassa järjestyksessä."
+ "Kirjautui sisään"
+ "Joko pyyntö aikakatkaistiin, pyyntö hylättiin tai vahvistus ei täsmännyt."
+ "Vahvistus epäonnistui"
+ "Jatka vain, jos sinä aloitit tämän vahvistuksen."
+ "Vahvista toinen laite pitääksesi viestihistoriasi turvassa."
+ "Nyt voit lukea tai lähettää viestejä turvallisesti toisella laitteellasi."
+ "Laite vahvistettu"
+ "Vahvistus pyydetty"
+ "Ne eivät täsmää"
+ "Ne täsmäävät"
+ "Varmista, että sovellus on avoinna toisessa laitteessa, ennen kuin aloitat vahvistuksen tästä."
+ "Avaa sovellus toisella vahvistetulla laitteella"
+ "Sinun pitäisi nähdä ponnahdusikkuna toisessa laitteessa. Aloita vahvistus nyt sieltä."
+ "Aloita vahvistus toisella laitteella"
+ "Hyväksy vahvistuspyyntö toisella laitteella jatkaaksesi."
+ "Odotetaan pyynnön hyväksymistä"
+ "Kirjaudutaan ulos…"
+
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 9fbfbb7f76..a057a73a65 100644
--- a/features/verifysession/impl/src/main/res/values-fr/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-fr/translations.xml
@@ -35,6 +35,10 @@
"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é"
+ "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"
"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-in/translations.xml b/features/verifysession/impl/src/main/res/values-in/translations.xml
index fb4df0e8a3..c19ebe602c 100644
--- a/features/verifysession/impl/src/main/res/values-in/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-in/translations.xml
@@ -35,6 +35,10 @@
"Verifikasi diminta"
"Mereka tidak cocok"
"Mereka cocok"
+ "Pastikan Anda membuka aplikasi di perangkat lain sebelum memulai verifikasi dari sini."
+ "Buka aplikasi di perangkat terverifikasi lain"
+ "Anda akan melihat popup di perangkat lain. Mulai verifikasi dari sana sekarang."
+ "Mulai verifikasi di perangkat lain"
"Terima permintaan untuk memulai proses verifikasi di sesi Anda yang lain untuk melanjutkan."
"Menunggu untuk menerima permintaan"
"Mengeluarkan dari akun…"
diff --git a/features/verifysession/impl/src/main/res/values-ru/translations.xml b/features/verifysession/impl/src/main/res/values-ru/translations.xml
index 3a6e1a976e..61895a94a3 100644
--- a/features/verifysession/impl/src/main/res/values-ru/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-ru/translations.xml
@@ -35,6 +35,10 @@
"Запрошено подтверждение"
"Они не совпадают"
"Они совпадают"
+ "Прежде чем начать проверку, убедитесь, что приложение открыто на другом устройстве."
+ "Откройте приложение на другом проверенном устройстве"
+ "Вы должны увидеть всплывающее окно на другом устройстве. Начните проверку оттуда прямо сейчас."
+ "Начать проверку на другом устройстве"
"Чтобы продолжить, примите запрос на запуск процесса подтверждения в другом сеансе."
"Ожидание принятия запроса"
"Выполняется выход…"
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 0bee05d7c7..9612618b58 100644
--- a/features/verifysession/impl/src/main/res/values-sk/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-sk/translations.xml
@@ -35,6 +35,10 @@
"Vyžadované overenie"
"Nezhodujú sa"
"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í"
+ "Na druhom zariadení by sa malo zobraziť vyskakovacie okno. Začnite teraz overovanie odtiaľ."
+ "Spustiť overovanie na druhom zariadení"
"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-uk/translations.xml b/features/verifysession/impl/src/main/res/values-uk/translations.xml
index 3a2b3cea6b..773adf6318 100644
--- a/features/verifysession/impl/src/main/res/values-uk/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-uk/translations.xml
@@ -2,10 +2,13 @@
"Не можете підтвердити?"
"Створити новий ключ відновлення"
- "Перевірте цей пристрій, щоб налаштувати безпечний обмін повідомленнями."
- "Підтвердіть, що це ви"
+ "Верифікуйте цей пристрій, щоб налаштувати безпечний обмін повідомленнями."
+ "Підтвердьте, що це ви"
+ "Використовуйте інший пристрій"
+ "Використовуйте ключ відновлення"
"Тепер ви можете безпечно читати або надсилати повідомлення, і кожен, з ким ви спілкуєтесь, також може довіряти цьому пристрою."
"Пристрій перевірено"
+ "Використовуйте інший пристрій"
"Чекає на інше пристрій…"
"Щось не так. Або час очікування запиту минув, або в запиті було відмовлено."
"Переконайтеся, що емодзі нижче збігаються з тими, що відображаються під час іншого сеансу."
@@ -14,16 +17,29 @@
"Порівняйте цифри"
"Ваш новий сеанс підтверджено. Він матиме доступ до ваших зашифрованих повідомлень, й інші користувачі вважатимуть його надійним."
"Введіть ключ відновлення"
- "Доведіть, що це Ви, щоб отримати доступ до історії зашифрованих повідомлень."
- "Відкрийте існуючий сеанс"
- "Повторити перевірку"
- "Я готовий"
+ "Або час очікування запиту минув, або запит було відхилено, або виникла розбіжність у верифікації."
+ "Доведіть, що це ви, щоб отримати доступ до історії зашифрованих повідомлень."
+ "Відкрийте активний сеанс"
+ "Повторити верифікацію"
+ "У мене все готово"
"Очікування збігу"
- "Порівняйте унікальний набір емоджи."
- "Порівняйте унікальні емодзі, переконавшись, що вони відображаються в однаковому порядку."
+ "Порівняйте унікальний набір емоджі."
+ "Порівняйте унікальні емодзі, переконавшись, що вони показані в однаковому порядку."
+ "Увійшов"
+ "Або час очікування запиту минув, або запит було відхилено, або виникла розбіжність у верифікації."
+ "Не вдалося перевірити"
+ "Продовжуйте, лише якщо ви ініціювали цю перевірку."
+ "Перевірте інший пристрій, щоб захистити історію повідомлень."
+ "Тепер ви можете безпечно читати або надсилати повідомлення на іншому пристрої."
+ "Пристрій перевірено"
+ "Запитано на верифікацію"
"Вони не збігаються"
"Вони збігаються"
- "Щоб продовжити, прийміть запит на початок процесу перевірки в іншому сеансі."
+ "Перш ніж починати перевірку звідси, переконайтеся, що програму відкрито на іншому пристрої."
+ "Відкрийте додаток на іншому перевіреному пристрої"
+ "Ви повинні побачити спливаюче вікно на іншому пристрої. Почніть перевірку звідти."
+ "Почніть перевірку на іншому пристрої"
+ "Щоб продовжити, прийміть запит на початок процесу верифікації в іншому сеансі."
"Очікування на прийняття запиту"
"Вихід…"
diff --git a/features/verifysession/impl/src/main/res/values-zh/translations.xml b/features/verifysession/impl/src/main/res/values-zh/translations.xml
index 5d8e7bb200..170a988b43 100644
--- a/features/verifysession/impl/src/main/res/values-zh/translations.xml
+++ b/features/verifysession/impl/src/main/res/values-zh/translations.xml
@@ -17,15 +17,26 @@
"比较数字"
"新设备已经成功验证。现在新设备可以访问加密信息,其他用户也会信任这个设备。"
"输入恢复密钥"
+ "要么请求超时,要么请求被拒绝,要么验证不匹配。"
"证明自己的身份以访问加密历史消息。"
"打开已有会话"
"重试验证"
"准备就绪"
- "等待比对"
+ "等待比对……"
"比较一组表情符号。"
"比较表情符号,确保它们以相同顺序排列。"
+ "已登录"
+ "要么请求超时,要么请求被拒绝,要么验证不匹配。"
+ "验证失败"
+ "仅在你发起此验证后才继续。"
+ "验证另一台设备以确保您的消息历史记录保密。"
+ "现在,您可以在其他设备上安全地阅读或发送消息。"
+ "设备已验证"
+ "已请求验证"
"不匹配"
"匹配"
+ "在另一台验证的设备上打开应用"
+ "在另一台设备上开始验证"
"请在其他会话中接受验证请求。"
"等待接受请求"
"正在登出…"
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1177419d2e..11c8d3d749 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,14 +3,14 @@
[versions]
# Project
-android_gradle_plugin = "8.7.1"
+android_gradle_plugin = "8.7.2"
kotlin = "2.0.21"
kotlinpoet = "2.0.0"
-ksp = "2.0.21-1.0.26"
+ksp = "2.0.21-1.0.28"
firebaseAppDistribution = "5.0.0"
# AndroidX
-core = "1.13.1"
+core = "1.15.0"
# Warning: there is an issue with 1.1.0 and 1.1.1, that I cannot repro on unit test.
# To repro with the application:
# Clear the storage of the application and run the app. Nearly each time, there is an infinite loading
@@ -19,13 +19,13 @@ core = "1.13.1"
datastore = "1.0.0"
constraintlayout = "2.2.0"
constraintlayout_compose = "1.1.0"
-lifecycle = "2.8.6"
+lifecycle = "2.8.7"
activity = "1.9.3"
media3 = "1.4.1"
camera = "1.4.0"
# Compose
-compose_bom = "2024.10.01"
+compose_bom = "2024.11.00"
composecompiler = "1.5.15"
# Coroutines
@@ -44,17 +44,17 @@ serialization_json = "1.7.3"
#other
coil = "2.7.0"
showkase = "1.0.3"
-appyx = "1.4.0"
+appyx = "1.5.1"
sqldelight = "2.0.2"
wysiwyg = "2.37.13"
-telephoto = "0.13.0"
+telephoto = "0.14.0"
# Dependency analysis
dependencyAnalysis = "2.4.2"
# DI
dagger = "2.52"
-anvil = "0.3.3"
+anvil = "0.4.0"
# Auto service
autoservice = "1.1.1"
@@ -68,7 +68,7 @@ kover = "0.8.3"
android_gradle_plugin = { module = "com.android.tools.build:gradle", version.ref = "android_gradle_plugin" }
compose_compiler_plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
# https://developer.android.com/studio/write/java8-support#library-desugaring-versions
-android_desugar = "com.android.tools:desugar_jdk_libs:2.1.2"
+android_desugar = "com.android.tools:desugar_jdk_libs:2.1.3"
anvil_gradle_plugin = { module = "dev.zacsweers.anvil:gradle-plugin", version.ref = "anvil" }
kotlin_gradle_plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" }
@@ -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.5.1"
+google_firebase_bom = "com.google.firebase:firebase-bom:33.6.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" }
@@ -154,7 +154,7 @@ test_konsist = "com.lemonappdev:konsist:0.16.1"
test_turbine = "app.cash.turbine:turbine:1.2.0"
test_truth = "com.google.truth:truth:1.4.4"
test_parameter_injector = "com.google.testparameterinjector:test-parameter-injector:1.18"
-test_robolectric = "org.robolectric:robolectric:4.13"
+test_robolectric = "org.robolectric:robolectric:4.14"
test_appyx_junit = { module = "com.bumble.appyx:testing-junit4", version.ref = "appyx" }
test_composable_preview_scanner = "com.github.sergio-sastre.ComposablePreviewScanner:android:0.1.2"
@@ -173,7 +173,7 @@ jsoup = "org.jsoup:jsoup:1.18.1"
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.60"
+matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.63"
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,15 +187,15 @@ 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.5.2"
+maplibre = "org.maplibre.gl:android-sdk:11.6.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"
zxing_cpp = "io.github.zxing-cpp:android:2.2.0"
# Analytics
-posthog = "com.posthog:posthog-android:3.9.0"
-sentry = "io.sentry:sentry-android:7.16.0"
+posthog = "com.posthog:posthog-android:3.9.2"
+sentry = "io.sentry:sentry-android:7.17.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.1"
dependencygraph = "com.savvasdalkitsis.module-dependency-graph:0.12"
-dependencycheck = "org.owasp.dependencycheck:10.0.4"
+dependencycheck = "org.owasp.dependencycheck:11.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-fi/translations.xml b/libraries/androidutils/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..cbf6ef5550
--- /dev/null
+++ b/libraries/androidutils/src/main/res/values-fi/translations.xml
@@ -0,0 +1,4 @@
+
+
+ "Yhteensopivaa sovellusta ei löytynyt käsittelemään tätä toimintoa."
+
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/NumberedListMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/NumberedListMolecule.kt
index 29cdfdab4f..8d03c82a2f 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/NumberedListMolecule.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/NumberedListMolecule.kt
@@ -41,7 +41,7 @@ fun NumberedListMolecule(
private fun ItemNumber(
index: Int,
) {
- val color = ElementTheme.colors.textPlaceholder
+ val color = ElementTheme.colors.textSecondary
Box(
modifier = Modifier
.border(1.dp, color, CircleShape)
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt
deleted file mode 100644
index 61463ccb15..0000000000
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledOutlinedTextField.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.libraries.designsystem.components
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-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.OutlinedTextField
-import io.element.android.libraries.designsystem.theme.components.Text
-
-@Composable
-fun LabelledOutlinedTextField(
- label: String,
- value: String,
- onValueChange: (String) -> Unit,
- modifier: Modifier = Modifier,
- placeholder: String? = null,
- singleLine: Boolean = false,
- maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
-) {
- Column(
- modifier = modifier,
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- color = MaterialTheme.colorScheme.primary,
- text = label
- )
-
- OutlinedTextField(
- modifier = Modifier.fillMaxWidth(),
- value = value,
- placeholder = placeholder?.let { { Text(placeholder) } },
- onValueChange = onValueChange,
- singleLine = singleLine,
- maxLines = maxLines,
- keyboardOptions = keyboardOptions,
- )
- }
-}
-
-@PreviewsDayNight
-@Composable
-internal fun LabelledOutlinedTextFieldPreview() = ElementPreview {
- Column {
- LabelledOutlinedTextField(
- label = "Room name",
- value = "",
- onValueChange = {},
- placeholder = "e.g. Product Sprint",
- )
- LabelledOutlinedTextField(
- label = "Room name",
- value = "a room name",
- onValueChange = {},
- placeholder = "e.g. Product Sprint",
- )
- }
-}
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt
deleted file mode 100644
index 56743b347f..0000000000
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledTextField.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.libraries.designsystem.components
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-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
-import io.element.android.libraries.designsystem.theme.components.TextField
-
-@Composable
-fun LabelledTextField(
- label: String,
- value: String,
- onValueChange: (String) -> Unit,
- modifier: Modifier = Modifier,
- placeholder: String? = null,
- singleLine: Boolean = false,
- maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
-) {
- Column(
- modifier = modifier,
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = ElementTheme.typography.fontBodyMdRegular,
- color = MaterialTheme.colorScheme.primary,
- text = label
- )
-
- TextField(
- modifier = Modifier.fillMaxWidth(),
- value = value,
- placeholder = placeholder?.let { { Text(placeholder) } },
- onValueChange = onValueChange,
- singleLine = singleLine,
- maxLines = maxLines,
- keyboardOptions = keyboardOptions,
- )
- }
-}
-
-@PreviewsDayNight
-@Composable
-internal fun LabelledTextFieldPreview() = ElementPreview {
- Column {
- LabelledTextField(
- label = "Room name",
- value = "",
- onValueChange = {},
- placeholder = "e.g. Product Sprint",
- )
- LabelledTextField(
- label = "Room name",
- value = "a room name",
- onValueChange = {},
- placeholder = "e.g. Product Sprint",
- )
- }
-}
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/TextFieldListItem.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/TextFieldListItem.kt
index f9201ec045..c5c05de4b8 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/TextFieldListItem.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/list/TextFieldListItem.kt
@@ -9,6 +9,7 @@ package io.element.android.libraries.designsystem.components.list
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -18,7 +19,6 @@ 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.OutlinedTextField
import io.element.android.libraries.designsystem.theme.components.Text
@Composable
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Autofill.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Autofill.kt
new file mode 100644
index 0000000000..9c699ea0a9
--- /dev/null
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Autofill.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.designsystem.modifiers
+
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.autofill.AutofillNode
+import androidx.compose.ui.autofill.AutofillType
+import androidx.compose.ui.composed
+import androidx.compose.ui.focus.onFocusChanged
+import androidx.compose.ui.layout.boundsInWindow
+import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.platform.LocalAutofill
+import androidx.compose.ui.platform.LocalAutofillTree
+
+@Suppress("ModifierComposed")
+@OptIn(ExperimentalComposeUiApi::class)
+fun Modifier.autofill(autofillTypes: List, onFill: (String) -> Unit) = composed {
+ val autofillNode = AutofillNode(autofillTypes, onFill = onFill)
+ LocalAutofillTree.current += autofillNode
+
+ val autofill = LocalAutofill.current
+
+ this
+ .onGloballyPositioned {
+ // Inform autofill framework of where our composable is so it can show the popup in the right place
+ autofillNode.boundingBox = it.boundsInWindow()
+ }
+ .onFocusChanged {
+ autofill?.run {
+ if (it.isFocused) {
+ requestAutofillForNode(autofillNode)
+ } else {
+ cancelAutofillForNode(autofillNode)
+ }
+ }
+ }
+}
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/OnTabOrEnterKeyFocusNext.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/OnTabOrEnterKeyFocusNext.kt
new file mode 100644
index 0000000000..9d4c45977a
--- /dev/null
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/OnTabOrEnterKeyFocusNext.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.designsystem.modifiers
+
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusDirection
+import androidx.compose.ui.focus.FocusManager
+import androidx.compose.ui.input.key.Key
+import androidx.compose.ui.input.key.KeyEventType
+import androidx.compose.ui.input.key.key
+import androidx.compose.ui.input.key.onPreviewKeyEvent
+import androidx.compose.ui.input.key.type
+
+fun Modifier.onTabOrEnterKeyFocusNext(focusManager: FocusManager): Modifier = onPreviewKeyEvent { event ->
+ if (event.key == Key.Tab || event.key == Key.Enter) {
+ if (event.type == KeyEventType.KeyUp) {
+ focusManager.moveFocus(FocusDirection.Down)
+ }
+ true
+ } else {
+ false
+ }
+}
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/OutlinedTextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/FilledTextField.kt
similarity index 70%
rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/OutlinedTextField.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/FilledTextField.kt
index 97a6bcdd38..1055bea107 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/OutlinedTextField.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/FilledTextField.kt
@@ -15,25 +15,19 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.LocalTextStyle
-import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.TextFieldColors
+import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
-import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.FocusDirection
-import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.input.key.Key
-import androidx.compose.ui.input.key.KeyEventType
-import androidx.compose.ui.input.key.key
-import androidx.compose.ui.input.key.onPreviewKeyEvent
-import androidx.compose.ui.input.key.type
+import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+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
@@ -42,7 +36,7 @@ import io.element.android.libraries.designsystem.utils.allBooleans
import io.element.android.libraries.designsystem.utils.asInt
@Composable
-fun OutlinedTextField(
+fun FilledTextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
@@ -60,12 +54,16 @@ fun OutlinedTextField(
keyboardActions: KeyboardActions = KeyboardActions.Default,
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
- minLines: Int = 1,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- shape: Shape = OutlinedTextFieldDefaults.shape,
- colors: TextFieldColors = OutlinedTextFieldDefaults.colors()
+ shape: Shape = TextFieldDefaults.shape,
+ colors: TextFieldColors = TextFieldDefaults.colors(
+ unfocusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
+ focusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
+ disabledContainerColor = ElementTheme.colors.bgSubtleSecondary,
+ errorContainerColor = ElementTheme.colors.bgSubtleSecondary,
+ )
) {
- androidx.compose.material3.OutlinedTextField(
+ androidx.compose.material3.TextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
@@ -83,7 +81,6 @@ fun OutlinedTextField(
keyboardActions = keyboardActions,
singleLine = singleLine,
maxLines = maxLines,
- minLines = minLines,
interactionSource = interactionSource,
shape = shape,
colors = colors,
@@ -91,7 +88,7 @@ fun OutlinedTextField(
}
@Composable
-fun OutlinedTextField(
+fun FilledTextField(
value: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
modifier: Modifier = Modifier,
@@ -108,12 +105,12 @@ fun OutlinedTextField(
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
keyboardActions: KeyboardActions = KeyboardActions.Default,
singleLine: Boolean = false,
- maxLines: Int = Int.MAX_VALUE,
+ maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- shape: Shape = OutlinedTextFieldDefaults.shape,
- colors: TextFieldColors = OutlinedTextFieldDefaults.colors()
+ shape: Shape = TextFieldDefaults.shape,
+ colors: TextFieldColors = TextFieldDefaults.colors()
) {
- androidx.compose.material3.OutlinedTextField(
+ androidx.compose.material3.TextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
@@ -137,37 +134,62 @@ fun OutlinedTextField(
)
}
-@OptIn(ExperimentalComposeUiApi::class)
-fun Modifier.onTabOrEnterKeyFocusNext(focusManager: FocusManager): Modifier = onPreviewKeyEvent { event ->
- if (event.key == Key.Tab || event.key == Key.Enter) {
- if (event.type == KeyEventType.KeyUp) {
- focusManager.moveFocus(FocusDirection.Down)
- }
- true
- } else {
- false
- }
-}
+@Preview(group = PreviewGroup.TextFields)
+@Composable
+internal fun FilledTextFieldLightPreview() =
+ ElementPreviewLight { ContentToPreview() }
@Preview(group = PreviewGroup.TextFields)
@Composable
-internal fun OutlinedTextFieldsPreview() = ElementPreviewLight { ContentToPreview() }
+internal fun FilledTextFieldDarkPreview() =
+ ElementPreviewDark { ContentToPreview() }
-@Preview(group = PreviewGroup.TextFields)
-@Composable
-internal fun OutlinedTextFieldsDarkPreview() = ElementPreviewDark { ContentToPreview() }
-
-@Composable
@ExcludeFromCoverage
+@Composable
private fun ContentToPreview() {
Column(modifier = Modifier.padding(4.dp)) {
allBooleans.forEach { isError ->
allBooleans.forEach { enabled ->
allBooleans.forEach { readonly ->
- OutlinedTextField(
+ FilledTextField(
+ value = "Hello er=${isError.asInt()}, en=${enabled.asInt()}, ro=${readonly.asInt()}",
+ onValueChange = {},
+ label = { Text(text = "label") },
+ isError = isError,
+ enabled = enabled,
+ readOnly = readonly,
+ )
+ Spacer(modifier = Modifier.height(2.dp))
+ }
+ }
+ }
+ }
+}
+
+@Preview(group = PreviewGroup.TextFields)
+@Composable
+internal fun FilledTextFieldValueLightPreview() =
+ ElementPreviewLight { FilledTextFieldValueContentToPreview() }
+
+@Preview(group = PreviewGroup.TextFields)
+@Composable
+internal fun FilledTextFieldValueTextFieldDarkPreview() =
+ ElementPreviewDark { FilledTextFieldValueContentToPreview() }
+
+@ExcludeFromCoverage
+@Composable
+private fun FilledTextFieldValueContentToPreview() {
+ Column(modifier = Modifier.padding(4.dp)) {
+ allBooleans.forEach { isError ->
+ allBooleans.forEach { enabled ->
+ allBooleans.forEach { readonly ->
+ FilledTextField(
+ value = TextFieldValue(
+ text = "Hello er=${isError.asInt()}, en=${enabled.asInt()}, ro=${readonly.asInt()}",
+ selection = TextRange(0, "Hello".length),
+ ),
onValueChange = {},
label = { Text(text = "label") },
- value = "Hello er=${isError.asInt()}, en=${enabled.asInt()}, ro=${readonly.asInt()}",
isError = isError,
enabled = enabled,
readOnly = readonly,
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TextField.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TextField.kt
index 0a3e4c74c2..964c245d02 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TextField.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/TextField.kt
@@ -7,36 +7,37 @@
package io.element.android.libraries.designsystem.theme.components
+import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.collectIsFocusedAsState
+import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material3.LocalTextStyle
-import androidx.compose.material3.TextFieldColors
-import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
-import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
-import androidx.compose.ui.autofill.AutofillNode
-import androidx.compose.ui.autofill.AutofillType
-import androidx.compose.ui.composed
-import androidx.compose.ui.focus.onFocusChanged
-import androidx.compose.ui.graphics.Shape
-import androidx.compose.ui.layout.boundsInWindow
-import androidx.compose.ui.layout.onGloballyPositioned
-import androidx.compose.ui.platform.LocalAutofill
-import androidx.compose.ui.platform.LocalAutofillTree
-import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.tooling.preview.Preview
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.architecture.coverage.ExcludeFromCoverage
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
@@ -44,56 +45,63 @@ import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.utils.allBooleans
import io.element.android.libraries.designsystem.utils.asInt
+/**
+ * https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=2008-37137
+ */
@Composable
fun TextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
- enabled: Boolean = true,
- readOnly: Boolean = false,
- textStyle: TextStyle = LocalTextStyle.current,
- label: @Composable (() -> Unit)? = null,
- placeholder: @Composable (() -> Unit)? = null,
+ label: String? = null,
+ supportingText: String? = null,
+ placeholder: String? = null,
leadingIcon: @Composable (() -> Unit)? = null,
trailingIcon: @Composable (() -> Unit)? = null,
- supportingText: @Composable (() -> Unit)? = null,
isError: Boolean = false,
- visualTransformation: VisualTransformation = VisualTransformation.None,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
- keyboardActions: KeyboardActions = KeyboardActions.Default,
+ enabled: Boolean = true,
+ readOnly: Boolean = false,
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
+ minLines: Int = 1,
+ keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
+ keyboardActions: KeyboardActions = KeyboardActions.Default,
+ visualTransformation: VisualTransformation = VisualTransformation.None,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- shape: Shape = TextFieldDefaults.shape,
- colors: TextFieldColors = TextFieldDefaults.colors(
- unfocusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
- focusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
- disabledContainerColor = ElementTheme.colors.bgSubtleSecondary,
- errorContainerColor = ElementTheme.colors.bgSubtleSecondary,
- )
+ onTextLayout: (TextLayoutResult) -> Unit = {},
) {
- androidx.compose.material3.TextField(
+ val isFocused by interactionSource.collectIsFocusedAsState()
+ BasicTextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
+ textStyle = textFieldStyle(enabled),
+ interactionSource = interactionSource,
enabled = enabled,
- readOnly = readOnly,
- textStyle = textStyle,
- label = label,
- placeholder = placeholder,
- leadingIcon = leadingIcon,
- trailingIcon = trailingIcon,
- supportingText = supportingText,
- isError = isError,
- visualTransformation = visualTransformation,
- keyboardOptions = keyboardOptions,
- keyboardActions = keyboardActions,
singleLine = singleLine,
maxLines = maxLines,
- interactionSource = interactionSource,
- shape = shape,
- colors = colors,
- )
+ minLines = minLines,
+ readOnly = readOnly,
+ cursorBrush = SolidColor(ElementTheme.colors.textPrimary),
+ keyboardOptions = keyboardOptions,
+ keyboardActions = keyboardActions,
+ visualTransformation = visualTransformation,
+ onTextLayout = onTextLayout,
+ ) { innerTextField ->
+ DecorationBox(
+ label = label,
+ readOnly = readOnly,
+ enabled = enabled,
+ isFocused = isFocused,
+ isError = isError,
+ leadingIcon = leadingIcon,
+ placeholder = placeholder,
+ isTextEmpty = value.isEmpty(),
+ innerTextField = innerTextField,
+ trailingIcon = trailingIcon,
+ supportingText = supportingText
+ )
+ }
}
@Composable
@@ -101,69 +109,200 @@ fun TextField(
value: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
modifier: Modifier = Modifier,
- enabled: Boolean = true,
- readOnly: Boolean = false,
- textStyle: TextStyle = LocalTextStyle.current,
- label: @Composable (() -> Unit)? = null,
- placeholder: @Composable (() -> Unit)? = null,
+ label: String? = null,
+ supportingText: String? = null,
+ placeholder: String? = null,
leadingIcon: @Composable (() -> Unit)? = null,
trailingIcon: @Composable (() -> Unit)? = null,
- supportingText: @Composable (() -> Unit)? = null,
isError: Boolean = false,
- visualTransformation: VisualTransformation = VisualTransformation.None,
- keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
- keyboardActions: KeyboardActions = KeyboardActions.Default,
+ enabled: Boolean = true,
+ readOnly: Boolean = false,
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
+ minLines: Int = 1,
+ keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
+ keyboardActions: KeyboardActions = KeyboardActions.Default,
+ visualTransformation: VisualTransformation = VisualTransformation.None,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
- shape: Shape = TextFieldDefaults.shape,
- colors: TextFieldColors = TextFieldDefaults.colors()
+ onTextLayout: (TextLayoutResult) -> Unit = {},
) {
- androidx.compose.material3.TextField(
+ val isFocused by interactionSource.collectIsFocusedAsState()
+ BasicTextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
+ textStyle = textFieldStyle(enabled),
+ interactionSource = interactionSource,
enabled = enabled,
- readOnly = readOnly,
- textStyle = textStyle,
- label = label,
- placeholder = placeholder,
- leadingIcon = leadingIcon,
- trailingIcon = trailingIcon,
- supportingText = supportingText,
- isError = isError,
- visualTransformation = visualTransformation,
- keyboardOptions = keyboardOptions,
- keyboardActions = keyboardActions,
singleLine = singleLine,
maxLines = maxLines,
- interactionSource = interactionSource,
- shape = shape,
- colors = colors,
+ minLines = minLines,
+ readOnly = readOnly,
+ cursorBrush = SolidColor(ElementTheme.colors.textPrimary),
+ keyboardOptions = keyboardOptions,
+ keyboardActions = keyboardActions,
+ visualTransformation = visualTransformation,
+ onTextLayout = onTextLayout,
+ ) { innerTextField ->
+ DecorationBox(
+ label = label,
+ readOnly = readOnly,
+ enabled = enabled,
+ isFocused = isFocused,
+ isError = isError,
+ leadingIcon = leadingIcon,
+ placeholder = placeholder,
+ isTextEmpty = value.text.isEmpty(),
+ innerTextField = innerTextField,
+ trailingIcon = trailingIcon,
+ supportingText = supportingText
+ )
+ }
+}
+
+@Composable
+private fun DecorationBox(
+ label: String?,
+ enabled: Boolean,
+ readOnly: Boolean,
+ isFocused: Boolean,
+ isError: Boolean,
+ placeholder: String?,
+ isTextEmpty: Boolean,
+ supportingText: String?,
+ leadingIcon: @Composable (() -> Unit)?,
+ trailingIcon: @Composable (() -> Unit)?,
+ innerTextField: @Composable () -> Unit,
+) {
+ Column {
+ if (label != null) {
+ Text(
+ text = label,
+ color = ElementTheme.colors.textPrimary,
+ style = ElementTheme.typography.fontBodyMdRegular,
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+ TextFieldContainer(
+ enabled = enabled,
+ readOnly = readOnly,
+ isFocused = isFocused,
+ isError = isError
+ ) {
+ Row(modifier = Modifier.padding(16.dp)) {
+ if (leadingIcon != null) {
+ CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconSecondary) {
+ leadingIcon()
+ }
+ Spacer(modifier = Modifier.width(8.dp))
+ }
+ Box(modifier = Modifier.weight(1f)) {
+ if (placeholder != null && isTextEmpty) {
+ Text(
+ text = placeholder,
+ color = ElementTheme.colors.textSecondary,
+ style = ElementTheme.typography.fontBodyLgRegular,
+ )
+ }
+ innerTextField()
+ }
+ if (trailingIcon != null) {
+ Spacer(modifier = Modifier.width(8.dp))
+ CompositionLocalProvider(LocalContentColor provides ElementTheme.colors.iconSecondary) {
+ trailingIcon()
+ }
+ }
+ }
+ }
+ if (supportingText != null) {
+ Spacer(modifier = Modifier.height(4.dp))
+ SupportingTextLayout(isError, supportingText)
+ }
+ }
+}
+
+@Composable
+private fun TextFieldContainer(
+ enabled: Boolean,
+ readOnly: Boolean,
+ isFocused: Boolean,
+ isError: Boolean,
+ content: @Composable () -> Unit
+) {
+ Surface(
+ shape = RoundedCornerShape(4.dp),
+ border = if (readOnly) {
+ null
+ } else {
+ BorderStroke(
+ width = if (isFocused) 2.dp else 1.dp,
+ color = when {
+ !enabled -> ElementTheme.colors.borderDisabled
+ isError -> ElementTheme.colors.borderCriticalPrimary
+ isFocused -> ElementTheme.colors.borderInteractiveHovered
+ else -> ElementTheme.colors.borderInteractiveSecondary
+ }
+ )
+ },
+ color = when {
+ readOnly -> ElementTheme.colors.bgSubtleSecondary
+ !enabled -> ElementTheme.colors.bgCanvasDisabled
+ else -> ElementTheme.colors.bgCanvasDefault
+ },
+ content = content
+ )
+}
+
+@Composable
+private fun SupportingTextLayout(isError: Boolean, supportingText: String) {
+ Row(horizontalArrangement = spacedBy(4.dp)) {
+ if (isError) {
+ Icon(
+ imageVector = CompoundIcons.Error(),
+ contentDescription = null,
+ modifier = Modifier.size(16.dp),
+ tint = ElementTheme.colors.iconCriticalPrimary
+ )
+ }
+ Text(
+ text = supportingText,
+ color = if (isError) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary,
+ style = ElementTheme.typography.fontBodySmRegular,
+ )
+ }
+}
+
+@Composable
+private fun textFieldStyle(enabled: Boolean): TextStyle {
+ return ElementTheme.typography.fontBodyLgRegular.copy(
+ color = if (enabled) {
+ ElementTheme.colors.textPrimary
+ } else {
+ ElementTheme.colors.textSecondary
+ }
)
}
@Preview(group = PreviewGroup.TextFields)
@Composable
-internal fun TextFieldLightPreview() =
- ElementPreviewLight { ContentToPreview() }
+internal fun TextFieldsLightPreview() = ElementPreviewLight { ContentToPreview() }
@Preview(group = PreviewGroup.TextFields)
@Composable
-internal fun TextFieldDarkPreview() =
- ElementPreviewDark { ContentToPreview() }
+internal fun TextFieldsDarkPreview() = ElementPreviewDark { ContentToPreview() }
-@ExcludeFromCoverage
@Composable
+@ExcludeFromCoverage
private fun ContentToPreview() {
Column(modifier = Modifier.padding(4.dp)) {
allBooleans.forEach { isError ->
allBooleans.forEach { enabled ->
allBooleans.forEach { readonly ->
TextField(
+ onValueChange = {},
+ label = "Label",
value = "Hello er=${isError.asInt()}, en=${enabled.asInt()}, ro=${readonly.asInt()}",
- onValueChange = {},
- label = { Text(text = "label") },
+ supportingText = "Supporting text",
isError = isError,
enabled = enabled,
readOnly = readonly,
@@ -174,62 +313,3 @@ private fun ContentToPreview() {
}
}
}
-
-@Preview(group = PreviewGroup.TextFields)
-@Composable
-internal fun TextFieldValueLightPreview() =
- ElementPreviewLight { TextFieldValueContentToPreview() }
-
-@Preview(group = PreviewGroup.TextFields)
-@Composable
-internal fun TextFieldValueTextFieldDarkPreview() =
- ElementPreviewDark { TextFieldValueContentToPreview() }
-
-@ExcludeFromCoverage
-@Composable
-private fun TextFieldValueContentToPreview() {
- Column(modifier = Modifier.padding(4.dp)) {
- allBooleans.forEach { isError ->
- allBooleans.forEach { enabled ->
- allBooleans.forEach { readonly ->
- TextField(
- value = TextFieldValue(
- text = "Hello er=${isError.asInt()}, en=${enabled.asInt()}, ro=${readonly.asInt()}",
- selection = TextRange(0, "Hello".length),
- ),
- onValueChange = {},
- label = { Text(text = "label") },
- isError = isError,
- enabled = enabled,
- readOnly = readonly,
- )
- Spacer(modifier = Modifier.height(2.dp))
- }
- }
- }
- }
-}
-
-@Suppress("ModifierComposed")
-@OptIn(ExperimentalComposeUiApi::class)
-fun Modifier.autofill(autofillTypes: List, onFill: (String) -> Unit) = composed {
- val autofillNode = AutofillNode(autofillTypes, onFill = onFill)
- LocalAutofillTree.current += autofillNode
-
- val autofill = LocalAutofill.current
-
- this
- .onGloballyPositioned {
- // Inform autofill framework of where our composable is so it can show the popup in the right place
- autofillNode.boundingBox = it.boundsInWindow()
- }
- .onFocusChanged {
- autofill?.run {
- if (it.isFocused) {
- requestAutofillForNode(autofillNode)
- } else {
- cancelAutofillForNode(autofillNode)
- }
- }
- }
-}
diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
index 4031915445..c2b8c06bd3 100644
--- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
+++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
@@ -91,7 +91,7 @@ class DefaultRoomLastMessageFormatter @Inject constructor(
val message = sp.getString(CommonStrings.common_unsupported_event)
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
}
- is LegacyCallInviteContent -> sp.getString(CommonStrings.common_call_invite)
+ is LegacyCallInviteContent -> sp.getString(CommonStrings.common_unsupported_call)
is CallNotifyContent -> sp.getString(CommonStrings.common_call_started)
}?.take(MAX_SAFE_LENGTH)
}
diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt
index ddff8fb5bf..485a176cc8 100644
--- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt
+++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt
@@ -52,13 +52,11 @@ class DefaultTimelineEventFormatter @Inject constructor(
is StateContent -> {
stateContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing, RenderingMode.Timeline)
}
- is LegacyCallInviteContent -> {
- sp.getString(CommonStrings.common_call_invite)
- }
is CallNotifyContent -> {
sp.getString(CommonStrings.common_call_started)
}
RedactedContent,
+ is LegacyCallInviteContent,
is StickerContent,
is PollContent,
is UnableToDecryptContent,
diff --git a/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml b/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml
index ab203f1d3b..d526b96815 100644
--- a/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-cs/translations.xml
@@ -28,7 +28,7 @@
"Pozvali jste %1$s"
"%1$s vstoupil(a) do místnosti"
"Vstoupili jste do místnosti"
- "%1$s požádal(a) o vstup"
+ "%1$s žádá o vstup"
"%1$s povolil(a) vstoupit %2$s"
"Povolili jste %1$s vstoupit"
"Požádali jste o vstup"
diff --git a/libraries/eventformatter/impl/src/main/res/values-el/translations.xml b/libraries/eventformatter/impl/src/main/res/values-el/translations.xml
index 4e476d3c4b..8c89d65ea5 100644
--- a/libraries/eventformatter/impl/src/main/res/values-el/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-el/translations.xml
@@ -28,8 +28,8 @@
"Ο χρήστης %1$s σέ προσκάλεσε"
"Ο χρήστης %1$s συμμετέχει στο δωμάτιο"
"Μπήκες στο δωμάτιο"
- "Ο χρήστης %1$s ζήτησε να συμμετάσχει"
- "Ο χρήστης %1$s επέτρεψε στον χρήστη %2$s να συμμετάσχει"
+ "Ο χρήστης %1$s ζητάει να συμμετάσχει"
+ "Ο χρήστης %1$s επέτρεψε τον χρήστη %2$s"
"Επέστρεψες στον χρήστη%1$s να συμμετάσχει"
"Ζήτησες να συμμετάσχεις"
"Ο χρήστης %1$s απέρριψε το αίτημα του χρήστη %2$s να συμμετάσχει"
diff --git a/libraries/eventformatter/impl/src/main/res/values-et/translations.xml b/libraries/eventformatter/impl/src/main/res/values-et/translations.xml
index 506f22db55..3f5baafb0b 100644
--- a/libraries/eventformatter/impl/src/main/res/values-et/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-et/translations.xml
@@ -28,7 +28,7 @@
"%1$s saatis sulle kutse"
"%1$s liitus jututoaga"
"Sina liitusid jututoaga"
- "%1$s palus liitumist"
+ "%1$s palus võimalust liituda"
"%1$s lubas kasutajal %2$s liituda"
"Sina lubasid kasutajal %1$s liituda!"
"Sina palusid liitumist"
diff --git a/libraries/eventformatter/impl/src/main/res/values-fa/translations.xml b/libraries/eventformatter/impl/src/main/res/values-fa/translations.xml
index c5f4c6beb5..f7fd635d31 100644
--- a/libraries/eventformatter/impl/src/main/res/values-fa/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-fa/translations.xml
@@ -28,8 +28,8 @@
"%1$s دعوتتان کرد"
"%1$s به اتاق پیوست"
"به اتاق پیوستید"
- "%1$s درخواست پیوستن کرد"
- "%1$s گذاشت %2$s بپیوندد"
+ "%1$s درخواست پیوستن دارد"
+ "%1$s به %2$s دسترسی داد"
"گذاشتید %1$s بپیوندد"
"درخواست پیوستن کردید"
"درخواست پیوستن %2$s به دست %1$s لغو شد"
diff --git a/libraries/eventformatter/impl/src/main/res/values-fi/translations.xml b/libraries/eventformatter/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..d3e2e6cc3b
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,69 @@
+
+
+ "(myös avatar vaihdettiin)"
+ "%1$s vaihtoi avatarinsa"
+ "Vaihdoit avatarisi"
+ "%1$s alennettiin jäseneksi"
+ "%1$s alennettiin valvojaksi"
+ "%1$s vaihtoi näyttönimekseen %3$s (se oli %2$s)"
+ "Vaihdoit näyttönimeksesi %2$s (se oli %1$s)"
+ "%1$s poisti näyttönimensä (se oli %2$s)"
+ "Poistit näyttönimesi (se oli %1$s)"
+ "%1$s asetti näyttönimekseen %2$s"
+ "Asetit näyttönimeksesi %1$s"
+ "%1$s ylennettiin ylläpitäjäksi"
+ "%1$s ylennettiin valvojaksi"
+ "%1$s vaihtoi huoneen avatarin"
+ "Vaihdoit huoneen avatarin"
+ "%1$s poisti huoneen avatarin"
+ "Poistit huoneen avatarin"
+ "%1$s antoi porttikiellon käyttäjälle %2$s"
+ "Annoit porttikiellon käyttäjälle %1$s"
+ "%1$s loi huoneen"
+ "Loit huoneen"
+ "%1$s kutsui käyttäjän %2$s"
+ "%1$s hyväksyi kutsun"
+ "Hyväksyit kutsun"
+ "Kutsuit käyttäjän %1$s"
+ "%1$s kutsui sinut"
+ "%1$s liittyi huoneeseen"
+ "Liityit huoneeseen"
+ "%1$s pyytää liittymistä"
+ "%1$s myönsi pääsyn käyttäjälle %2$s"
+ "Sallit käyttäjän %1$s liittyä"
+ "Pyysit liittymistä"
+ "%1$s hylkäsi käyttäjän %2$s liittymispyynnön"
+ "Hylkäsit käyttäjän %1$s liittymispyynnön"
+ "%1$s hylkäsi liittymispyyntösi"
+ "%1$s ei halua enää liittyä"
+ "Peruutit liittymispyyntösi"
+ "%1$s poistui huoneesta"
+ "Poistuit huoneesta"
+ "%1$s vaihtoi huoneen nimeksi: %2$s"
+ "Vaihdoit huoneen nimeksi: %1$s"
+ "%1$s poisti huoneen nimen"
+ "Poistit huoneen nimen"
+ "%1$s ei tehnyt muutoksia"
+ "Et tehnyt muutoksia"
+ "%1$s muutti kiinnitettyjä viestejä"
+ "Muutit kiinnitettyjä viestejä"
+ "%1$s kiinnitti viestin"
+ "Kiinnitit viestin"
+ "%1$s poisti viestin kiinnityksen"
+ "Poistit viestin kiinnityksen"
+ "%1$s hylkäsi kutsun"
+ "Hylkäsit kutsun"
+ "%1$s poisti käyttäjän %2$s"
+ "Poistit käyttäjän %1$s"
+ "%1$s kutsui käyttäjän %2$s huoneeseen"
+ "Kutsuit käyttäjän %1$s huoneeseen"
+ "%1$s peruutti käyttäjän %2$s kutsun huoneeseen"
+ "Peruutit käyttäjän %1$s kutsun huoneeseen"
+ "%1$s vaihtoi aiheeksi: %2$s"
+ "Vaihdoit aiheeksi: %1$s"
+ "%1$s poisti huoneen aiheen"
+ "Poistit huoneen aiheen"
+ "%1$s poisti käyttäjän %2$s porttikiellon"
+ "Poistit käyttäjän %1$s porttikiellon"
+ "%1$s teki tuntemattoman muutoksen jäsenyyteensä"
+
diff --git a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml
index 7cc18968de..dda1e4787d 100644
--- a/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-fr/translations.xml
@@ -28,7 +28,7 @@
"%1$s vous a invité(e)"
"%1$s a rejoint le salon"
"Vous avez rejoint le salon"
- "%1$s a demandé à rejoindre"
+ "%1$s demande à rejoindre le salon"
"%1$s a autorisé %2$s à rejoindre"
"Vous avez autorisé %1$s à joindre le salon"
"Vous avez demandé à rejoindre"
diff --git a/libraries/eventformatter/impl/src/main/res/values-in/translations.xml b/libraries/eventformatter/impl/src/main/res/values-in/translations.xml
index 3cf09b572f..3430b05813 100644
--- a/libraries/eventformatter/impl/src/main/res/values-in/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-in/translations.xml
@@ -29,7 +29,7 @@
"%1$s bergabung ke ruangan"
"Anda bergabung ke ruangan"
"%1$s meminta untuk bergabung"
- "%1$s memperbolehkan %2$s untuk bergabung"
+ "%1$s memberikan akses kepada %2$s"
"Anda memperbolehkan %1$s untuk bergabung"
"Anda meminta untuk bergabung"
"%1$s menolak permintaan %2$s untuk bergabung"
diff --git a/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml b/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml
index 5e9976b80a..3eee3541b1 100644
--- a/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-sk/translations.xml
@@ -28,8 +28,8 @@
"%1$s vás pozval/a"
"%1$s sa pripojil/a do miestnosti"
"Vstúpili ste do miestnosti"
- "%1$s požiadal o pripojenie"
- "%1$s umožnil/a používateľovi %2$s pripojiť sa"
+ "%1$s žiada o vstup"
+ "%1$s umožnil/a vstup používateľovi %2$s"
"Povolili ste používateľovi %1$s, aby sa pripojil"
"Požiadali ste o pripojenie"
"%1$s odmietol/a žiadosť používateľa %2$s o vstup"
diff --git a/libraries/eventformatter/impl/src/main/res/values-uk/translations.xml b/libraries/eventformatter/impl/src/main/res/values-uk/translations.xml
index 065f08cad4..7e96bc81f5 100644
--- a/libraries/eventformatter/impl/src/main/res/values-uk/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-uk/translations.xml
@@ -1,69 +1,69 @@
"(аватар теж було змінено)"
- "%1$s змінив (-ла) свій аватар"
+ "%1$s змінює свій аватар"
"Ви змінили свій аватар"
"%1$s понижено до учасника"
"%1$s понижено до модератора"
- "%1$s змінив (-ла) своє імʼя з %2$s на %3$s"
+ "%1$s змінює своє імʼя з %2$s на %3$s"
"Ви змінили своє ім\'я з %1$s на %2$s"
- "%1$s видалив (-ла) своє ім\'я (було %2$s)"
+ "%1$s вилучає своє ім\'я (було %2$s)"
"Ви видалили своє ім\'я (було%1$s)"
- "%1$s змінив (-ла) своє ім\'я на %2$s"
+ "%1$s змінює своє ім\'я на %2$s"
"Ви змінили своє імʼя на %1$s"
"%1$s підвищено до адміністратора"
"%1$s підвищено до модератора"
- "%1$s змінив (-ла) аватар кімнати"
+ "%1$s змінює аватар кімнати"
"Ви змінили аватар кімнати"
- "%1$s видалив (-ла) аватар кімнати"
+ "%1$s видаляє аватар кімнати"
"Ви видалили аватар кімнати"
- "%1$s заблокував (-ла) %2$s"
+ "%1$s блокує %2$s"
"Ви заблокували %1$s"
- "%1$s створив (-ла) кімнату"
+ "%1$s створює кімнату"
"Ви створили кімнату"
- "%1$s запросив (-ла) %2$s"
- "%1$s прийняв (-ла) запрошення"
+ "%1$s запрошує %2$s"
+ "%1$s приймає запрошення"
"Ви прийняли запрошення"
"Ви запросили %1$s"
- "%1$s запросив (-ла) Вас"
- "%1$s приєднався (-лася) до кімнати"
+ "Вас запрошує %1$s"
+ "%1$s приєднується до кімнати"
"Ви приєдналися до кімнати"
"%1$s подав (-ла) запит на приєднання"
"%1$s дозволив (-ла) %2$s приєднатися"
"Ви дозволили %1$s приєднатися"
"Ви подали запит на приєднання"
- "%1$s відхилив (-ла) запит %2$s на приєднання"
- "Ви відхилили запит %1$s на приєднання"
- "%1$s відхилив (-ла) Ваш запит на приєднання"
- "%1$s більше не зацікавлений у приєднанні"
+ "%1$s відхиляє запит %2$s на приєднання"
+ "Ви відхилили запит на приєднання від %1$s"
+ "%1$s відхиляє ваш запит на приєднання"
+ "%1$s більше не хоче приєднуватися"
"Ви відкликали свій запит на приєднання"
- "%1$s вийшов (-ла) з кімнати"
+ "%1$s виходить з кімнати"
"Ви вийшли з кімнати"
- "%1$s змінив (-ла) назву кімнати на: %2$s"
+ "%1$s змінює назву кімнати на: %2$s"
"Ви змінили назву кімнати на: %1$s"
- "%1$s видалив (-ла) назву кімнати"
+ "%1$s вилучає назву кімнати"
"Ви видалили назву кімнати"
- "%1$s не внесено жодних змін"
+ "%1$s нічого не змінює"
"Ви не внесли жодних змін"
- "%1$s змінив(-ла) закріплені повідомлення"
+ "%1$s змінює закріплені повідомлення"
"Ви змінили закріплені повідомлення"
- "%1$s закріпив(-ла) повідомлення"
+ "%1$s закріплює повідомлення"
"Ви закріпили повідомлення"
- "%1$s відкріпив(-ла) повідомлення"
+ "%1$s відкріплює повідомлення"
"Ви відкріпили повідомлення"
- "%1$s відхилив (-ла) запрошення"
+ "%1$s відхиляє запрошення"
"Ви відхилили запрошення"
- "%1$s вилучив (-ла) %2$s"
+ "%1$s вилучає %2$s"
"Ви видалили %1$s"
- "%1$s запросив (-ла) %2$s приєднатися до кімнати"
+ "%1$s запрошує %2$s приєднатися до кімнати"
"Ви запросили %1$s приєднатися до кімнати"
- "%1$s відкликав (-ла) запрошення для %2$s на приєднання до кімнати"
- "Ви відкликали запрошення для %1$s на приєднання до кімнати"
- "%1$s змінив (-ла) тему на: %2$s"
+ "%1$s відкликає запрошення приєднатися до кімнати для %2$s"
+ "Ви відкликали запрошення приєднатися до кімнати для %1$s"
+ "%1$s змінює тему на: %2$s"
"Ви змінили тему на: %1$s"
- "%1$s видалив (-ла) тему кімнати"
- "Ви видалили тему кімнати"
- "%1$s розблокував (-ла) %2$s"
+ "%1$s вилучає тему кімнати"
+ "Ви вилучили тему кімнати"
+ "%1$s розблоковує %2$s"
"Ви розблокували %1$s"
- "%1$s вніс (внесла) невідомі зміни щодо свого членства"
+ "%1$s вносить невідомі зміни щодо свого членства"
diff --git a/libraries/eventformatter/impl/src/main/res/values-zh/translations.xml b/libraries/eventformatter/impl/src/main/res/values-zh/translations.xml
index c968d6c75c..342af5d761 100644
--- a/libraries/eventformatter/impl/src/main/res/values-zh/translations.xml
+++ b/libraries/eventformatter/impl/src/main/res/values-zh/translations.xml
@@ -13,21 +13,21 @@
"你将显示名称设置为 %1$s"
"%1$s 晋升为管理员"
"%1$s 晋升为协管员"
- "%1$s 更换了房间头像"
- "你更换了房间头像"
- "%1$s 移除了房间头像"
- "你移除了房间头像"
+ "%1$s 更换了聊天室头像"
+ "你更换了聊天室头像"
+ "%1$s 移除了聊天室头像"
+ "你移除了聊天室头像"
"%1$s 封禁了 %2$s"
"你封禁了 %1$s"
- "%1$s 创建了房间"
- "你创建了房间"
+ "%1$s 创建了聊天室"
+ "你创建了聊天室"
"%1$s 邀请了 %2$s"
"%1$s 接受了邀请"
"你接受了邀请"
"你邀请了 %1$s"
"%1$s 邀请了你"
- "%1$s 加入了房间"
- "你加入了房间"
+ "%1$s 加入了聊天室"
+ "你加入了聊天室"
"%1$s 请求加入"
"%1$s 允许 %2$s 加入"
"您已允许 %1$s 加入"
@@ -37,12 +37,12 @@
"%1$s 拒绝了你的加入请求"
"%1$s 已不再想加入"
"你取消了加入申请"
- "%1$s 离开了房间"
- "你离开了房间"
- "%1$s 将房间名称改为 %2$s"
- "你把房间名称改为 %1$s"
- "%1$s 移除了房间名称"
- "你移除了房间名称"
+ "%1$s 离开了聊天室"
+ "你离开了聊天室"
+ "%1$s 将聊天室名称改为 %2$s"
+ "你把聊天室名称改为 %1$s"
+ "%1$s 移除了聊天室名称"
+ "你移除了聊天室名称"
"%1$s 没有任何更改"
"您未进行任何更改"
"%1$s 更改了置顶消息"
@@ -55,14 +55,14 @@
"你拒绝了邀请"
"%1$s 移除了 %2$s"
"你移除了 %1$s"
- "%1$s向%2$s发送了加入房间的邀请"
- "你邀请 %1$s 加入房间"
- "%1$s 撤销了 %2$s 加入房间的邀请"
- "你撤销了 %1$s 加入房间的邀请"
+ "%1$s 向 %2$s 发送了加入聊天室的邀请"
+ "你邀请 %1$s 加入聊天室"
+ "%1$s 撤销了 %2$s 加入聊天室的邀请"
+ "你撤销了 %1$s 加入聊天室的邀请"
"%1$s 将主题改为:%2$s"
"你将主题改为:%1$s"
- "%1$s 移除了房间主题"
- "你移除了房间主题"
+ "%1$s 移除了聊天室主题"
+ "你移除了聊天室主题"
"%1$s 解禁了 %2$s"
"你解禁了 %1$s"
"%1$s 对其成员资格进行了未知更改"
diff --git a/libraries/eventformatter/impl/src/main/res/values/localazy.xml b/libraries/eventformatter/impl/src/main/res/values/localazy.xml
index 12dbc16a1d..2579c98207 100644
--- a/libraries/eventformatter/impl/src/main/res/values/localazy.xml
+++ b/libraries/eventformatter/impl/src/main/res/values/localazy.xml
@@ -28,8 +28,8 @@
"%1$s invited you"
"%1$s joined the room"
"You joined the room"
- "%1$s requested to join"
- "%1$s allowed %2$s to join"
+ "%1$s is requesting to join"
+ "%1$s granted access to %2$s"
"You allowed %1$s to join"
"You requested to join"
"%1$s rejected %2$s\'s request to join"
diff --git a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt
index 3c5038069a..29474c3532 100644
--- a/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt
+++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt
@@ -460,7 +460,7 @@ class DefaultRoomLastMessageFormatterTest {
val someoneKnockedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
val someoneKnocked = formatter.format(someoneKnockedEvent, false)
- assertThat(someoneKnocked).isEqualTo("$otherName requested to join")
+ assertThat(someoneKnocked).isEqualTo("$otherName is requesting to join")
}
@Test
@@ -476,7 +476,7 @@ class DefaultRoomLastMessageFormatterTest {
val someoneAcceptedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
val someoneAcceptedKnock = formatter.format(someoneAcceptedKnockEvent, false)
- assertThat(someoneAcceptedKnock).isEqualTo("$otherName allowed $third to join")
+ assertThat(someoneAcceptedKnock).isEqualTo("$otherName granted access to $third")
}
@Test
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 504db1c6d9..38b0edac82 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
@@ -26,7 +26,7 @@ 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.alias.ResolvedRoomAlias
-import io.element.android.libraries.matrix.api.room.preview.RoomPreview
+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
@@ -143,7 +143,7 @@ interface MatrixClient : Closeable {
* Execute generic GET requests through the SDKs internal HTTP client.
*/
suspend fun getUrl(url: String): Result
- suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result
+ suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result
/** Returns `true` if the home server supports native sliding sync. */
suspend fun isNativeSlidingSyncSupported(): Boolean
@@ -168,3 +168,13 @@ fun MatrixClient.getRoomInfoFlow(roomIdOrAlias: RoomIdOrAlias): Flow roomSummary.map { it.info } }
.distinctUntilChanged()
}
+
+/**
+ * Returns a room alias from a room alias name.
+ * @param name the room alias name ie. the local part of the room alias.
+ */
+fun MatrixClient.roomAliasFromName(name: String): Result {
+ return runCatching {
+ RoomAlias("#$name:${userIdServerName()}")
+ }
+}
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/SendHandle.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/SendHandle.kt
new file mode 100644
index 0000000000..e77c10166e
--- /dev/null
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/SendHandle.kt
@@ -0,0 +1,12 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.api.core
+
+fun interface SendHandle {
+ suspend fun retry(): Result
+}
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/createroom/CreateRoomParameters.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/createroom/CreateRoomParameters.kt
index 2e13623c96..93ac71ef17 100644
--- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/createroom/CreateRoomParameters.kt
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/createroom/CreateRoomParameters.kt
@@ -20,5 +20,5 @@ data class CreateRoomParameters(
val invite: List? = null,
val avatar: String? = null,
val joinRuleOverride: JoinRuleOverride = JoinRuleOverride.None,
- val canonicalAlias: Optional = Optional.empty(),
+ val roomAliasName: Optional = Optional.empty(),
)
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt
index 3bbbf6fdd4..8dd1c5ec5f 100644
--- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt
@@ -12,6 +12,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.ProgressCallback
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
@@ -154,8 +155,6 @@ interface MatrixRoom : Closeable {
suspend fun forwardEvent(eventId: EventId, roomIds: List): Result
- suspend fun retrySendMessage(transactionId: TransactionId): Result
-
suspend fun cancelSend(transactionId: TransactionId): Result
suspend fun leave(): Result
@@ -356,20 +355,20 @@ interface MatrixRoom : Closeable {
* Ignore the local trust for the given devices and resend messages that failed to send because said devices are unverified.
*
* @param devices The map of users identifiers to device identifiers received in the error
- * @param transactionId The send queue transaction identifier of the local echo the send error applies to.
+ * @param sendHandle The send queue handle of the local echo the send error applies to. It can be used to retry the upload.
*
*/
- suspend fun ignoreDeviceTrustAndResend(devices: Map>, transactionId: TransactionId): Result
+ suspend fun ignoreDeviceTrustAndResend(devices: Map>, sendHandle: SendHandle): Result
/**
* Remove verification requirements for the given users and
* resend messages that failed to send because their identities were no longer verified.
*
* @param userIds The list of users identifiers received in the error.
- * @param transactionId The send queue transaction identifier of the local echo the send error applies to.
+ * @param sendHandle The send queue handle of the local echo the send error applies to. It can be used to retry the upload.
*
*/
- suspend fun withdrawVerificationAndResend(userIds: List, transactionId: TransactionId): Result
+ suspend fun withdrawVerificationAndResend(userIds: List, sendHandle: SendHandle): Result
override fun close() = destroy()
}
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/RoomAliasHelper.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/RoomAliasHelper.kt
new file mode 100644
index 0000000000..eb746e1f0d
--- /dev/null
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/alias/RoomAliasHelper.kt
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.api.room.alias
+
+import io.element.android.libraries.matrix.api.core.RoomAlias
+
+interface RoomAliasHelper {
+ fun roomAliasNameFromRoomDisplayName(name: String): String
+ fun isRoomAliasValid(roomAlias: RoomAlias): Boolean
+}
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt
similarity index 97%
rename from libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt
rename to libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt
index 6f60dd4895..190354ea7d 100644
--- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt
@@ -11,7 +11,7 @@ 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.RoomType
-data class RoomPreview(
+data class RoomPreviewInfo(
/** The room id for this room. */
val roomId: RoomId,
/** The canonical alias for the room. */
diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventTimelineItem.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventTimelineItem.kt
index eb8923d1d6..3683f5f669 100644
--- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventTimelineItem.kt
+++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventTimelineItem.kt
@@ -8,6 +8,7 @@
package io.element.android.libraries.matrix.api.timeline.item.event
import io.element.android.libraries.matrix.api.core.EventId
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
@@ -30,6 +31,7 @@ data class EventTimelineItem(
val origin: TimelineItemEventOrigin?,
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
val messageShieldProvider: MessageShieldProvider,
+ val sendHandleProvider: SendHandleProvider,
) {
fun inReplyTo(): InReplyTo? {
return (content as? MessageContent)?.inReplyTo
@@ -52,3 +54,7 @@ fun interface TimelineItemDebugInfoProvider {
fun interface MessageShieldProvider {
operator fun invoke(strict: Boolean): MessageShield?
}
+
+fun interface SendHandleProvider {
+ operator fun invoke(): SendHandle?
+}
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 3165cef1bf..3c3498da48 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
@@ -37,7 +37,7 @@ 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.alias.ResolvedRoomAlias
-import io.element.android.libraries.matrix.api.room.preview.RoomPreview
+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
@@ -57,7 +57,7 @@ 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.TimelineEventTypeFilterFactory
-import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper
+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.roomlist.RoomListFactory
import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService
@@ -334,7 +334,7 @@ class RustMatrixClient(
JoinRuleOverride.Knock -> RustJoinRule.Knock
JoinRuleOverride.None -> null
},
- canonicalAlias = createRoomParams.canonicalAlias.getOrNull(),
+ canonicalAlias = createRoomParams.roomAliasName.getOrNull(),
)
val roomId = RoomId(client.createRoom(rustParams))
// Wait to receive the room back from the sync but do not returns failure if it fails.
@@ -455,12 +455,14 @@ class RustMatrixClient(
}
}
- override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) {
+ override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) {
runCatching {
when (roomIdOrAlias) {
is RoomIdOrAlias.Alias -> client.getRoomPreviewFromRoomAlias(roomIdOrAlias.roomAlias.value)
is RoomIdOrAlias.Id -> client.getRoomPreviewFromRoomId(roomIdOrAlias.roomId.value, serverNames)
- }.let(RoomPreviewMapper::map)
+ }.use { roomPreview ->
+ RoomPreviewInfoMapper.map(roomPreview.info())
+ }
}
}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/core/RustSendHandle.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/core/RustSendHandle.kt
new file mode 100644
index 0000000000..08b14a80fb
--- /dev/null
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/core/RustSendHandle.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.impl.core
+
+import io.element.android.libraries.matrix.api.core.SendHandle
+
+class RustSendHandle(
+ val inner: org.matrix.rustcomponents.sdk.SendHandle,
+) : SendHandle {
+ override suspend fun retry(): Result {
+ return runCatching {
+ inner.tryResend()
+ }
+ }
+}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt
index 91db0d37dd..15a91fcec6 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomType.kt
@@ -8,11 +8,12 @@
package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.RoomType
+import org.matrix.rustcomponents.sdk.RoomType as RustRoomType
-fun String?.toRoomType(): RoomType {
+fun RustRoomType.map(): RoomType {
return when (this) {
- null -> RoomType.Room
- "m.space" -> RoomType.Space
- else -> RoomType.Other(this)
+ RustRoomType.Room -> RoomType.Room
+ RustRoomType.Space -> RoomType.Space
+ is RustRoomType.Custom -> RoomType.Other(this.value)
}
}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt
index 8b72282cd5..c12fc17553 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt
@@ -16,6 +16,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.ProgressCallback
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
@@ -45,6 +46,7 @@ import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.matrix.api.timeline.item.event.EventOrTransactionId
import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver
import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings
+import io.element.android.libraries.matrix.impl.core.RustSendHandle
import io.element.android.libraries.matrix.impl.mapper.map
import io.element.android.libraries.matrix.impl.room.draft.into
import io.element.android.libraries.matrix.impl.room.member.RoomMemberListFetcher
@@ -481,10 +483,6 @@ class RustMatrixRoom(
return liveTimeline.forwardEvent(eventId, roomIds)
}
- override suspend fun retrySendMessage(transactionId: TransactionId): Result = runCatching {
- innerRoom.tryResend(transactionId.value)
- }
-
override suspend fun cancelSend(transactionId: TransactionId): Result {
return liveTimeline.cancelSend(transactionId)
}
@@ -671,19 +669,19 @@ class RustMatrixRoom(
innerRoom.clearComposerDraft()
}
- override suspend fun ignoreDeviceTrustAndResend(devices: Map>, transactionId: TransactionId) = runCatching {
+ override suspend fun ignoreDeviceTrustAndResend(devices: Map>, sendHandle: SendHandle) = runCatching {
innerRoom.ignoreDeviceTrustAndResend(
devices = devices.entries.associate { entry ->
entry.key.value to entry.value.map { it.value }
},
- transactionId = transactionId.value
+ sendHandle = (sendHandle as RustSendHandle).inner,
)
}
- override suspend fun withdrawVerificationAndResend(userIds: List, transactionId: TransactionId) = runCatching {
+ override suspend fun withdrawVerificationAndResend(userIds: List, sendHandle: SendHandle) = runCatching {
innerRoom.withdrawVerificationAndResend(
userIds = userIds.map { it.value },
- transactionId = transactionId.value
+ sendHandle = (sendHandle as RustSendHandle).inner,
)
}
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
index 46df9bed80..635d362365 100644
--- 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
@@ -10,14 +10,13 @@ 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 org.matrix.rustcomponents.sdk.Room
+import org.matrix.rustcomponents.sdk.RoomPreview
class RustPendingRoom(
override val sessionId: SessionId,
- private val inner: Room,
+ override val roomId: RoomId,
+ private val inner: RoomPreview,
) : PendingRoom {
- override val roomId = RoomId(inner.id())
-
override suspend fun leave(): Result = runCatching {
inner.leave()
}
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 1b9fe4115e..487c4d1496 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
@@ -139,14 +139,14 @@ class RustRoomFactory(
return@withContext null
}
val innerRoom = try {
- // TODO use new method when available, for now it'll fail for knocked rooms
- roomListItem.invitedRoom()
+ roomListItem.previewRoom(via = emptyList())
} catch (e: RoomListException) {
Timber.e(e, "Failed to get pending room for $roomId")
return@withContext null
}
RustPendingRoom(
sessionId = sessionId,
+ roomId = roomId,
inner = innerRoom,
)
}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt
new file mode 100644
index 0000000000..a2fa36f65c
--- /dev/null
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.impl.room.alias
+
+import com.squareup.anvil.annotations.ContributesBinding
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.matrix.api.core.RoomAlias
+import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
+import javax.inject.Inject
+
+@ContributesBinding(AppScope::class)
+class DefaultRoomAliasHelper @Inject constructor() : RoomAliasHelper {
+ override fun roomAliasNameFromRoomDisplayName(name: String): String {
+ return org.matrix.rustcomponents.sdk.roomAliasNameFromRoomDisplayName(name)
+ }
+
+ override fun isRoomAliasValid(roomAlias: RoomAlias): Boolean {
+ return org.matrix.rustcomponents.sdk.isRoomAliasFormatValid(roomAlias.value)
+ }
+}
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
new file mode 100644
index 0000000000..3ff3c1b098
--- /dev/null
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.impl.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.preview.RoomPreviewInfo
+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 {
+ fun map(info: RustRoomPreviewInfo): RoomPreviewInfo {
+ return RoomPreviewInfo(
+ roomId = RoomId(info.roomId),
+ canonicalAlias = info.canonicalAlias?.let(::RoomAlias),
+ name = info.name,
+ topic = info.topic,
+ avatarUrl = info.avatarUrl,
+ numberOfJoinedMembers = info.numJoinedMembers.toLong(),
+ roomType = info.roomType.map(),
+ isHistoryWorldReadable = info.isHistoryWorldReadable,
+ isJoined = info.membership == Membership.JOINED,
+ isInvited = info.membership == Membership.INVITED,
+ isPublic = info.joinRule == JoinRule.Public,
+ canKnock = info.joinRule == JoinRule.Knock
+ )
+ }
+}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt
deleted file mode 100644
index b676d6909d..0000000000
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.libraries.matrix.impl.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.preview.RoomPreview
-import io.element.android.libraries.matrix.impl.room.toRoomType
-import org.matrix.rustcomponents.sdk.JoinRule
-import org.matrix.rustcomponents.sdk.Membership
-import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview
-
-object RoomPreviewMapper {
- fun map(roomPreview: RustRoomPreview): RoomPreview {
- return roomPreview.use {
- val info = roomPreview.info()
- RoomPreview(
- roomId = RoomId(info.roomId),
- canonicalAlias = info.canonicalAlias?.let(::RoomAlias),
- name = info.name,
- topic = info.topic,
- avatarUrl = info.avatarUrl,
- numberOfJoinedMembers = info.numJoinedMembers.toLong(),
- roomType = info.roomType.toRoomType(),
- isHistoryWorldReadable = info.isHistoryWorldReadable,
- isJoined = info.membership == Membership.JOINED,
- isInvited = info.membership == Membership.INVITED,
- isPublic = info.joinRule == JoinRule.Public,
- canKnock = info.joinRule == JoinRule.Knock
- )
- }
- }
-}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryList.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryList.kt
index 576b93d26d..5eb20dc368 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryList.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryList.kt
@@ -43,7 +43,7 @@ class RustRoomDirectoryList(
override suspend fun filter(filter: String?, batchSize: Int, viaServerName: String?): Result {
return execute {
- inner.search(filter = filter, batchSize = batchSize.toUInt(), viaServerName = viaServerName)
+ inner.search(filter = filter, batchSize = batchSize.toUInt(), viaServerName = null)
}
}
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 98f7ccfba1..2b6d8543c4 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
@@ -394,6 +394,8 @@ class RustTimeline(
inner.sendFile(
url = file.path,
fileInfo = fileInfo.map(),
+ caption = null,
+ formattedCaption = null,
useSendQueue = useSendQueue,
progressWatcher = progressCallback?.toProgressWatcher(),
)
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt
index f93d3fe982..7e28c93905 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt
@@ -20,6 +20,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimeli
import io.element.android.libraries.matrix.api.timeline.item.event.ReactionSender
import io.element.android.libraries.matrix.api.timeline.item.event.Receipt
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
+import io.element.android.libraries.matrix.impl.core.RustSendHandle
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
@@ -56,6 +57,7 @@ class EventTimelineItemMapper(
origin = origin?.map(),
timelineItemDebugInfoProvider = { lazyProvider.debugInfo().map() },
messageShieldProvider = { strict -> lazyProvider.getShields(strict)?.map() },
+ sendHandleProvider = { lazyProvider.getSendHandle()?.let(::RustSendHandle) }
)
}
}
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt
index ed3ddec98b..84435119c0 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/RustSessionVerificationService.kt
@@ -96,6 +96,17 @@ class RustSessionVerificationService(
private var listener: SessionVerificationServiceListener? = null
+ init {
+ // Instantiate the verification controller when possible, this is needed to get incoming verification requests
+ sessionCoroutineScope.launch {
+ // Needed to avoid crashes on unit tests due to the Rust SDK not being available
+ tryOrNull {
+ encryptionService.waitForE2eeInitializationTasks()
+ initVerificationControllerIfNeeded()
+ }
+ }
+ }
+
override fun setListener(listener: SessionVerificationServiceListener?) {
this.listener = listener
}
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPreviewInfo.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPreviewInfo.kt
index 0f344d3de0..c2c23fe6d9 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPreviewInfo.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/RoomPreviewInfo.kt
@@ -12,6 +12,7 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID
import org.matrix.rustcomponents.sdk.JoinRule
import org.matrix.rustcomponents.sdk.Membership
import org.matrix.rustcomponents.sdk.RoomPreviewInfo
+import org.matrix.rustcomponents.sdk.RoomType
internal fun aRustRoomPreviewInfo(
canonicalAlias: String? = A_ROOM_ALIAS.value,
@@ -25,7 +26,9 @@ internal fun aRustRoomPreviewInfo(
topic = "topic",
avatarUrl = "avatarUrl",
numJoinedMembers = 1u,
- roomType = null,
+ numActiveMembers = 1u,
+ isDirect = false,
+ roomType = RoomType.Room,
isHistoryWorldReadable = true,
membership = membership,
joinRule = joinRule,
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustClientBuilder.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustClientBuilder.kt
index abf94edcdd..c22e7adb79 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustClientBuilder.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustClientBuilder.kt
@@ -29,7 +29,6 @@ class FakeRustClientBuilder : ClientBuilder(NoPointer) {
override fun disableBuiltInRootCertificates() = this
override fun roomDecryptionTrustRequirement(trustRequirement: TrustRequirement) = this
override fun disableSslVerification() = this
- override fun enableCrossProcessRefreshLock(processId: String, sessionDelegate: ClientSessionDelegate) = this
override fun homeserverUrl(url: String) = this
override fun passphrase(passphrase: String?) = this
override fun proxy(url: String) = this
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustLazyTimelineItemProvider.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustLazyTimelineItemProvider.kt
index b133ddd0b1..b378668fb6 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustLazyTimelineItemProvider.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustLazyTimelineItemProvider.kt
@@ -11,6 +11,7 @@ import io.element.android.libraries.matrix.impl.fixtures.factories.anEventTimeli
import org.matrix.rustcomponents.sdk.EventTimelineItemDebugInfo
import org.matrix.rustcomponents.sdk.LazyTimelineItemProvider
import org.matrix.rustcomponents.sdk.NoPointer
+import org.matrix.rustcomponents.sdk.SendHandle
import org.matrix.rustcomponents.sdk.ShieldState
class FakeRustLazyTimelineItemProvider(
@@ -19,4 +20,5 @@ class FakeRustLazyTimelineItemProvider(
) : LazyTimelineItemProvider(NoPointer) {
override fun getShields(strict: Boolean) = shieldsState
override fun debugInfo() = debugInfo
+ override fun getSendHandle(): SendHandle? = null
}
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt
deleted file mode 100644
index fda57cd329..0000000000
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.libraries.matrix.impl.fixtures.fakes
-
-import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomPreviewInfo
-import org.matrix.rustcomponents.sdk.NoPointer
-import org.matrix.rustcomponents.sdk.RoomPreview
-import org.matrix.rustcomponents.sdk.RoomPreviewInfo
-
-class FakeRustRoomPreview(
- private val info: RoomPreviewInfo = aRustRoomPreviewInfo(),
-) : RoomPreview(NoPointer) {
- override fun info(): RoomPreviewInfo {
- return info
- }
-}
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomTypeKtTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomTypeKtTest.kt
index 541598781e..7dc6809d14 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomTypeKtTest.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/RoomTypeKtTest.kt
@@ -8,12 +8,13 @@ package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.api.room.RoomType
import org.junit.Test
+import org.matrix.rustcomponents.sdk.RoomType as RustRoomType
class RoomTypeKtTest {
@Test
fun toRoomType() {
- assert(null.toRoomType() == RoomType.Room)
- assert("m.space".toRoomType() == RoomType.Space)
- assert("m.other".toRoomType() == RoomType.Other("m.other"))
+ assert(RustRoomType.Room.map() == RoomType.Room)
+ assert(RustRoomType.Space.map() == RoomType.Space)
+ assert(RustRoomType.Custom("m.other").map() == RoomType.Other("m.other"))
}
}
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt
similarity index 74%
rename from libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt
rename to libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt
index 1dc03bc49b..9bedf2ef18 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt
@@ -9,28 +9,25 @@ package io.element.android.libraries.matrix.impl.room.preview
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.room.RoomType
-import io.element.android.libraries.matrix.api.room.preview.RoomPreview
+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.impl.fixtures.fakes.FakeRustRoomPreview
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
-class RoomPreviewMapperTest {
+class RoomPreviewInfoMapperTest {
@Test
fun `map should map values 1`() {
assertThat(
- RoomPreviewMapper.map(
- FakeRustRoomPreview(
- info = aRustRoomPreviewInfo(
- membership = null,
- )
+ RoomPreviewInfoMapper.map(
+ info = aRustRoomPreviewInfo(
+ membership = null,
)
)
).isEqualTo(
- RoomPreview(
+ RoomPreviewInfo(
roomId = A_ROOM_ID,
canonicalAlias = A_ROOM_ALIAS,
name = "name",
@@ -50,17 +47,15 @@ class RoomPreviewMapperTest {
@Test
fun `map should map values 2`() {
assertThat(
- RoomPreviewMapper.map(
- FakeRustRoomPreview(
- info = aRustRoomPreviewInfo(
- canonicalAlias = null,
- membership = Membership.JOINED,
- joinRule = JoinRule.Knock,
- )
+ RoomPreviewInfoMapper.map(
+ info = aRustRoomPreviewInfo(
+ canonicalAlias = null,
+ membership = Membership.JOINED,
+ joinRule = JoinRule.Knock,
)
)
).isEqualTo(
- RoomPreview(
+ RoomPreviewInfo(
roomId = A_ROOM_ID,
canonicalAlias = null,
name = "name",
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 dd7869cdf7..e912fd2f40 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
@@ -26,7 +26,7 @@ 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.alias.ResolvedRoomAlias
-import io.element.android.libraries.matrix.api.room.preview.RoomPreview
+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
@@ -78,7 +78,7 @@ class FakeMatrixClient(
Optional.of(ResolvedRoomAlias(A_ROOM_ID, emptyList()))
)
},
- private val getRoomPreviewResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) },
+ private val getRoomPreviewInfoResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) },
private val clearCacheLambda: () -> Unit = { lambdaError() },
private val userIdServerNameLambda: () -> String = { lambdaError() },
private val getUrlLambda: (String) -> Result = { lambdaError() },
@@ -313,8 +313,8 @@ class FakeMatrixClient(
resolveRoomAliasResult(roomAlias)
}
- override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask {
- getRoomPreviewResult(roomIdOrAlias, serverNames)
+ override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask {
+ getRoomPreviewInfoResult(roomIdOrAlias, serverNames)
}
override suspend fun getRecentlyVisitedRooms(): Result> {
diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/core/FakeSendHandle.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/core/FakeSendHandle.kt
new file mode 100644
index 0000000000..257cdf6b3e
--- /dev/null
+++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/core/FakeSendHandle.kt
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.test.core
+
+import io.element.android.libraries.matrix.api.core.SendHandle
+import io.element.android.tests.testutils.simulateLongTask
+
+class FakeSendHandle(
+ var retryLambda: () -> Result = { Result.success(Unit) }
+) : SendHandle {
+ override suspend fun retry(): Result = simulateLongTask {
+ return retryLambda()
+ }
+}
diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt
index 4a740c0732..9574a2a22c 100644
--- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt
+++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt
@@ -12,6 +12,7 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.ProgressCallback
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
+import io.element.android.libraries.matrix.api.core.SendHandle
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UserId
@@ -105,7 +106,6 @@ class FakeMatrixRoom(
private val sendMessageResult: (String, String?, List) -> Result = { _, _, _ -> lambdaError() },
private val updateUserRoleResult: () -> Result = { lambdaError() },
private val toggleReactionResult: (String, EventOrTransactionId) -> Result = { _, _ -> lambdaError() },
- private val retrySendMessageResult: (TransactionId) -> Result = { lambdaError() },
private val cancelSendResult: (TransactionId) -> Result = { lambdaError() },
private val forwardEventResult: (EventId, List) -> Result = { _, _ -> lambdaError() },
private val reportContentResult: (EventId, String, UserId?) -> Result = { _, _, _ -> lambdaError() },
@@ -138,8 +138,8 @@ class FakeMatrixRoom(
private val loadComposerDraftLambda: () -> Result = { Result.success(null) },
private val clearComposerDraftLambda: () -> Result = { Result.success(Unit) },
private val subscribeToSyncLambda: () -> Unit = { lambdaError() },
- private val ignoreDeviceTrustAndResendResult: (Map>, TransactionId) -> Result = { _, _ -> lambdaError() },
- private val withdrawVerificationAndResendResult: (List, TransactionId) -> Result = { _, _ -> lambdaError() },
+ private val ignoreDeviceTrustAndResendResult: (Map>, SendHandle) -> Result = { _, _ -> lambdaError() },
+ private val withdrawVerificationAndResendResult: (List, SendHandle) -> Result = { _, _ -> lambdaError() },
) : MatrixRoom {
private val _roomInfoFlow: MutableSharedFlow = MutableSharedFlow(replay = 1)
override val roomInfoFlow: Flow = _roomInfoFlow
@@ -249,10 +249,6 @@ class FakeMatrixRoom(
return toggleReactionResult(emoji, eventOrTransactionId)
}
- override suspend fun retrySendMessage(transactionId: TransactionId): Result = simulateLongTask {
- return retrySendMessageResult(transactionId)
- }
-
override suspend fun cancelSend(transactionId: TransactionId): Result {
return cancelSendResult(transactionId)
}
@@ -554,12 +550,12 @@ class FakeMatrixRoom(
return getWidgetDriverResult(widgetSettings)
}
- override suspend fun ignoreDeviceTrustAndResend(devices: Map>, transactionId: TransactionId): Result = simulateLongTask {
- return ignoreDeviceTrustAndResendResult(devices, transactionId)
+ override suspend fun ignoreDeviceTrustAndResend(devices: Map>, sendHandle: SendHandle): Result = simulateLongTask {
+ return ignoreDeviceTrustAndResendResult(devices, sendHandle)
}
- override suspend fun withdrawVerificationAndResend(userIds: List, transactionId: TransactionId): Result = simulateLongTask {
- return withdrawVerificationAndResendResult(userIds, transactionId)
+ override suspend fun withdrawVerificationAndResend(userIds: List, sendHandle: SendHandle): Result = simulateLongTask {
+ return withdrawVerificationAndResendResult(userIds, sendHandle)
}
fun givenRoomMembersState(state: MatrixRoomMembersState) {
diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/alias/FakeRoomAliasHelper.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/alias/FakeRoomAliasHelper.kt
new file mode 100644
index 0000000000..d832b9de5a
--- /dev/null
+++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/alias/FakeRoomAliasHelper.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2024 New Vector Ltd.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ * Please see LICENSE in the repository root for full details.
+ */
+
+package io.element.android.libraries.matrix.test.room.alias
+
+import io.element.android.libraries.matrix.api.core.RoomAlias
+import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper
+
+class FakeRoomAliasHelper(
+ private val roomAliasNameFromRoomDisplayNameLambda: (String) -> String = { name ->
+ name.trimStart().trimEnd().replace(" ", "_")
+ },
+ private val isRoomAliasValidLambda: (RoomAlias) -> Boolean = { true }
+) : RoomAliasHelper {
+ override fun roomAliasNameFromRoomDisplayName(name: String): String {
+ return roomAliasNameFromRoomDisplayNameLambda(name)
+ }
+
+ override fun isRoomAliasValid(roomAlias: RoomAlias): Boolean {
+ return isRoomAliasValidLambda(roomAlias)
+ }
+}
diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt
index e1c6d9829e..be85bb60b9 100644
--- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt
+++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/timeline/TimelineFixture.kt
@@ -21,17 +21,20 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventTimeline
import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
-import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
+import io.element.android.libraries.matrix.api.timeline.item.event.MessageShieldProvider
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
import io.element.android.libraries.matrix.api.timeline.item.event.Receipt
+import io.element.android.libraries.matrix.api.timeline.item.event.SendHandleProvider
import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
+import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemDebugInfoProvider
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.A_USER_NAME
+import io.element.android.libraries.matrix.test.core.FakeSendHandle
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentListOf
@@ -51,8 +54,9 @@ fun anEventTimelineItem(
senderProfile: ProfileTimelineDetails = aProfileTimelineDetails(),
timestamp: Long = 0L,
content: EventContent = aProfileChangeMessageContent(),
- debugInfo: TimelineItemDebugInfo = aTimelineItemDebugInfo(),
- messageShield: MessageShield? = null,
+ debugInfoProvider: TimelineItemDebugInfoProvider = TimelineItemDebugInfoProvider { aTimelineItemDebugInfo() },
+ messageShieldProvider: MessageShieldProvider = MessageShieldProvider { null },
+ sendHandleProvider: SendHandleProvider = SendHandleProvider { FakeSendHandle() }
) = EventTimelineItem(
eventId = eventId,
transactionId = transactionId,
@@ -68,8 +72,9 @@ fun anEventTimelineItem(
timestamp = timestamp,
content = content,
origin = null,
- timelineItemDebugInfoProvider = { debugInfo },
- messageShieldProvider = { messageShield },
+ timelineItemDebugInfoProvider = debugInfoProvider,
+ messageShieldProvider = messageShieldProvider,
+ sendHandleProvider = sendHandleProvider,
)
fun aProfileTimelineDetails(
diff --git a/libraries/matrixui/src/main/res/values-fi/translations.xml b/libraries/matrixui/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..abed5f4a88
--- /dev/null
+++ b/libraries/matrixui/src/main/res/values-fi/translations.xml
@@ -0,0 +1,4 @@
+
+
+ "%1$s (%2$s) kutsui sinut"
+
diff --git a/libraries/matrixui/src/main/res/values-uk/translations.xml b/libraries/matrixui/src/main/res/values-uk/translations.xml
index 1b87955e3b..5b4209626a 100644
--- a/libraries/matrixui/src/main/res/values-uk/translations.xml
+++ b/libraries/matrixui/src/main/res/values-uk/translations.xml
@@ -1,4 +1,4 @@
- "%1$s (%2$s) запросив (-ла) Вас"
+ "%1$s (%2$s) запрошує вас"
diff --git a/libraries/permissions/api/src/main/res/values-fi/translations.xml b/libraries/permissions/api/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..5c9be594b6
--- /dev/null
+++ b/libraries/permissions/api/src/main/res/values-fi/translations.xml
@@ -0,0 +1,7 @@
+
+
+ "Jotta sovellus voisi käyttää kameraa, anna lupa järjestelmän asetuksista."
+ "Anna lupa järjestelmän asetuksista."
+ "Jotta sovellus voisi käyttää mikrofonia, anna lupa järjestelmän asetuksista."
+ "Jotta sovellus voisi näyttää ilmoituksia, anna lupa järjestelmän asetuksista."
+
diff --git a/libraries/permissions/api/src/main/res/values-uk/translations.xml b/libraries/permissions/api/src/main/res/values-uk/translations.xml
index a94979b744..6c69147454 100644
--- a/libraries/permissions/api/src/main/res/values-uk/translations.xml
+++ b/libraries/permissions/api/src/main/res/values-uk/translations.xml
@@ -1,7 +1,7 @@
- "Для того, щоб дозволити програмі використовувати камеру, надайте дозвіл у системних налаштуваннях."
- "Будь ласка, надайте дозвіл в системних налаштуваннях."
- "Для того, щоб дозволити програмі використовувати мікрофон, надайте дозвіл у налаштуваннях системи."
- "Для того, щоб програма відображала сповіщення, надайте дозвіл у налаштуваннях системи."
+ "Щоб дозволити застосунку використовувати камеру, надайте дозвіл у системних налаштуваннях."
+ "Надайте дозвіл в системних налаштуваннях."
+ "Щоб дозволити застосунку використовувати мікрофон, надайте дозвіл у налаштуваннях системи."
+ "Щоб застосунок показував сповіщення, надайте дозвіл у налаштуваннях системи."
diff --git a/libraries/permissions/impl/src/main/res/values-fi/translations.xml b/libraries/permissions/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..f8253bca03
--- /dev/null
+++ b/libraries/permissions/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,5 @@
+
+
+ "Tarkistaa, että sovellus voi näyttää ilmoituksia."
+ "Lupien tarkistus"
+
diff --git a/libraries/permissions/impl/src/main/res/values-uk/translations.xml b/libraries/permissions/impl/src/main/res/values-uk/translations.xml
index 09f8671a97..ef1daf4d74 100644
--- a/libraries/permissions/impl/src/main/res/values-uk/translations.xml
+++ b/libraries/permissions/impl/src/main/res/values-uk/translations.xml
@@ -1,5 +1,5 @@
- "Перевірте, чи програма може показувати сповіщення."
+ "Перевірте, чи може застосунок показувати сповіщення."
"Перевірте дозволи"
diff --git a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt
index a28abbd9ef..872a968642 100644
--- a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt
+++ b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt
@@ -40,7 +40,7 @@ interface PushService {
* To be used when there is no distributor available.
*/
suspend fun selectPushProvider(
- matrixClient: MatrixClient,
+ sessionId: SessionId,
pushProvider: PushProvider,
)
diff --git a/libraries/push/impl/build.gradle.kts b/libraries/push/impl/build.gradle.kts
index 74d6ba3182..6489f26dec 100644
--- a/libraries/push/impl/build.gradle.kts
+++ b/libraries/push/impl/build.gradle.kts
@@ -43,6 +43,7 @@ dependencies {
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui)
implementation(projects.libraries.preferences.api)
+ implementation(projects.libraries.sessionStorage.api)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.troubleshoot.api)
implementation(projects.features.call.api)
@@ -64,6 +65,7 @@ dependencies {
testImplementation(libs.coroutines.test)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.libraries.preferences.test)
+ testImplementation(projects.libraries.sessionStorage.test)
testImplementation(projects.libraries.push.test)
testImplementation(projects.libraries.pushproviders.test)
testImplementation(projects.libraries.pushstore.test)
diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt
index 789b8e1f4e..4e91940bdc 100644
--- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt
+++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt
@@ -9,6 +9,7 @@ package io.element.android.libraries.push.impl
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.push.api.GetCurrentPushProvider
@@ -17,17 +18,27 @@ import io.element.android.libraries.push.impl.test.TestPush
import io.element.android.libraries.pushproviders.api.Distributor
import io.element.android.libraries.pushproviders.api.PushProvider
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
+import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore
+import io.element.android.libraries.sessionstorage.api.observer.SessionListener
+import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import kotlinx.coroutines.flow.Flow
import timber.log.Timber
import javax.inject.Inject
-@ContributesBinding(AppScope::class)
+@ContributesBinding(AppScope::class, boundType = PushService::class)
+@SingleIn(AppScope::class)
class DefaultPushService @Inject constructor(
private val testPush: TestPush,
private val userPushStoreFactory: UserPushStoreFactory,
private val pushProviders: Set<@JvmSuppressWildcards PushProvider>,
private val getCurrentPushProvider: GetCurrentPushProvider,
-) : PushService {
+ private val sessionObserver: SessionObserver,
+ private val pushClientSecretStore: PushClientSecretStore,
+) : PushService, SessionListener {
+ init {
+ observeSessions()
+ }
+
override suspend fun getCurrentPushProvider(): PushProvider? {
val currentPushProvider = getCurrentPushProvider.getCurrentPushProvider()
return pushProviders.find { it.name == currentPushProvider }
@@ -47,7 +58,7 @@ class DefaultPushService @Inject constructor(
val userPushStore = userPushStoreFactory.getOrCreate(matrixClient.sessionId)
val currentPushProviderName = userPushStore.getPushProviderName()
val currentPushProvider = pushProviders.find { it.name == currentPushProviderName }
- val currentDistributorValue = currentPushProvider?.getCurrentDistributor(matrixClient)?.value
+ val currentDistributorValue = currentPushProvider?.getCurrentDistributor(matrixClient.sessionId)?.value
if (currentPushProviderName != pushProvider.name || currentDistributorValue != distributor.value) {
// Unregister previous one if any
currentPushProvider
@@ -65,11 +76,11 @@ class DefaultPushService @Inject constructor(
}
override suspend fun selectPushProvider(
- matrixClient: MatrixClient,
+ sessionId: SessionId,
pushProvider: PushProvider,
) {
Timber.d("Select ${pushProvider.name}")
- val userPushStore = userPushStoreFactory.getOrCreate(matrixClient.sessionId)
+ val userPushStore = userPushStoreFactory.getOrCreate(sessionId)
userPushStore.setPushProviderName(pushProvider.name)
}
@@ -87,4 +98,31 @@ class DefaultPushService @Inject constructor(
testPush.execute(config)
return true
}
+
+ private fun observeSessions() {
+ sessionObserver.addListener(this)
+ }
+
+ override suspend fun onSessionCreated(userId: String) {
+ // Nothing to do
+ }
+
+ /**
+ * The session has been deleted.
+ * In this case, this is not necessary to unregister the pusher from the homeserver,
+ * but we need to do some cleanup locally.
+ * The current push provider may want to take action, and we need to
+ * cleanup the stores.
+ */
+ override suspend fun onSessionDeleted(userId: String) {
+ val sessionId = SessionId(userId)
+ val userPushStore = userPushStoreFactory.getOrCreate(sessionId)
+ val currentPushProviderName = userPushStore.getPushProviderName()
+ val currentPushProvider = pushProviders.find { it.name == currentPushProviderName }
+ // Cleanup the current push provider. They may need the client secret, so delete the secret after.
+ currentPushProvider?.onSessionDeleted(sessionId)
+ // Now we can safely reset the stores.
+ pushClientSecretStore.resetSecret(sessionId)
+ userPushStore.reset()
+ }
}
diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt
index 97e80f4dbf..c378b76140 100644
--- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt
+++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt
@@ -151,7 +151,7 @@ class DefaultNotifiableEventResolver @Inject constructor(
noisy = isNoisy,
timestamp = this.timestamp,
senderDisambiguatedDisplayName = getDisambiguatedDisplayName(content.senderId),
- body = stringProvider.getString(CommonStrings.common_call_invite),
+ body = stringProvider.getString(CommonStrings.common_unsupported_call),
roomName = roomDisplayName,
roomIsDm = isDm,
roomAvatarPath = roomAvatarUrl,
diff --git a/libraries/push/impl/src/main/res/values-fi/translations.xml b/libraries/push/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..61c0890fd3
--- /dev/null
+++ b/libraries/push/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,81 @@
+
+
+ "Puhelu"
+ "Tapahtumien kuuntelu"
+ "Äänekkäät ilmoitukset"
+ "Soivat puhelut"
+ "Hiljaiset ilmoitukset"
+
+ - "%1$s: %2$d viesti"
+ - "%1$s: %2$d viestiä"
+
+
+ - "%d ilmoitus"
+ - "%d ilmoitusta"
+
+ "Ilmoitus"
+ "Saapuva puhelu"
+ "** Lähetys epäonnistui - avaa huone"
+ "Liity"
+ "Hylkää"
+
+ - "%d kutsu"
+ - "%d kutsua"
+
+ "Kutsui sinut keskustelemaan"
+ "%1$s kutsui sinut keskustelemaan"
+ "Mainitsi sinut: %1$s"
+ "Uusia viestejä"
+
+ - "%d uusi viesti"
+ - "%d uutta viestiä"
+
+ "Reagoi emojilla %1$s"
+ "Merkitse luetuksi"
+ "Pikavastaus"
+ "Kutsui sinut liittymään huoneeseen"
+ "%1$s kutsui sinut liittymään huoneeseen"
+ "Minä"
+ "%1$s mainitsi tai vastasi"
+ "Katselet ilmoitusta! Klikkaa minua!"
+ "%1$s: %2$s"
+ "%1$s: %2$s %3$s"
+
+ - "%d lukematon viesti"
+ - "%d lukematonta viestiä"
+
+ "%1$s ja %2$s"
+ "%1$s %2$s"
+ "%1$s %2$s ja %3$s"
+
+ - "%d huoneessa"
+ - "%d huoneessa"
+
+ "Taustasynkronointi"
+ "Googlen palvelut"
+ "Kelvollisia Google Play -palveluita ei löytynyt. Ilmoitukset eivät ehkä toimi oikein."
+ "Hakee nykyisen palveluntarjoajan nimen."
+ "Push-palveluntarjoajia ei ole valittu."
+ "Nykyinen push-palveluntarjoaja: %1$s."
+ "Nykyinen push-palveluntarjoaja"
+ "Varmistaa, että sovelluksella on vähintään yksi push-palveluntarjoaja."
+ "Push-palveluntarjoajia ei löytynyt."
+
+ - "Löytyi %1$d push-palveluntarjoaja: %2$s"
+ - "Löytyi %1$d push-palveluntarjoajaa: %2$s"
+
+ "Push-palveluntarjoajien havaitseminen"
+ "Tarkistaa, että sovellus voi näyttää ilmoituksen."
+ "Ilmoitusta ei ole klikattu."
+ "Ilmoitusta ei voida näyttää."
+ "Ilmoitusta on klikattu!"
+ "Ilmoituksen näyttäminen"
+ "Klikkaa ilmoitusta jatkaaksesi testiä."
+ "Varmistaa, että sovellus vastaanottaa push-ilmoituksen."
+ "Virhe: pusher on hylännyt pyynnön."
+ "Virhe: %1$s."
+ "Virhe, push-ilmoitusta ei voi testata."
+ "Virhe, aikakatkaisu push-ilmoitusta odotellessa."
+ "Push-ilmoituksella kesti %1$d ms palata takaisin."
+ "Testaa push-ilmoituksen paluu"
+
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 b7e3df3348..71e8f14d61 100644
--- a/libraries/push/impl/src/main/res/values-uk/translations.xml
+++ b/libraries/push/impl/src/main/res/values-uk/translations.xml
@@ -3,7 +3,7 @@
"Виклик"
"Прослуховування подій"
"Гучні сповіщення"
- "Дзвінки"
+ "Виклики"
"Тихі сповіщення"
- "%1$s: %2$d повідомлення"
@@ -16,8 +16,8 @@
- "%d сповіщень"
"Сповіщення"
- "Вхідний дзвінок"
- "** Не вдалося надіслати - будь ласка, відкрийте кімнату"
+ "Вхідний виклик"
+ "** Не вдалося надіслати - відкрийте кімнату"
"Доєднатися"
"Відхилити"
@@ -25,25 +25,28 @@
- "%d запрошення"
- "%d запрошень"
- "Запросив (-ла) Вас до чату"
- "Згадав(-ла) вас: %1$s"
+ "Запрошує вас до бесіди"
+ "%1$s запросив вас до чату"
+ "Вас згадує: %1$s"
"Нові повідомлення"
- "%d нове повідомлення"
- - "%d нових повідомлень"
+ - "%d нові повідомлення"
- "%d нових повідомлень"
- "Відреагував (-ла) з %1$s"
+ "Реагує з %1$s"
"Позначити прочитаним"
"Швидка відповідь"
- "Запросив (-ла) Вас приєднатися до кімнати"
+ "Запрошує вас приєднатися до кімнати"
+ "%1$s запросив вас приєднатися до кімнати"
"Я"
+ "%1$s згадували або відповідали"
"Ви переглядаєте сповіщення! Натисніть тут!"
"%1$s: %2$s"
"%1$s: %2$s %3$s"
- "%d непрочитане сповіщення"
- - "%d непрочитаних сповіщень"
+ - "%d непрочитані сповіщення"
- "%d непрочитаних сповіщень"
"%1$s та %2$s"
@@ -58,26 +61,28 @@
"Сервіси Google"
"Не знайдено дійсних сервісів Google Play. Сповіщення можуть не працювати належним чином."
"Отримує назву поточного постачальника."
- "Постачальників push-сповіщень не обрано."
+ "Постачальників push-сповіщень не вибрано."
"Поточний постачальник: %1$s."
- "Поточний провайдер push"
- "Переконайтеся, що програма має принаймні один push провайдер."
- "Не знайдено постачальників push-повідомлень."
+ "Поточний постачальник push-сповіщень"
+ "Переконайтеся, що застосунок має принаймні одного постачальника push-сповіщень."
+ "Не знайдено постачальників push-сповіщень."
- "Виявлено %1$d постачальника: %2$s"
- - "Виявлено %1$d постачальників: %2$s"
+ - "Виявлено %1$d постачальники: %2$s"
- "Виявлено %1$d постачальників: %2$s"
- "Виявлення push-провайдерів"
- "Перевірте, чи може програма відображати сповіщення."
+ "Виявлення постачальників push-сповіщень"
+ "Перевірте, чи може застосунок показувати сповіщення."
"Ви не натиснули на сповіщення."
- "Не вдається відобразити сповіщення."
+ "Не вдається показати сповіщення."
"Ви натиснули на сповіщення!"
- "Відображення сповіщення"
- "Будь ласка, натисніть на сповіщення, щоб продовжити тест."
+ "Показ сповіщення"
+ "Натисніть на сповіщення, щоб продовжити тест."
"Переконується, що застосунок отримує push-сповіщення."
"Помилка: постачальник push-сповіщень відхилив запит."
"Помилка: %1$s."
"Помилка, неможливо перевірити push."
+ "Помилка, час очікування вийшов на push-повідомлення."
+ "Зворотнє відправлення push-повідомлення, зайняло %1$d мс."
"Перевірка зворотного надсилання"
diff --git a/libraries/push/impl/src/main/res/values-zh/translations.xml b/libraries/push/impl/src/main/res/values-zh/translations.xml
index f81d97f1da..d4e904ca67 100644
--- a/libraries/push/impl/src/main/res/values-zh/translations.xml
+++ b/libraries/push/impl/src/main/res/values-zh/translations.xml
@@ -13,13 +13,14 @@
"通知"
"来电"
- "** 无法发送——请打开房间"
+ "** 无法发送——请打开聊天室"
"加入"
"拒绝"
- "%d 个邀请"
"邀请您聊天"
+ "%1$s 邀您聊天"
"提到了你:%1$s"
"新消息"
@@ -28,7 +29,8 @@
"使用 %1$s 回应"
"标记为已读"
"快速回复"
- "邀请你加入房间"
+ "邀请你加入聊天室"
+ "%1$s 邀请您加入房间"
"我"
"%1$s提及或回复"
"您正在查看通知!点击我!"
@@ -41,7 +43,7 @@
"%2$s 中的 %1$s"
"在 %2$s 和 %3$s 中的 %1$s"
- - "%d 个房间"
+ - "%d 个聊天室"
"后台同步"
"谷歌服务"
diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPushServiceTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPushServiceTest.kt
index f2b029da49..af638d084b 100644
--- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPushServiceTest.kt
+++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPushServiceTest.kt
@@ -9,6 +9,7 @@ package io.element.android.libraries.push.impl
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.MatrixClient
+import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.test.AN_EXCEPTION
import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.FakeMatrixClient
@@ -22,8 +23,12 @@ import io.element.android.libraries.pushproviders.api.PushProvider
import io.element.android.libraries.pushproviders.test.FakePushProvider
import io.element.android.libraries.pushproviders.test.aCurrentUserPushConfig
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
+import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStoreFactory
+import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.InMemoryPushClientSecretStore
+import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
+import io.element.android.libraries.sessionstorage.test.observer.NoOpSessionObserver
import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value
import kotlinx.coroutines.flow.first
@@ -210,17 +215,87 @@ class DefaultPushServiceTest {
assertThat(defaultPushService.ignoreRegistrationError(A_SESSION_ID).first()).isTrue()
}
+ @Test
+ fun `onSessionCreated is noop`() = runTest {
+ val defaultPushService = createDefaultPushService()
+ defaultPushService.onSessionCreated(A_SESSION_ID.value)
+ }
+
+ @Test
+ fun `onSessionDeleted should transmit the info to the current push provider and cleanup the stores`() = runTest {
+ val onSessionDeletedLambda = lambdaRecorder { }
+ val aCurrentPushProvider = FakePushProvider(
+ name = "aCurrentPushProvider",
+ onSessionDeletedLambda = onSessionDeletedLambda,
+ )
+ val userPushStore = FakeUserPushStore(
+ pushProviderName = aCurrentPushProvider.name,
+ )
+ val pushClientSecretStore = InMemoryPushClientSecretStore()
+ val defaultPushService = createDefaultPushService(
+ pushProviders = setOf(aCurrentPushProvider),
+ getCurrentPushProvider = FakeGetCurrentPushProvider(currentPushProvider = aCurrentPushProvider.name),
+ userPushStoreFactory = FakeUserPushStoreFactory(
+ userPushStore = { userPushStore },
+ ),
+ pushClientSecretStore = pushClientSecretStore,
+ )
+ defaultPushService.onSessionDeleted(A_SESSION_ID.value)
+ assertThat(userPushStore.getPushProviderName()).isNull()
+ assertThat(pushClientSecretStore.getSecret(A_SESSION_ID)).isNull()
+ onSessionDeletedLambda.assertions().isCalledOnce().with(value(A_SESSION_ID))
+ }
+
+ @Test
+ fun `onSessionDeleted when there is no push provider should just cleanup the stores`() = runTest {
+ val userPushStore = FakeUserPushStore(
+ pushProviderName = null,
+ )
+ val pushClientSecretStore = InMemoryPushClientSecretStore()
+ val defaultPushService = createDefaultPushService(
+ pushProviders = emptySet(),
+ getCurrentPushProvider = FakeGetCurrentPushProvider(currentPushProvider = null),
+ userPushStoreFactory = FakeUserPushStoreFactory(
+ userPushStore = { userPushStore },
+ ),
+ pushClientSecretStore = pushClientSecretStore,
+ )
+ defaultPushService.onSessionDeleted(A_SESSION_ID.value)
+ assertThat(userPushStore.getPushProviderName()).isNull()
+ assertThat(pushClientSecretStore.getSecret(A_SESSION_ID)).isNull()
+ }
+
+ @Test
+ fun `selectPushProvider should store the data in the store`() = runTest {
+ val userPushStore = FakeUserPushStore()
+ val defaultPushService = createDefaultPushService(
+ userPushStoreFactory = FakeUserPushStoreFactory(
+ userPushStore = { userPushStore },
+ ),
+ )
+ val aPushProvider = FakePushProvider(
+ name = "aCurrentPushProvider",
+ )
+ assertThat(userPushStore.getPushProviderName()).isNull()
+ defaultPushService.selectPushProvider(A_SESSION_ID, aPushProvider)
+ assertThat(userPushStore.getPushProviderName()).isEqualTo(aPushProvider.name)
+ }
+
private fun createDefaultPushService(
testPush: TestPush = FakeTestPush(),
userPushStoreFactory: UserPushStoreFactory = FakeUserPushStoreFactory(),
pushProviders: Set<@JvmSuppressWildcards PushProvider> = emptySet(),
getCurrentPushProvider: GetCurrentPushProvider = FakeGetCurrentPushProvider(currentPushProvider = null),
+ sessionObserver: SessionObserver = NoOpSessionObserver(),
+ pushClientSecretStore: PushClientSecretStore = InMemoryPushClientSecretStore(),
): DefaultPushService {
return DefaultPushService(
testPush = testPush,
userPushStoreFactory = userPushStoreFactory,
pushProviders = pushProviders,
getCurrentPushProvider = getCurrentPushProvider,
+ sessionObserver = sessionObserver,
+ pushClientSecretStore = pushClientSecretStore,
)
}
}
diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt
index 153ebe1ffc..fa4e1fa1ee 100644
--- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt
+++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt
@@ -588,7 +588,7 @@ class DefaultNotifiableEventResolverTest {
noisy = false,
timestamp = A_TIMESTAMP,
senderDisambiguatedDisplayName = A_USER_NAME_2,
- body = "Call in progress (unsupported)",
+ body = "Unsupported call",
imageUriString = null,
imageMimeType = null,
threadId = null,
diff --git a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/FakePushService.kt b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/FakePushService.kt
index 7af2b73fe5..6b7512afa8 100644
--- a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/FakePushService.kt
+++ b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/FakePushService.kt
@@ -24,7 +24,7 @@ class FakePushService(
Result.success(Unit)
},
private val currentPushProvider: () -> PushProvider? = { availablePushProviders.firstOrNull() },
- private val selectPushProviderLambda: suspend (MatrixClient, PushProvider) -> Unit = { _, _ -> lambdaError() },
+ private val selectPushProviderLambda: suspend (SessionId, PushProvider) -> Unit = { _, _ -> lambdaError() },
private val setIgnoreRegistrationErrorLambda: (SessionId, Boolean) -> Unit = { _, _ -> lambdaError() },
) : PushService {
override suspend fun getCurrentPushProvider(): PushProvider? {
@@ -50,8 +50,8 @@ class FakePushService(
}
}
- override suspend fun selectPushProvider(matrixClient: MatrixClient, pushProvider: PushProvider) {
- selectPushProviderLambda(matrixClient, pushProvider)
+ override suspend fun selectPushProvider(sessionId: SessionId, pushProvider: PushProvider) {
+ selectPushProviderLambda(sessionId, pushProvider)
}
private val ignoreRegistrationError = MutableStateFlow(false)
diff --git a/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt b/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt
index 90b4cb0465..3c82113798 100644
--- a/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt
+++ b/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt
@@ -8,6 +8,7 @@
package io.element.android.libraries.pushproviders.api
import io.element.android.libraries.matrix.api.MatrixClient
+import io.element.android.libraries.matrix.api.core.SessionId
/**
* This is the main API for this module.
@@ -36,13 +37,18 @@ interface PushProvider {
/**
* Return the current distributor, or null if none.
*/
- suspend fun getCurrentDistributor(matrixClient: MatrixClient): Distributor?
+ suspend fun getCurrentDistributor(sessionId: SessionId): Distributor?
/**
* Unregister the pusher.
*/
suspend fun unregister(matrixClient: MatrixClient): Result
+ /**
+ * To invoke when the session is deleted.
+ */
+ suspend fun onSessionDeleted(sessionId: SessionId)
+
suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig?
fun canRotateToken(): Boolean
diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt
index b1e31a2303..9b384a6e65 100644
--- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt
+++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt
@@ -11,6 +11,7 @@ import com.squareup.anvil.annotations.ContributesMultibinding
import io.element.android.libraries.core.log.logger.LoggerTag
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.matrix.api.MatrixClient
+import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
import io.element.android.libraries.pushproviders.api.Distributor
import io.element.android.libraries.pushproviders.api.PushProvider
@@ -51,7 +52,7 @@ class FirebasePushProvider @Inject constructor(
)
}
- override suspend fun getCurrentDistributor(matrixClient: MatrixClient) = firebaseDistributor
+ override suspend fun getCurrentDistributor(sessionId: SessionId) = firebaseDistributor
override suspend fun unregister(matrixClient: MatrixClient): Result {
val pushKey = firebaseStore.getFcmToken()
@@ -63,6 +64,11 @@ class FirebasePushProvider @Inject constructor(
}
}
+ /**
+ * Nothing to clean up here.
+ */
+ override suspend fun onSessionDeleted(sessionId: SessionId) = Unit
+
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
return firebaseStore.getFcmToken()?.let { fcmToken ->
CurrentUserPushConfig(
diff --git a/libraries/pushproviders/firebase/src/main/res/values-fi/translations.xml b/libraries/pushproviders/firebase/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..6ba1964e94
--- /dev/null
+++ b/libraries/pushproviders/firebase/src/main/res/values-fi/translations.xml
@@ -0,0 +1,11 @@
+
+
+ "Varmistaa, että Firebase on käytettävissä."
+ "Firebase ei ole saatavilla."
+ "Firebase on saatavilla."
+ "Firebasen tarkistus"
+ "Varmistaa, että Firebase token on käytettävissä."
+ "Firebase token ei ole tiedossa."
+ "Firebase token: %1$s."
+ "Firebase tokenin tarkistus"
+
diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt
index 6a3a9474e4..b5bac64b09 100644
--- a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt
+++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt
@@ -10,6 +10,7 @@ package io.element.android.libraries.pushproviders.firebase
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.test.AN_EXCEPTION
+import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.push.test.FakePusherSubscriber
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
@@ -47,9 +48,9 @@ class FirebasePushProviderTest {
}
@Test
- fun `getCurrentDistributor always return the unique distributor`() = runTest {
+ fun `getCurrentDistributor always returns the unique distributor`() = runTest {
val firebasePushProvider = createFirebasePushProvider()
- val result = firebasePushProvider.getCurrentDistributor(FakeMatrixClient())
+ val result = firebasePushProvider.getCurrentDistributor(A_SESSION_ID)
assertThat(result).isEqualTo(Distributor("Firebase", "Firebase"))
}
@@ -176,6 +177,18 @@ class FirebasePushProviderTest {
lambda.assertions().isCalledOnce()
}
+ @Test
+ fun `canRotateToken should return true`() = runTest {
+ val firebasePushProvider = createFirebasePushProvider()
+ assertThat(firebasePushProvider.canRotateToken()).isTrue()
+ }
+
+ @Test
+ fun `onSessionDeleted should be noop`() = runTest {
+ val firebasePushProvider = createFirebasePushProvider()
+ firebasePushProvider.onSessionDeleted(A_SESSION_ID)
+ }
+
private fun createFirebasePushProvider(
firebaseStore: FirebaseStore = InMemoryFirebaseStore(),
pusherSubscriber: PusherSubscriber = FakePusherSubscriber(),
diff --git a/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt b/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt
index 6f5bdda5b7..4d8006b9e3 100644
--- a/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt
+++ b/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt
@@ -8,6 +8,7 @@
package io.element.android.libraries.pushproviders.test
import io.element.android.libraries.matrix.api.MatrixClient
+import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
import io.element.android.libraries.pushproviders.api.Distributor
import io.element.android.libraries.pushproviders.api.PushProvider
@@ -21,6 +22,7 @@ class FakePushProvider(
private val currentUserPushConfig: CurrentUserPushConfig? = null,
private val registerWithResult: (MatrixClient, Distributor) -> Result = { _, _ -> lambdaError() },
private val unregisterWithResult: (MatrixClient) -> Result = { lambdaError() },
+ private val onSessionDeletedLambda: (SessionId) -> Unit = { lambdaError() },
private val canRotateTokenResult: () -> Boolean = { lambdaError() },
private val rotateTokenLambda: () -> Result = { lambdaError() },
) : PushProvider {
@@ -30,7 +32,7 @@ class FakePushProvider(
return registerWithResult(matrixClient, distributor)
}
- override suspend fun getCurrentDistributor(matrixClient: MatrixClient): Distributor? {
+ override suspend fun getCurrentDistributor(sessionId: SessionId): Distributor? {
return currentDistributor()
}
@@ -38,6 +40,10 @@ class FakePushProvider(
return unregisterWithResult(matrixClient)
}
+ override suspend fun onSessionDeleted(sessionId: SessionId) {
+ onSessionDeletedLambda(sessionId)
+ }
+
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
return currentUserPushConfig
}
diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt
index 1ce929a75b..b598d3371e 100644
--- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt
+++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt
@@ -10,6 +10,7 @@ package io.element.android.libraries.pushproviders.unifiedpush
import com.squareup.anvil.annotations.ContributesMultibinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.matrix.api.MatrixClient
+import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
import io.element.android.libraries.pushproviders.api.Distributor
import io.element.android.libraries.pushproviders.api.PushProvider
@@ -40,14 +41,19 @@ class UnifiedPushProvider @Inject constructor(
}
}
- override suspend fun getCurrentDistributor(matrixClient: MatrixClient): Distributor? {
- val distributorValue = unifiedPushStore.getDistributorValue(matrixClient.sessionId)
+ override suspend fun getCurrentDistributor(sessionId: SessionId): Distributor? {
+ val distributorValue = unifiedPushStore.getDistributorValue(sessionId)
return getDistributors().find { it.value == distributorValue }
}
override suspend fun unregister(matrixClient: MatrixClient): Result {
val clientSecret = pushClientSecret.getSecretForUser(matrixClient.sessionId)
- return unRegisterUnifiedPushUseCase.execute(matrixClient, clientSecret)
+ return unRegisterUnifiedPushUseCase.unregister(matrixClient, clientSecret)
+ }
+
+ override suspend fun onSessionDeleted(sessionId: SessionId) {
+ val clientSecret = pushClientSecret.getSecretForUser(sessionId)
+ unRegisterUnifiedPushUseCase.cleanup(clientSecret)
}
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt
index f379b97726..2c2613901c 100644
--- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt
+++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt
@@ -18,7 +18,15 @@ import timber.log.Timber
import javax.inject.Inject
interface UnregisterUnifiedPushUseCase {
- suspend fun execute(matrixClient: MatrixClient, clientSecret: String): Result
+ /**
+ * Unregister the app from the homeserver, then from UnifiedPush.
+ */
+ suspend fun unregister(matrixClient: MatrixClient, clientSecret: String): Result
+
+ /**
+ * Cleanup any remaining data for the given client secret and unregister the app from UnifiedPush.
+ */
+ fun cleanup(clientSecret: String)
}
@ContributesBinding(AppScope::class)
@@ -27,21 +35,24 @@ class DefaultUnregisterUnifiedPushUseCase @Inject constructor(
private val unifiedPushStore: UnifiedPushStore,
private val pusherSubscriber: PusherSubscriber,
) : UnregisterUnifiedPushUseCase {
- override suspend fun execute(matrixClient: MatrixClient, clientSecret: String): Result {
+ override suspend fun unregister(matrixClient: MatrixClient, clientSecret: String): Result {
val endpoint = unifiedPushStore.getEndpoint(clientSecret)
val gateway = unifiedPushStore.getPushGateway(clientSecret)
if (endpoint == null || gateway == null) {
Timber.w("No endpoint or gateway found for client secret")
// Ensure we don't have any remaining data, but ignore this error
- unifiedPushStore.storeUpEndpoint(clientSecret, null)
- unifiedPushStore.storePushGateway(clientSecret, null)
+ cleanup(clientSecret)
return Result.success(Unit)
}
return pusherSubscriber.unregisterPusher(matrixClient, endpoint, gateway)
.onSuccess {
- unifiedPushStore.storeUpEndpoint(clientSecret, null)
- unifiedPushStore.storePushGateway(clientSecret, null)
- UnifiedPush.unregisterApp(context)
+ cleanup(clientSecret)
}
}
+
+ override fun cleanup(clientSecret: String) {
+ unifiedPushStore.storeUpEndpoint(clientSecret, null)
+ unifiedPushStore.storePushGateway(clientSecret, null)
+ UnifiedPush.unregisterApp(context, clientSecret)
+ }
}
diff --git a/libraries/pushproviders/unifiedpush/src/main/res/values-fi/translations.xml b/libraries/pushproviders/unifiedpush/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..f997d02ab0
--- /dev/null
+++ b/libraries/pushproviders/unifiedpush/src/main/res/values-fi/translations.xml
@@ -0,0 +1,10 @@
+
+
+ "Varmistas, että UnifiedPush-jakelijat ovat käytettävissä."
+ "Push-jakelijoita ei löytynyt."
+
+ - "%1$d jakelija löytyi: %2$s."
+ - "%1$d jakelijaa löytyi: %2$s."
+
+ "UnifiedPushin tarkistus"
+
diff --git a/libraries/pushproviders/unifiedpush/src/main/res/values-uk/translations.xml b/libraries/pushproviders/unifiedpush/src/main/res/values-uk/translations.xml
index cad17a7b69..5b33d80d7d 100644
--- a/libraries/pushproviders/unifiedpush/src/main/res/values-uk/translations.xml
+++ b/libraries/pushproviders/unifiedpush/src/main/res/values-uk/translations.xml
@@ -3,9 +3,9 @@
"Переконується, що дистриб\'ютори UnifiedPush доступні."
"Дистриб\'юторів не знайдено."
- - "%1$d дистриб\'ютора знайдено: %2$s."
- - "%1$d дистриб\'юторів знайдено: %2$s."
- - "%1$d дистриб\'юторів знайдено: %2$s."
+ - "Знайдений %1$d дистриб\'ютор: %2$s."
+ - "Знайдено %1$d дистриб\'ютори: %2$s."
+ - "Знайдено %1$d дистриб\'юторів: %2$s."
"Перевірка UnifiedPush"
diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnregisterUnifiedPushUseCaseTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnregisterUnifiedPushUseCaseTest.kt
index 24f95d94c2..0c05748b03 100644
--- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnregisterUnifiedPushUseCaseTest.kt
+++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnregisterUnifiedPushUseCaseTest.kt
@@ -41,7 +41,7 @@ class DefaultUnregisterUnifiedPushUseCaseTest {
unregisterPusherResult = lambda
)
)
- val result = useCase.execute(matrixClient, A_SECRET)
+ val result = useCase.unregister(matrixClient, A_SECRET)
assertThat(result.isSuccess).isTrue()
lambda.assertions()
.isCalledOnce()
@@ -67,7 +67,7 @@ class DefaultUnregisterUnifiedPushUseCaseTest {
storePushGatewayResult = storePushGatewayResult,
),
)
- val result = useCase.execute(matrixClient, A_SECRET)
+ val result = useCase.unregister(matrixClient, A_SECRET)
assertThat(result.isSuccess).isTrue()
storeUpEndpointResult.assertions()
.isCalledOnce()
@@ -90,7 +90,7 @@ class DefaultUnregisterUnifiedPushUseCaseTest {
storePushGatewayResult = storePushGatewayResult,
),
)
- val result = useCase.execute(matrixClient, A_SECRET)
+ val result = useCase.unregister(matrixClient, A_SECRET)
assertThat(result.isSuccess).isTrue()
storeUpEndpointResult.assertions()
.isCalledOnce()
@@ -112,7 +112,7 @@ class DefaultUnregisterUnifiedPushUseCaseTest {
unregisterPusherResult = { _, _, _ -> Result.failure(AN_EXCEPTION) }
)
)
- val result = useCase.execute(matrixClient, A_SECRET)
+ val result = useCase.unregister(matrixClient, A_SECRET)
assertThat(result.isFailure).isTrue()
}
diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeUnregisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeUnregisterUnifiedPushUseCase.kt
index 145681de8c..d04ef25bfb 100644
--- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeUnregisterUnifiedPushUseCase.kt
+++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeUnregisterUnifiedPushUseCase.kt
@@ -11,9 +11,14 @@ import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.tests.testutils.lambda.lambdaError
class FakeUnregisterUnifiedPushUseCase(
- private val result: (MatrixClient, String) -> Result = { _, _ -> lambdaError() }
+ private val unregisterLambda: (MatrixClient, String) -> Result = { _, _ -> lambdaError() },
+ private val cleanupLambda: (String) -> Unit = { lambdaError() },
) : UnregisterUnifiedPushUseCase {
- override suspend fun execute(matrixClient: MatrixClient, clientSecret: String): Result {
- return result(matrixClient, clientSecret)
+ override suspend fun unregister(matrixClient: MatrixClient, clientSecret: String): Result {
+ return unregisterLambda(matrixClient, clientSecret)
+ }
+
+ override fun cleanup(clientSecret: String) {
+ cleanupLambda(clientSecret)
}
}
diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt
index 93e6a106e9..8282cbcbe6 100644
--- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt
+++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt
@@ -117,13 +117,13 @@ class UnifiedPushProviderTest {
fun `unregister ok`() = runTest {
val matrixClient = FakeMatrixClient()
val getSecretForUserResultLambda = lambdaRecorder { A_SECRET }
- val executeLambda = lambdaRecorder> { _, _ -> Result.success(Unit) }
+ val unregisterLambda = lambdaRecorder> { _, _ -> Result.success(Unit) }
val unifiedPushProvider = createUnifiedPushProvider(
pushClientSecret = FakePushClientSecret(
getSecretForUserResult = getSecretForUserResultLambda,
),
unRegisterUnifiedPushUseCase = FakeUnregisterUnifiedPushUseCase(
- result = executeLambda,
+ unregisterLambda = unregisterLambda,
),
)
val result = unifiedPushProvider.unregister(matrixClient)
@@ -131,7 +131,7 @@ class UnifiedPushProviderTest {
getSecretForUserResultLambda.assertions()
.isCalledOnce()
.with(value(A_SESSION_ID))
- executeLambda.assertions()
+ unregisterLambda.assertions()
.isCalledOnce()
.with(value(matrixClient), value(A_SECRET))
}
@@ -140,13 +140,13 @@ class UnifiedPushProviderTest {
fun `unregister ko`() = runTest {
val matrixClient = FakeMatrixClient()
val getSecretForUserResultLambda = lambdaRecorder { A_SECRET }
- val executeLambda = lambdaRecorder> { _, _ -> Result.failure(AN_EXCEPTION) }
+ val unregisterLambda = lambdaRecorder> { _, _ -> Result.failure(AN_EXCEPTION) }
val unifiedPushProvider = createUnifiedPushProvider(
pushClientSecret = FakePushClientSecret(
getSecretForUserResult = getSecretForUserResultLambda,
),
unRegisterUnifiedPushUseCase = FakeUnregisterUnifiedPushUseCase(
- result = executeLambda,
+ unregisterLambda = unregisterLambda,
),
)
val result = unifiedPushProvider.unregister(matrixClient)
@@ -154,7 +154,7 @@ class UnifiedPushProviderTest {
getSecretForUserResultLambda.assertions()
.isCalledOnce()
.with(value(A_SESSION_ID))
- executeLambda.assertions()
+ unregisterLambda.assertions()
.isCalledOnce()
.with(value(matrixClient), value(A_SECRET))
}
@@ -162,7 +162,6 @@ class UnifiedPushProviderTest {
@Test
fun `getCurrentDistributor ok`() = runTest {
val distributor = Distributor("value", "Name")
- val matrixClient = FakeMatrixClient()
val unifiedPushProvider = createUnifiedPushProvider(
unifiedPushStore = FakeUnifiedPushStore(
getDistributorValueResult = { distributor.value }
@@ -174,14 +173,13 @@ class UnifiedPushProviderTest {
)
)
)
- val result = unifiedPushProvider.getCurrentDistributor(matrixClient)
+ val result = unifiedPushProvider.getCurrentDistributor(A_SESSION_ID)
assertThat(result).isEqualTo(distributor)
}
@Test
fun `getCurrentDistributor not know`() = runTest {
val distributor = Distributor("value", "Name")
- val matrixClient = FakeMatrixClient()
val unifiedPushProvider = createUnifiedPushProvider(
unifiedPushStore = FakeUnifiedPushStore(
getDistributorValueResult = { "unknown" }
@@ -192,14 +190,13 @@ class UnifiedPushProviderTest {
)
)
)
- val result = unifiedPushProvider.getCurrentDistributor(matrixClient)
+ val result = unifiedPushProvider.getCurrentDistributor(A_SESSION_ID)
assertThat(result).isNull()
}
@Test
fun `getCurrentDistributor not found`() = runTest {
val distributor = Distributor("value", "Name")
- val matrixClient = FakeMatrixClient()
val unifiedPushProvider = createUnifiedPushProvider(
unifiedPushStore = FakeUnifiedPushStore(
getDistributorValueResult = { distributor.value }
@@ -208,7 +205,7 @@ class UnifiedPushProviderTest {
getDistributorsResult = emptyList()
)
)
- val result = unifiedPushProvider.getCurrentDistributor(matrixClient)
+ val result = unifiedPushProvider.getCurrentDistributor(A_SESSION_ID)
assertThat(result).isNull()
}
@@ -224,6 +221,27 @@ class UnifiedPushProviderTest {
assertThat(result).isEqualTo(currentUserPushConfig)
}
+ @Test
+ fun `canRotateToken should return false`() = runTest {
+ val unifiedPushProvider = createUnifiedPushProvider()
+ assertThat(unifiedPushProvider.canRotateToken()).isFalse()
+ }
+
+ @Test
+ fun `onSessionDeleted should do the cleanup`() = runTest {
+ val cleanupLambda = lambdaRecorder { }
+ val unifiedPushProvider = createUnifiedPushProvider(
+ pushClientSecret = FakePushClientSecret(
+ getSecretForUserResult = { A_SECRET }
+ ),
+ unRegisterUnifiedPushUseCase = FakeUnregisterUnifiedPushUseCase(
+ cleanupLambda = cleanupLambda,
+ ),
+ )
+ unifiedPushProvider.onSessionDeleted(A_SESSION_ID)
+ cleanupLambda.assertions().isCalledOnce().with(value(A_SECRET))
+ }
+
private fun createUnifiedPushProvider(
unifiedPushDistributorProvider: UnifiedPushDistributorProvider = FakeUnifiedPushDistributorProvider(),
registerUnifiedPushUseCase: RegisterUnifiedPushUseCase = FakeRegisterUnifiedPushUseCase(),
diff --git a/libraries/pushstore/impl/build.gradle.kts b/libraries/pushstore/impl/build.gradle.kts
index cca5f3445a..c4eafd896c 100644
--- a/libraries/pushstore/impl/build.gradle.kts
+++ b/libraries/pushstore/impl/build.gradle.kts
@@ -28,7 +28,6 @@ dependencies {
implementation(projects.libraries.core)
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.pushstore.api)
- implementation(projects.libraries.sessionStorage.api)
implementation(libs.androidx.corektx)
implementation(libs.androidx.datastore.preferences)
@@ -41,7 +40,6 @@ dependencies {
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.services.appnavstate.test)
testImplementation(projects.libraries.pushstore.test)
- testImplementation(projects.libraries.sessionStorage.test)
androidTestImplementation(libs.coroutines.test)
androidTestImplementation(libs.test.core)
diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt
index 714d8bece7..f4cb77f01e 100644
--- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt
+++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt
@@ -15,21 +15,14 @@ import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushstore.api.UserPushStore
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
-import io.element.android.libraries.sessionstorage.api.observer.SessionListener
-import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
@SingleIn(AppScope::class)
-@ContributesBinding(AppScope::class, boundType = UserPushStoreFactory::class)
+@ContributesBinding(AppScope::class)
class DefaultUserPushStoreFactory @Inject constructor(
@ApplicationContext private val context: Context,
- private val sessionObserver: SessionObserver,
-) : UserPushStoreFactory, SessionListener {
- init {
- observeSessions()
- }
-
+) : UserPushStoreFactory {
// We can have only one class accessing a single data store, so keep a cache of them.
private val cache = ConcurrentHashMap()
override fun getOrCreate(userId: SessionId): UserPushStore {
@@ -40,17 +33,4 @@ class DefaultUserPushStoreFactory @Inject constructor(
)
}
}
-
- private fun observeSessions() {
- sessionObserver.addListener(this)
- }
-
- override suspend fun onSessionCreated(userId: String) {
- // Nothing to do
- }
-
- override suspend fun onSessionDeleted(userId: String) {
- // Delete the store
- getOrCreate(SessionId(userId)).reset()
- }
}
diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt
index c4404c7c21..d488b69213 100644
--- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt
+++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt
@@ -9,26 +9,17 @@ package io.element.android.libraries.pushstore.impl.clientsecret
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
-import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretFactory
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore
-import io.element.android.libraries.sessionstorage.api.observer.SessionListener
-import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import javax.inject.Inject
-@SingleIn(AppScope::class)
-@ContributesBinding(AppScope::class, boundType = PushClientSecret::class)
+@ContributesBinding(AppScope::class)
class DefaultPushClientSecret @Inject constructor(
private val pushClientSecretFactory: PushClientSecretFactory,
private val pushClientSecretStore: PushClientSecretStore,
- private val sessionObserver: SessionObserver,
-) : PushClientSecret, SessionListener {
- init {
- observeSessions()
- }
-
+) : PushClientSecret {
override suspend fun getSecretForUser(userId: SessionId): String {
val existingSecret = pushClientSecretStore.getSecret(userId)
if (existingSecret != null) {
@@ -42,17 +33,4 @@ class DefaultPushClientSecret @Inject constructor(
override suspend fun getUserIdFromSecret(clientSecret: String): SessionId? {
return pushClientSecretStore.getUserIdFromSecret(clientSecret)
}
-
- private fun observeSessions() {
- sessionObserver.addListener(this)
- }
-
- override suspend fun onSessionCreated(userId: String) {
- // Nothing to do
- }
-
- override suspend fun onSessionDeleted(userId: String) {
- // Delete the secret
- pushClientSecretStore.resetSecret(SessionId(userId))
- }
}
diff --git a/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretTest.kt b/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretTest.kt
index 6c02ec2eb0..f4569468d7 100644
--- a/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretTest.kt
+++ b/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretTest.kt
@@ -10,7 +10,6 @@ package io.element.android.libraries.pushstore.impl.clientsecret
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.InMemoryPushClientSecretStore
-import io.element.android.libraries.sessionstorage.test.observer.NoOpSessionObserver
import kotlinx.coroutines.test.runTest
import org.junit.Test
@@ -24,11 +23,10 @@ internal class DefaultPushClientSecretTest {
fun test() = runTest {
val factory = FakePushClientSecretFactory()
val store = InMemoryPushClientSecretStore()
- val sut = DefaultPushClientSecret(factory, store, NoOpSessionObserver())
+ val sut = DefaultPushClientSecret(factory, store)
val secret0 = factory.getSecretForUser(0)
val secret1 = factory.getSecretForUser(1)
- val secret2 = factory.getSecretForUser(2)
assertThat(store.getSecrets()).isEmpty()
assertThat(sut.getUserIdFromSecret(secret0)).isNull()
@@ -48,16 +46,10 @@ internal class DefaultPushClientSecretTest {
// Unknown secret
assertThat(sut.getUserIdFromSecret(A_UNKNOWN_SECRET)).isNull()
- // User signs out
- sut.onSessionDeleted(A_USER_ID_0.value)
- assertThat(store.getSecrets()).hasSize(1)
- // Create a new secret after reset
- assertThat(sut.getSecretForUser(A_USER_ID_0)).isEqualTo(secret2)
-
// Check the store content
assertThat(store.getSecrets()).isEqualTo(
mapOf(
- A_USER_ID_0 to secret2,
+ A_USER_ID_0 to secret0,
A_USER_ID_1 to secret1,
)
)
diff --git a/libraries/pushstore/test/src/main/kotlin/io/element/android/libraries/pushstore/test/userpushstore/FakeUserPushStore.kt b/libraries/pushstore/test/src/main/kotlin/io/element/android/libraries/pushstore/test/userpushstore/FakeUserPushStore.kt
index 50507fea00..9c616c1c4b 100644
--- a/libraries/pushstore/test/src/main/kotlin/io/element/android/libraries/pushstore/test/userpushstore/FakeUserPushStore.kt
+++ b/libraries/pushstore/test/src/main/kotlin/io/element/android/libraries/pushstore/test/userpushstore/FakeUserPushStore.kt
@@ -54,5 +54,6 @@ class FakeUserPushStore(
}
override suspend fun reset() {
+ pushProviderName = null
}
}
diff --git a/libraries/textcomposer/impl/src/main/res/values-cs/translations.xml b/libraries/textcomposer/impl/src/main/res/values-cs/translations.xml
index d079c7f5d5..94e25da3ac 100644
--- a/libraries/textcomposer/impl/src/main/res/values-cs/translations.xml
+++ b/libraries/textcomposer/impl/src/main/res/values-cs/translations.xml
@@ -4,6 +4,7 @@
"Přepnout seznam s odrážkami"
"Zavřít možnosti formátování"
"Přepnout blok kódu"
+ "Volitelný titulek…"
"Zpráva…"
"Vytvořit odkaz"
"Upravit odkaz"
diff --git a/libraries/textcomposer/impl/src/main/res/values-fi/translations.xml b/libraries/textcomposer/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..4e5661dce0
--- /dev/null
+++ b/libraries/textcomposer/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,26 @@
+
+
+ "Lisää liite"
+ "Numeroimaton luettelo päälle/pois"
+ "Sulje muotoiluasetukset"
+ "Koodilohko päälle/pois"
+ "Valinnainen kuvateksti…"
+ "Viesti…"
+ "Luo linkki"
+ "Muokkaa linkkiä"
+ "Käytä lihavoitua muotoa"
+ "Käytä kursiivimuotoa"
+ "Käytä yliviivausmuotoa"
+ "Käytä alleviivausmuotoa"
+ "Koko näytön tila päälle/pois"
+ "Sisennä"
+ "Käytä rivinsisäistä koodimuotoa"
+ "Aseta linkki"
+ "Numeroitu luettelo päälle/pois"
+ "Avaa kirjoitusvaihtoehdot"
+ "Lainaus päälle/pois"
+ "Poista linkki"
+ "Poista sisennys"
+ "Linkki"
+ "Pidä pohjassa nauhoittaaksesi"
+
diff --git a/libraries/textcomposer/impl/src/main/res/values-fr/translations.xml b/libraries/textcomposer/impl/src/main/res/values-fr/translations.xml
index a3d94bd0d8..48b3668715 100644
--- a/libraries/textcomposer/impl/src/main/res/values-fr/translations.xml
+++ b/libraries/textcomposer/impl/src/main/res/values-fr/translations.xml
@@ -4,6 +4,7 @@
"Afficher une liste à puces"
"Fermer les options de formatage"
"Afficher le bloc de code"
+ "Légende facultative…"
"Message…"
"Créer un lien"
"Modifier le lien"
diff --git a/libraries/textcomposer/impl/src/main/res/values-sk/translations.xml b/libraries/textcomposer/impl/src/main/res/values-sk/translations.xml
index 2b97319bc3..028e12f085 100644
--- a/libraries/textcomposer/impl/src/main/res/values-sk/translations.xml
+++ b/libraries/textcomposer/impl/src/main/res/values-sk/translations.xml
@@ -4,6 +4,7 @@
"Prepnúť zoznam odrážok"
"Zatvoriť možnosti formátovania"
"Prepnúť blok kódu"
+ "Voliteľný titulok…"
"Správa…"
"Vytvoriť odkaz"
"Upraviť odkaz"
diff --git a/libraries/textcomposer/impl/src/main/res/values-uk/translations.xml b/libraries/textcomposer/impl/src/main/res/values-uk/translations.xml
index c19dfb946a..9021625213 100644
--- a/libraries/textcomposer/impl/src/main/res/values-uk/translations.xml
+++ b/libraries/textcomposer/impl/src/main/res/values-uk/translations.xml
@@ -4,6 +4,7 @@
"Перемкнути маркований список"
"Закрити параметри форматування"
"Перемкнути блок коду"
+ "Необов\'язковий підпис…"
"Повідомлення…"
"Створити посилання"
"Редагувати посилання"
@@ -21,5 +22,5 @@
"Видалити посилання"
"Без відступу"
"Посилання"
- "Тримати, щоб записати"
+ "Затисніть, щоб записати"
diff --git a/libraries/textcomposer/impl/src/main/res/values-zh/translations.xml b/libraries/textcomposer/impl/src/main/res/values-zh/translations.xml
index 0a6b2cf6a2..4040ca511d 100644
--- a/libraries/textcomposer/impl/src/main/res/values-zh/translations.xml
+++ b/libraries/textcomposer/impl/src/main/res/values-zh/translations.xml
@@ -4,6 +4,7 @@
"切换符号列表"
"关闭格式化选项"
"切换代码块"
+ "可选的标题……"
"消息…"
"创建链接"
"编辑链接"
diff --git a/libraries/troubleshoot/impl/src/main/res/values-fi/translations.xml b/libraries/troubleshoot/impl/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..527607dd4f
--- /dev/null
+++ b/libraries/troubleshoot/impl/src/main/res/values-fi/translations.xml
@@ -0,0 +1,11 @@
+
+
+ "Suorita testit"
+ "Suorita testit uudelleen"
+ "Osa testeistä epäonnistui. Tarkista tiedot."
+ "Suorita testit havaitaksesi konfiguraatiossasi olevat ongelmat, joiden vuoksi ilmoitukset eivät ehkä toimi odotetulla tavalla."
+ "Yritä korjata"
+ "Kaikki testit läpäistiin onnistuneesti."
+ "Ilmoitusten vianmääritys"
+ "Jotkin testit vaativat huomiotasi. Tarkista tiedot."
+
diff --git a/libraries/troubleshoot/impl/src/main/res/values-uk/translations.xml b/libraries/troubleshoot/impl/src/main/res/values-uk/translations.xml
index 935c6b517d..63e887af01 100644
--- a/libraries/troubleshoot/impl/src/main/res/values-uk/translations.xml
+++ b/libraries/troubleshoot/impl/src/main/res/values-uk/translations.xml
@@ -2,10 +2,10 @@
"Запустити тести"
"Запустити тести знову"
- "Деякі тести не пройшли. Будь ласка, перегляньте деталі."
+ "Деякі тести не пройдено. Перегляньте подробиці."
"Запустіть тести, щоб виявити будь-яку проблему у вашій конфігурації, через яку сповіщення можуть не працювати належним чином."
"Спробувати виправити"
- "Всі тести пройшли успішно."
+ "Всі тести успішно пройдено."
"Усунення неполадок сповіщень"
- "Деякі тести вимагають вашої уваги. Будь ласка, перегляньте деталі."
+ "Деякі тести вимагають вашої уваги. Перегляньте подробиці."
diff --git a/libraries/ui-strings/src/main/res/values-be/translations.xml b/libraries/ui-strings/src/main/res/values-be/translations.xml
index 38de3c79a9..1e98029dda 100644
--- a/libraries/ui-strings/src/main/res/values-be/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-be/translations.xml
@@ -130,7 +130,6 @@
"Аўдыя"
"Заблакіраваныя карыстальнікі"
"Бурбалкі"
- "Ідзе званок (не падтрымліваецца)"
"Званок пачаўся"
"Рэзервовае капіраванне чатаў"
"Скапіравана ў буфер абмену"
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 421b5b8523..fa04c3d48f 100644
--- a/libraries/ui-strings/src/main/res/values-cs/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-cs/translations.xml
@@ -131,7 +131,6 @@
"Zvuk"
"Blokovaní uživatelé"
"Bubliny"
- "Probíhá hovor (nepodporováno)"
"Hovor zahájen"
"Záloha chatu"
"Zkopírováno do schránky"
@@ -251,6 +250,7 @@ Důvod: %1$s."
"Nelze odeslat pozvánky"
"Odemknout"
"Zrušit ztlumení"
+ "Nepodporované volání"
"Nepodporovaná událost"
"Uživatelské jméno"
"Ověření zrušeno"
@@ -295,6 +295,7 @@ Důvod: %1$s."
"Ahoj, ozvi se mi na %1$s: %2$s"
"%1$s Android"
"Zatřeste zařízením pro nahlášení chyby"
+ "Odmítnout a vykázat"
"Výběr média se nezdařil, zkuste to prosím znovu."
"Nahrání média se nezdařilo, zkuste to prosím znovu."
"Nahrání média se nezdařilo, zkuste to prosím znovu."
@@ -317,12 +318,22 @@ Důvod: %1$s."
"Jedno nebo více vašich zařízení není ověřeno. Zprávu můžete přesto odeslat, nebo ji můžete prozatím zrušit a zkusit to znovu později, až ověříte všechna svá zařízení."
"Vaše zpráva nebyla odeslána, protože jste neověřili jedno nebo více zařízení"
"Připnuté zprávy"
+ "Žádosti o vstup"
"Nahrání média se nezdařilo, zkuste to prosím znovu."
"Nepodařilo se načíst údaje o uživateli"
+
+ - "%1$s +%2$d další chce vstoupit do této místnosti"
+ - "%1$s +%2$d další chtějí vstoupit do této místnosti"
+ - "%1$s +%2$d dalších chce vstoupit do této místnosti"
+
+ "Zobrazit vše"
"%1$s z %2$s"
"%1$s Připnuté zprávy"
"Načítání zprávy…"
"Zobrazit vše"
+ "Přijmout"
+ "%1$s chce vstoupit do této místnosti"
+ "Zobrazit"
"Chat"
"Žádost o vstup odeslána"
"Sdílet polohu"
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 06c39e1d6c..b2a879cd82 100644
--- a/libraries/ui-strings/src/main/res/values-de/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-de/translations.xml
@@ -124,7 +124,6 @@
"Audio"
"Blockierte Nutzer"
"Sprechblasen"
- "Aktiver Anruf (nicht unterstützt)"
"Aufruf gestartet"
"Chat-Backup"
"Copyright"
diff --git a/libraries/ui-strings/src/main/res/values-el/translations.xml b/libraries/ui-strings/src/main/res/values-el/translations.xml
index de35c4d797..5d49ad3f6e 100644
--- a/libraries/ui-strings/src/main/res/values-el/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-el/translations.xml
@@ -129,7 +129,6 @@
"Ήχος"
"Αποκλεισμένοι χρήστες"
"Φυσαλίδες"
- "Κλήση σε εξέλιξη (δεν υποστηρίζεται)"
"Η κλήση ξεκίνησε"
"Αντίγραφο ασφαλείας συνομιλίας"
"Αντιγράφηκε στο πρόχειρο"
@@ -238,6 +237,7 @@
"Θέμα"
"Τί αφορά το δωμάτιο;"
"Δεν είναι δυνατή η αποκρυπτογράφηση"
+ "Στάλθηκε από μια μη ασφαλής συσκευή"
"Δεν έχεις πρόσβαση σε αυτό το μήνυμα"
"Δεν ήταν δυνατή η αποστολή προσκλήσεων σε έναν ή περισσότερους χρήστες."
"Δεν είναι δυνατή η αποστολή προσκλήσεων"
@@ -247,6 +247,7 @@
"Όνομα χρήστη"
"Η επαλήθευση ακυρώθηκε"
"Η επαλήθευση ολοκληρώθηκε"
+ "Αποτυχία επαλήθευσης"
"Επαληθεύτηκε"
"Επαλήθευση συσκευής"
"Βίντεο"
@@ -313,6 +314,7 @@
"Φόρτωση μηνύματος…"
"Προβολή Όλων"
"Συνομιλία"
+ "Το αίτημα συμμετοχής στάλθηκε"
"Κοινή χρήση τοποθεσίας"
"Κοινή χρήση της τοποθεσίας μου"
"Άνοιγμα στο Apple Maps"
diff --git a/libraries/ui-strings/src/main/res/values-es/translations.xml b/libraries/ui-strings/src/main/res/values-es/translations.xml
index ad40a215a7..7ea69233b2 100644
--- a/libraries/ui-strings/src/main/res/values-es/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-es/translations.xml
@@ -116,7 +116,6 @@
"Sonido"
"Usuarios bloqueados"
"Burbujas"
- "Llamada en curso (no admitida)"
"Copia de seguridad del chat"
"Derechos de autor"
"Creando sala…"
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 c0607c60e4..d70998b5da 100644
--- a/libraries/ui-strings/src/main/res/values-et/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-et/translations.xml
@@ -129,7 +129,6 @@
"Heli"
"Blokeeritud kasutajad"
"Mullid"
- "Kõne on pooleli (pole toetatud)"
"Kõne algas"
"Vestluse varukoopia"
"Kopeeritud lõikelauale"
@@ -247,6 +246,7 @@ Põhjus: %1$s."
"Kutse(te) saatmine ei õnnestunud"
"Eemalda lukustus"
"Lõpeta summutamine"
+ "See kõne pole toetatud"
"Toetamata sündmus"
"Kasutajanimi"
"Verifitseerimine on katkestatud"
@@ -291,6 +291,7 @@ Põhjus: %1$s."
"Hei, suhtle minuga %1$s võrgus: %2$s"
"%1$s Android"
"Veast teatamiseks raputa nutiseadet ägedalt"
+ "Keeldu ja määra suhtluskeeld"
"Meediafaili valimine ei õnnestunud. Palun proovi uuesti."
"Meediafaili töötlemine enne üleslaadimist ei õnnestunud. Palun proovi uuesti."
"Meediafaili üleslaadimine ei õnnestunud. Palun proovi uuesti."
@@ -312,12 +313,21 @@ Põhjus: %1$s."
"Üks või enam sinu seadet on verifitseerimata. Sa võid sõnumi ikkagi ära saata või katkestad saatmise ning proovid uuesti, kui oled kõik oma seadmed verifitseerinud."
"Kuna sul on üks või enam verifitseerimata seadet, siis sinu sõnum jäi saatmata"
"Esiletõstetud sõnumid"
+ "Liitumispalved"
"Meediafaili töötlemine enne üleslaadimist ei õnnestunud. Palun proovi uuesti."
"Kasutaja andmete laadimine ei õnnestunud"
+
+ - "%1$s + veel %2$d kasutaja soovivad selle jututoaga liituda"
+ - "%1$s + veel %2$d kasutajat soovivad selle jututoaga liituda"
+
+ "Vaata kõiki"
"%1$s / %2$s"
"%1$s esiletõstetud sõnumit"
"Laadime sõnumit…"
"Näita kõiki"
+ "Nõustu"
+ "%1$s soovib selle jututoaga liituda"
+ "Vaata"
"Vestlus"
"Liitumispäring on saadetud"
"Jaga asukohta"
diff --git a/libraries/ui-strings/src/main/res/values-fa/translations.xml b/libraries/ui-strings/src/main/res/values-fa/translations.xml
index ff17ab411b..cadcd7c6fa 100644
--- a/libraries/ui-strings/src/main/res/values-fa/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-fa/translations.xml
@@ -120,7 +120,6 @@
"صدا"
"کاربران مسدود"
"حبابها"
- "تماس در جریان (پشتیبانی نشده)"
"تماس آغاز شد"
"پشتیبان گپ"
"در تختهگیره رونوشت شد"
@@ -154,6 +153,10 @@
"روشن"
"پیوند در تختهگیره رونوشت شد"
"بار کردن…"
+
+ - "%1$d عضو"
+ - "%1$d عضو"
+
"پیام"
"کنشهای پیام"
"جینش پیام"
diff --git a/libraries/ui-strings/src/main/res/values-fi/translations.xml b/libraries/ui-strings/src/main/res/values-fi/translations.xml
new file mode 100644
index 0000000000..1c12237728
--- /dev/null
+++ b/libraries/ui-strings/src/main/res/values-fi/translations.xml
@@ -0,0 +1,334 @@
+
+
+ "Poista"
+
+ - "%1$d numero syötetty"
+ - "%1$d numeroa syötetty"
+
+ "Piilota salasana"
+ "Siirry loppuun"
+ "Vain maininnat"
+ "Mykistetty"
+ "Sivu %1$d"
+ "Keskeytä"
+ "PIN-kenttä"
+ "Toista"
+ "Kysely"
+ "Päättynyt kysely"
+ "Reagoi emojilla %1$s"
+ "Reagoi muilla emojeilla"
+ "%1$s ja %2$s on lukenut viestin"
+
+ - "%1$s ja %2$d muu on lukenut viestin"
+ - "%1$s ja %2$d muuta on lukenut viestin"
+
+ "%1$s on lukenut viestin"
+ "Näytä kaikki napauttamalla"
+ "Poista reaktio emojilla %1$s"
+ "Lähetä tiedostoja"
+ "Näytä salasana"
+ "Aloita puhelu"
+ "Käyttäjävalikko"
+ "Nauhoita ääniviesti."
+ "Lopeta nauhoittaminen"
+ "Hyväksy"
+ "Lisää aikajanalle"
+ "Takaisin"
+ "Soita"
+ "Peruuta"
+ "Peruuta toistaiseksi"
+ "Valitse kuva"
+ "Tyhjennä"
+ "Sulje"
+ "Viimeistele vahvistus"
+ "Vahvista"
+ "Vahvista salasana"
+ "Jatka"
+ "Kopioi"
+ "Kopioi linkki"
+ "Kopioi linkki viestiin"
+ "Luo"
+ "Luo huone"
+ "Deaktivoi"
+ "Deaktivoi tili"
+ "Hylkää"
+ "Poista kysely"
+ "Poista käytöstä"
+ "Hylkää"
+ "Valmis"
+ "Muokkaa"
+ "Muokkaa kyselyä"
+ "Ota käyttöön"
+ "Lopeta kysely"
+ "Syötä PIN-koodi"
+ "Unohditko salasanan?"
+ "Välitä"
+ "Takaisin"
+ "Ohita"
+ "Kutsu"
+ "Kutsu ihmisiä"
+ "Kutsu ihmisiä %1$s -sovellukseen"
+ "Kutsu ihmisiä %1$s -sovellukseen"
+ "Kutsut"
+ "Liity"
+ "Lue lisää"
+ "Poistu"
+ "Poistu keskustelusta"
+ "Poistu huoneesta"
+ "Lataa lisää"
+ "Hallitse tiliä"
+ "Hallitse laitteita"
+ "Lähetä viesti"
+ "Seuraava"
+ "Ei"
+ "Ei nyt"
+ "OK"
+ "Asetukset"
+ "Avaa sovelluksessa"
+ "Kiinnitä"
+ "Pikavastaus"
+ "Lainaa"
+ "Reagoi"
+ "Hylkää"
+ "Poista"
+ "Vastaa"
+ "Vastaa ketjuun"
+ "Ilmoita virheestä"
+ "Ilmoita sisällöstä"
+ "Nollaa"
+ "Nollaa identiteetti"
+ "Yritä uudelleen"
+ "Yritä salauksen purkamista uudelleen"
+ "Tallenna"
+ "Hae"
+ "Lähetä"
+ "Lähetä viesti"
+ "Jaa"
+ "Jaa linkki"
+ "Näytä"
+ "Kirjaudu uudelleen"
+ "Kirjaudu ulos"
+ "Kirjaudu ulos silti"
+ "Ohita"
+ "Aloita"
+ "Aloita keskustelu"
+ "Aloita vahvistus"
+ "Lataa kartta napauttamalla"
+ "Ota kuva"
+ "Näytä vaihtoehdot napauttamalla"
+ "Yritä uudelleen"
+ "Poista kiinnitys"
+ "Näytä aikajanalla"
+ "Näytä lähde"
+ "Kyllä"
+ "Tietoa"
+ "Hyväksyttävän käytön käytäntö"
+ "Edistyneet asetukset"
+ "Analytiikka"
+ "Ulkoasu"
+ "Ääni"
+ "Estetyt käyttäjät"
+ "Kuplat"
+ "Puhelu alkoi"
+ "Keskustelujen varmuuskopiointi"
+ "Kopioitu leikepöydälle"
+ "Tekijänoikeudet"
+ "Luodaan huonetta…"
+ "Poistuit huoneesta"
+ "Tumma"
+ "Salauksen purkuvirhe"
+ "Kehittäjän asetukset"
+ "Laitteen tunnus"
+ "Yksityinen keskustelu"
+ "Älä näytä tätä uudelleen"
+ "(muokattu)"
+ "Muokataan viestiä"
+ "* %1$s %2$s"
+ "Salaus"
+ "Salaus käytössä"
+ "Syötä PIN-koodisi"
+ "Virhe"
+ "Tapahtui virhe. Et välttämättä saa ilmoituksia uusista viesteistä. Tee ilmoitusten vianmääritys asetuksista.
+
+Syy: %1$s."
+ "Kaikki"
+ "Epäonnistui"
+ "Lisää suosikkeihin"
+ "Lisätty suosikkeihin"
+ "Tiedosto"
+ "Tiedosto tallennettu Lataukset-kansioon"
+ "Välitä viesti"
+ "Usein käytetyt"
+ "GIF"
+ "Kuva"
+ "Vastauksena käyttäjälle %1$s"
+ "Asenna APK"
+ "Tätä Matrix-tunnusta ei löytynyt, joten kutsu ei välttämättä mene perille."
+ "Poistutaan huoneesta"
+ "Vaalea"
+ "Linkki kopioitu leikepöydälle"
+ "Ladataan…"
+
+ - "%1$d jäsen"
+ - "%1$d jäsentä"
+
+ "Viesti"
+ "Viestitoiminnot"
+ "Viestien asettelu"
+ "Viesti poistettu"
+ "Moderni"
+ "Mykistä"
+ "Ei tuloksia"
+ "Nimetön huone"
+ "Ei yhteyttä"
+ "Avoimen lähdekoodin lisenssit"
+ "tai"
+ "Salasana"
+ "Ihmiset"
+ "Pysyvä linkki"
+ "Lupa"
+ "Kiinnitetty"
+ "Odota hetki…"
+ "Haluatko varmasti lopettaa tämän kyselyn?"
+ "Kysely: %1$s"
+ "Ääniä yhteensä: %1$s"
+ "Tulokset näkyvät kyselyn päätyttyä"
+
+ - "%d ääni"
+ - "%d ääntä"
+
+ "Tietosuojakäytäntö"
+ "Reaktio"
+ "Reaktiot"
+ "Palautusavain"
+ "Päivitetään…"
+ "Vastataan käyttäjälle %1$s"
+ "Ilmoita virheestä"
+ "Ilmoita ongelmasta"
+ "Ilmoitus lähetetty"
+ "Rikastettu tekstieditori"
+ "Huone"
+ "Huoneen nimi"
+ "esim. projektisi nimi"
+ "Muutokset tallennettu"
+ "Tallennetaan"
+ "Näyttölukko"
+ "Etsi jotakuta"
+ "Hakutulokset"
+ "Turvallisuus"
+ "Nähneet henkilöt"
+ "Jaa"
+ "Lähetetään…"
+ "Lähetys epäonnistui"
+ "Lähetetty"
+ "Palvelin ei ole tuettu"
+ "Palvelimen osoite"
+ "Asetukset"
+ "Jaettu sijainti"
+ "Kirjaudutaan ulos"
+ "Jokin meni pieleen"
+ "Aloitetaan keskustelua…"
+ "Tarra"
+ "Onnistui"
+ "Ehdotukset"
+ "Synkronoidaan"
+ "Järjestelmän oletus"
+ "Teksti"
+ "Kolmannen osapuolen ilmoitukset"
+ "Viestiketju"
+ "Aihe"
+ "Mistä tässä huoneessa on kyse?"
+ "Salauksen purkaminen ei onnistunut"
+ "Lähetetty suojaamattomasta laitteesta"
+ "Sinulla ei ole oikeutta lukea tätä viestiä"
+ "Lähettäjän vahvistettu identiteetti on vaihtunut"
+ "Kutsujen ei voitu lähettää yhdelle tai useammalle käyttäjälle."
+ "Kutsujen lähettäminen ei onnistunut"
+ "Avaa"
+ "Poista mykistys"
+ "Tapahtumaa ei tueta"
+ "Käyttäjänimi"
+ "Vahvistus peruttu"
+ "Vahvistus suoritettu"
+ "Vahvistus epäonnistui"
+ "Vahvistettu"
+ "Vahvista laite"
+ "Vahvista identiteetti"
+ "Video"
+ "Ääniviesti"
+ "Odotetaan…"
+ "Odotetaan viestiä"
+ "Sinä"
+ "Käyttäjän %1$s identiteetti näyttää muuttuneen. %2$s"
+ "Käyttäjän %1$s %2$s identiteetti näyttää muuttuneen. %3$s"
+ "(%1$s)"
+ "Vahvistus"
+ "Virhe"
+ "Onnistui"
+ "Varoitus"
+ "Muutoksiasi ei ole tallennettu. Haluatko varmasti palata takaisin?"
+ "Tallenna muutokset?"
+ "Kotipalvelimesi on päivitettävä tukemaan Matrix Authentication Serviceä ja tilin luomista."
+ "Pysyvän linkin luominen epäonnistui"
+ "%1$s ei pystynyt lataamaan karttaa. Yritä myöhemmin uudelleen."
+ "Viestien lataaminen epäonnistui"
+ "%1$s ei päässyt käsiksi sijaintiisi. Yritä myöhemmin uudelleen."
+ "Ääniviestin lähettäminen epäonnistui."
+ "Viestiä ei löytynyt"
+ "%1$s -sovelluksella ei ole lupaa sijaintiisi. Voit sallia sen asetuksista."
+ "%1$s -sovelluksella ei ole lupaa sijaintiisi. Voit sallia sen painamalla alla olevaa nappia."
+ "%1$s -sovelluksella ei ole lupaa käyttää mikrofoniasi. Anna lupa, jotta voit nauhoittaa ääniviestejä."
+ "Joitakin viestejä ei ole lähetetty"
+ "Anteeksi, tapahtui virhe"
+ "Tämän salatun viestin aitoutta ei voida taata tällä laitteella."
+ "Aiemmin vahvistetun käyttäjän salaama."
+ "Ei salattu."
+ "Tuntemattoman tai poistetun laitteen salaama."
+ "Salattu laitteella, jota sen omistaja ei ole vahvistanut."
+ "Vahvistamattoman käyttäjän salaama."
+ "🔐️ Liity seuraani %1$s -sovelluksessa"
+ "Hei, keskustele kanssani %1$s -sovelluksessa: %2$s"
+ "%1$s Android"
+ "Raivostunut ravistaminen ilmoittaa virheestä"
+ "Median valinta epäonnistui, yritä uudelleen."
+ "Median käsittely epäonnistui, yritä uudelleen."
+ "Median lähettäminen epäonnistui, yritä uudelleen."
+ "Paina viestiä ja valitse “%1$s” lisätäksesi sen tänne."
+ "Kiinnitä tärkeät viestit, jotta ne löytyvät helposti."
+
+ - "%1$d kiinnitetty viesti"
+ - "%1$d kiinnitettyä viestiä"
+
+ "Kiinnitetyt viestit"
+ "Olet siirtymässä %1$s -tilillesi nollaamaan identiteettisi. Tämän jälkeen sinut ohjataan takaisin sovellukseen."
+ "Etkö voi vahvistaa? Siirry tilillesi ja nollaa identiteettisi."
+ "Peruuta vahvistus ja lähetä"
+ "Voit peruuttaa vahvistuksen ja lähettää tämän viestin silti, tai voit peruuttaa viestin lähettämisen toistaiseksi ja yrittää uudelleen myöhemmin, kun olet vahvistanut käyttäjän %1$s uudelleen."
+ "Viestiäsi ei lähetetty, koska käyttäjän %1$s vahvistettu identiteetti on muuttunut"
+ "Lähetä viesti silti"
+ "%1$s käyttää yhtä tai useampaa vahvistamatonta laitetta. Voit lähettää viestin silti tai voit peruuttaa sen toistaiseksi ja yrittää myöhemmin uudelleen, kun %2$s on vahvistanut kaikki laitteensa."
+ "Viestiäsi ei lähetetty, koska %1$s ei ole vahvistanut kaikkia laitteitaan."
+ "Yksi tai useampi laitteistasi on vahvistamaton. Voit lähettää viestin silti tai peruuttaa sen toistaiseksi ja yrittää uudelleen myöhemmin, kun olet vahvistanut kaikki laitteesi."
+ "Viestiäsi ei lähetetty, koska et ole vahvistanut yhtä tai useampaa laitettasi."
+ "Kiinnitetyt viestit"
+ "Median käsittely epäonnistui, yritä uudelleen."
+ "Käyttäjän tietojen hakeminen epäonnistui"
+ "%1$s / %2$s"
+ "Kiinnitetty viesti %1$s"
+ "Viestiä ladataan…"
+ "Näytä kaikki"
+ "Keskustelu"
+ "Liittymispyyntö lähetetty"
+ "Jaa sijainti"
+ "Jaa sijaintini"
+ "Avaa Apple Mapsissa"
+ "Avaa Google Mapsissa"
+ "Avaa OpenStreetMapissa"
+ "Jaa tämä sijainti"
+ "Viestiä ei lähetetty, koska käyttäjän %1$s vahvistettu identiteetti on muuttunut."
+ "Viestiä ei lähetetty, koska %1$s ei ole vahvistanut kaikkia laitteitaan."
+ "Viestiä ei lähetetty, koska et ole vahvistanut yhtä tai useampaa laitettasi."
+ "Sijainti"
+ "Versio: %1$s (%2$s)"
+ "fi"
+
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 f9159b6d6c..e4092bf388 100644
--- a/libraries/ui-strings/src/main/res/values-fr/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml
@@ -129,7 +129,6 @@
"Audio"
"Utilisateurs bloqués"
"Bulles"
- "Appel en cours (non supporté)"
"Appel démarré"
"Sauvegarde des discussions"
"Copié dans le presse-papiers"
@@ -254,6 +253,7 @@ Raison: %1$s."
"Échec de la vérification"
"Vérifié(e)"
"Vérifier la session"
+ "Vérifier l’identité"
"Vidéo"
"Message vocal"
"En attente…"
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 a80e8de9e5..d6e41bc748 100644
--- a/libraries/ui-strings/src/main/res/values-hu/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-hu/translations.xml
@@ -129,7 +129,6 @@
"Hang"
"Letiltott felhasználók"
"Buborékok"
- "Folyamatban lévő hívás (nem támogatott)"
"A hívás elindult"
"Csevegés biztonsági mentése"
"A vágólapra másolva"
diff --git a/libraries/ui-strings/src/main/res/values-in/translations.xml b/libraries/ui-strings/src/main/res/values-in/translations.xml
index a5beab01d3..3755164173 100644
--- a/libraries/ui-strings/src/main/res/values-in/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-in/translations.xml
@@ -127,7 +127,6 @@
"Audio"
"Pengguna yang diblokir"
"Gelembung"
- "Panggilan sedang berjalan (tidak didukung)"
"Panggilan dimulai"
"Pencadangan percakapan"
"Disalin ke papan klip"
diff --git a/libraries/ui-strings/src/main/res/values-it/translations.xml b/libraries/ui-strings/src/main/res/values-it/translations.xml
index dd6b3c47de..529fc66c06 100644
--- a/libraries/ui-strings/src/main/res/values-it/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-it/translations.xml
@@ -127,7 +127,6 @@
"Audio"
"Utenti bloccati"
"Fumetti"
- "Chiamata in corso (non supportata)"
"Chiamata avviata"
"Backup della chat"
"Copiato negli appunti"
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 4b10c17180..71f173b9bf 100644
--- a/libraries/ui-strings/src/main/res/values-nl/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-nl/translations.xml
@@ -128,7 +128,6 @@
"Geluid"
"Geblokkeerde gebruikers"
"Bubbels"
- "Gesprek bezig (niet ondersteund)"
"Oproep gestart"
"Chat back-up"
"Gekopieerd naar klembord"
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 77decc684f..6373c2fec6 100644
--- a/libraries/ui-strings/src/main/res/values-pl/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-pl/translations.xml
@@ -131,7 +131,6 @@
"Dźwięk"
"Zablokowani użytkownicy"
"Bąbelki"
- "Rozmowa w trakcie (niewspierane)"
"Rozpoczęto rozmowę"
"Backup czatu"
"Skopiowano do schowka"
diff --git a/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml b/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml
index f2b246b3b6..76b410938f 100644
--- a/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-pt-rBR/translations.xml
@@ -120,7 +120,6 @@
"Áudio"
"Usuários bloqueados"
"Bolhas"
- "Chamada em progresso (sem suporte)"
"Chamada iniciada"
"Backup de conversas"
"Direitos autorais"
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 65e2a5d483..437d6b63e6 100644
--- a/libraries/ui-strings/src/main/res/values-pt/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-pt/translations.xml
@@ -129,7 +129,6 @@
"Áudio"
"Utilizadores bloqueados"
"Bolhas"
- "Chamada em curso (não suportada)"
"Chamada iniciada"
"Cópia de segurança das conversas"
"Copiado para a área de transferência"
@@ -259,7 +258,7 @@ Razão: %1$s."
"Mensagem de voz"
"A aguardar…"
"À espera desta mensagem"
- "Você"
+ "Tu"
"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)"
@@ -301,15 +300,15 @@ Razão: %1$s."
- "%1$d Mensagens afixadas"
"Mensagens afixadas"
- "Está prestes a aceder à sua conta %1$s para repor a sua identidade. Depois, você será levado de volta ao aplicativo."
+ "Estás prestes a aceder à tua conta %1$s para redefinir a tua identidade. Depois disso, serás levado de volta à aplicação."
"Não consegue confirmar? Aceda à sua conta para repor a sua identidade."
"Retirar verificação e enviar"
- "Você pode retirar sua verificação e enviar esta mensagem de qualquer maneira, ou você pode cancelar por enquanto e tentar novamente mais tarde depois de verificar novamente %1$s."
+ "Podes retirar a tua verificação e enviar esta mensagem na mesma, ou podes cancelar por agora e tentar novamente mais tarde depois de reverificares %1$s."
"A sua mensagem não foi enviada porque a identidade verificada de %1$s foi alterada"
"Enviar mensagem mesmo assim"
- "%1$s está usando um ou mais dispositivos não verificados. Você pode enviar a mensagem de qualquer maneira, ou você pode cancelar por enquanto e tentar novamente mais tarde depois que %2$s tiver verificado todos os seus dispositivos."
+ "%1$s está a utilizar um ou mais dispositivos não verificados. Podes enviar a mensagem na mesma, ou podes cancelar por agora e tentar novamente mais tarde, depois de %2$s ter verificado todos os seus dispositivos."
"A sua mensagem não foi enviada porque %1$s não verificou todos os dispositivos"
- "Um ou mais dos seus dispositivos não são verificados. Você pode enviar a mensagem de qualquer maneira, ou você pode cancelar por enquanto e tentar novamente mais tarde depois de ter verificado todos os seus dispositivos."
+ "Um ou mais dos teus dispositivos não foram verificados. Podes enviar a mensagem na mesma, ou podes cancelar por agora e tentar novamente mais tarde, depois de teres verificado todos os teus dispositivos."
"A sua mensagem não foi enviada porque não verificou um ou mais dos seus dispositivos"
"Mensagens afixadas"
"Falha ao processar multimédia para carregamento, por favor tente novamente."
diff --git a/libraries/ui-strings/src/main/res/values-ro/translations.xml b/libraries/ui-strings/src/main/res/values-ro/translations.xml
index 51bbf0eaf9..d9db37821a 100644
--- a/libraries/ui-strings/src/main/res/values-ro/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-ro/translations.xml
@@ -121,7 +121,6 @@
"Audio"
"Utilizatori blocați"
"Baloane"
- "Apel în curs (nesuportat)"
"A început un apel"
"Backup conversații"
"Drepturi de autor"
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 e6f3bc4767..a8bed1e311 100644
--- a/libraries/ui-strings/src/main/res/values-ru/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-ru/translations.xml
@@ -131,7 +131,6 @@
"Аудио"
"Заблокированные пользователи"
"Пузыри"
- "Выполняется звонок (не поддерживается)"
"Звонок начат"
"Резервная копия чатов"
"Скопировано в буфер обмена"
@@ -251,6 +250,7 @@
"Не удалось отправить приглашение(я)"
"Разблокировать"
"Вкл. звук"
+ "Неподдерживаемый вызов"
"Неподдерживаемое событие"
"Имя пользователя"
"Подтверждение отменено"
@@ -295,6 +295,7 @@
"Привет, поговори со мной по %1$s: %2$s"
"%1$s Android"
"Встряхните устройство, чтобы сообщить об ошибке"
+ "Отклонить и запретить"
"Не удалось выбрать носитель, попробуйте еще раз."
"Не удалось обработать медиафайл для загрузки, попробуйте еще раз."
"Не удалось загрузить медиафайлы, попробуйте еще раз."
@@ -319,10 +320,19 @@
"Закрепленные сообщения"
"Не удалось обработать медиафайл для загрузки, попробуйте еще раз."
"Не удалось получить данные о пользователе"
+
+ - "%1$s +%2$d хочет присоединиться к этой комнате"
+ - "%1$s +%2$d хотят присоединиться к этой комнате"
+ - "%1$s +%2$d хотят присоединиться к этой комнате"
+
+ "Показать все"
"%1$s из %2$s"
"%1$s Закрепленные сообщения"
"Загрузка сообщения…"
"Посмотреть все"
+ "Принять"
+ "%1$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 3d1cc9d416..b8db48807c 100644
--- a/libraries/ui-strings/src/main/res/values-sk/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-sk/translations.xml
@@ -131,7 +131,6 @@
"Zvuk"
"Blokovaní používatelia"
"Bubliny"
- "Prebieha hovor (nepodporované)"
"Hovor sa začal"
"Záloha konverzácie"
"Skopírované do schránky"
@@ -161,6 +160,7 @@ Dôvod: %1$s."
"Súbor"
"Súbor bol uložený do priečinka Stiahnuté súbory"
"Preposlať správu"
+ "Často používané"
"GIF"
"Obrázok"
"V odpovedi na %1$s"
@@ -250,6 +250,7 @@ Dôvod: %1$s."
"Nie je možné odoslať pozvánku/ky"
"Odomknúť"
"Zrušiť stlmenie zvuku"
+ "Nepodporovaný hovor"
"Nepodporovaná udalosť"
"Používateľské meno"
"Overovanie zrušené"
@@ -257,6 +258,7 @@ Dôvod: %1$s."
"Overenie zlyhalo"
"Overené"
"Overiť zariadenie"
+ "Overiť totožnosť"
"Video"
"Hlasová správa"
"Čaká sa…"
@@ -293,6 +295,7 @@ Dôvod: %1$s."
"Ahoj, porozprávajte sa so mnou na %1$s: %2$s"
"%1$s Android"
"Zúrivo potriasť pre nahlásenie chyby"
+ "Odmietnuť a zakázať"
"Nepodarilo sa vybrať médium, skúste to prosím znova."
"Nepodarilo sa spracovať médiá na odoslanie, skúste to prosím znova."
"Nepodarilo sa nahrať médiá, skúste to prosím znova."
@@ -315,12 +318,22 @@ Dôvod: %1$s."
"Jedno alebo viac vašich zariadení nie je overených. Správu môžete odoslať aj tak, alebo môžete zatiaľ zrušiť a skúsiť to znova neskôr po overení všetkých svojich zariadení."
"Vaša správa nebola odoslaná, pretože ste neoverili jedno alebo viac svojich zariadení"
"Pripnuté správy"
+ "Žiadosti o vstup"
"Nepodarilo sa spracovať médiá na odoslanie, skúste to prosím znova."
"Nepodarilo sa získať údaje o používateľovi"
+
+ - "%1$s +%2$d ďalší chcú vstúpiť do tejto miestnosti"
+ - "%1$s +%2$d ďalší chcú vstúpiť do tejto miestnosti"
+ - "%1$s +%2$d ďalších chce vstúpiť do tejto miestnosti"
+
+ "Zobraziť všetko"
"%1$s z %2$s"
"%1$s Pripnutých správ"
"Načítava sa správa…"
"Zobraziť všetko"
+ "Prijať"
+ "%1$s chce vstúpiť do tejto miestnosti"
+ "Zobraziť"
"Konverzácia"
"Žiadosť o vstup odoslaná"
"Zdieľať polohu"
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 cc203a5183..8d3b71030a 100644
--- a/libraries/ui-strings/src/main/res/values-sv/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-sv/translations.xml
@@ -123,7 +123,6 @@
"Ljud"
"Blockerade användare"
"Bubblor"
- "Samtal pågår (stöds inte)"
"Samtal startat"
"Chattsäkerhetskopia"
"Upphovsrätt"
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 20e3994159..5c86a27959 100644
--- a/libraries/ui-strings/src/main/res/values-uk/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-uk/translations.xml
@@ -2,14 +2,14 @@
"Видалити"
- - "%1$d введена цифра"
- - "%1$d введено цифри"
- - "%1$d введено цифри"
+ - "Введена %1$d цифра"
+ - "Введено %1$d цифри"
+ - "Введено %1$d цифр"
- "Приховати пароль"
- "Перейти до низу"
+ "Cховати пароль"
+ "Перейти вниз"
"Тільки згадки"
- "Приглушений"
+ "Звук вимкнено"
"Сторінка %1$d"
"Пауза"
"Поле PIN-коду"
@@ -29,7 +29,7 @@
"Видалити реакцію з %1$s"
"Надіслати файли"
"Показати пароль"
- "Розпочати дзвінок"
+ "Розпочати виклик"
"Меню користувача"
"Записати голосове повідомлення."
"Припинити запис"
@@ -38,17 +38,21 @@
"Назад"
"Зателефонувати"
"Скасувати"
+ "Скасувати наразі"
"Вибрати фото"
"Очистити"
"Закрити"
"Верифікація завершена"
"Підтвердити"
+ "Підтвердіть пароль"
"Продовжити"
"Скопіювати"
"Скопіювати посилання"
"Скопіювати посилання на повідомлення"
"Створити"
"Створити кімнату"
+ "Деактивувати"
+ "Деактивувати обліковий запис"
"Відхилити"
"Видалити опитування"
"Вимкнути"
@@ -62,13 +66,14 @@
"Забули пароль?"
"Переслати"
"Повернутися"
+ "Ігнорувати"
"Запросити"
"Запросити людей"
"Запросити людей до %1$s"
"Запросити людей в %1$s"
"Запрошення"
"Доєднатися"
- "Дізнатися більше"
+ "Докладніше"
"Вийти"
"Залишити розмову"
"Вийти з кімнати"
@@ -101,19 +106,21 @@
"Надіслати"
"Надіслати повідомлення"
"Поділитися"
- "Поширити посилання"
+ "Поділитися посиланням"
+ "Показати"
"Увійдіть знову"
"Вийти"
"Все одно вийти"
"Пропустити"
"Розпочати"
- "Почати чат"
+ "Розпочати бесіду"
"Почати верифікацію"
"Натисніть, щоб завантажити мапу"
"Зробити фото"
- "Натисніть, щоб переглянути параметри"
+ "Торкніться, щоб переглянути параметри"
"Спробуйте ще раз"
"Відкріпити"
+ "Переглянути на шкалі часу"
"Переглянути джерело"
"Так"
"Відомості"
@@ -124,20 +131,22 @@
"Аудіо"
"Заблоковані користувачі"
"Бульбашки"
- "Триває виклик (не підтримується)"
- "Дзвінок розпочато"
- "Резервне копіювання чату"
+ "Виклик розпочато"
+ "Резервне копіювання бесіди"
+ "Скопійовано до буферу обміну"
"Авторське право"
"Створення кімнати…"
- "Вийшов (-ла) з кімнати"
+ "Виходить з кімнати"
"Темна"
- "Помилка розшифровки"
+ "Помилка розшифрування"
"Налаштування розробника"
- "Особистий чат"
+ "Ідентифікатор пристрою"
+ "Особиста бесіда"
"Не показувати це знову"
"(відредаговано)"
"Редагування"
"* %1$s %2$s"
+ "Шифрування"
"Шифрування ввімкнено"
"Введіть свій PIN-код"
"Помилка"
@@ -145,12 +154,13 @@
Причина: %1$s."
"Усі"
- "Невдало"
- "Улюблений"
- "Вибране"
+ "Помилка"
+ "Обране"
+ "Обране"
"Файл"
- "Файл збережений у розділі \"Завантаження\""
+ "Файл збережений у Завантаження"
"Переслати повідомлення"
+ "Частовживані"
"GIF"
"Зображення"
"У відповідь на %1$s"
@@ -180,6 +190,7 @@
"Люди"
"Постійне посилання"
"Дозвіл"
+ "Закріплено"
"Будь ласка, зачекайте…"
"Ви впевнені, що хочете закінчити це опитування?"
"Опитування: %1$s"
@@ -206,13 +217,13 @@
"Збережені зміни"
"Збереження"
"Блокування екрану"
- "Пошук когось"
+ "Шукати когось"
"Результати пошуку"
"Безпека"
- "Побачили"
+ "Переглянули"
"Надіслати до"
"Надсилання…"
- "Не вдалося відправити"
+ "Не вдалося надіслати"
"Надіслано"
"Сервер не підтримується"
"URL-адреса сервера"
@@ -220,7 +231,7 @@
"Поширене розташування"
"Вихід"
"Щось пішло не так"
- "Початок чату…"
+ "Початок бесіди…"
"Наліпка"
"Успіх"
"Пропозиції"
@@ -232,7 +243,9 @@
"Тема"
"Про що ця кімната?"
"Неможливо розшифрувати"
+ "Надіслано з незахищеного пристрою"
"Ви не маєте доступу до цього повідомлення"
+ "Підтверджена особа відправника змінилася"
"Не вдалося надіслати запрошення одному чи кільком користувачам."
"Не вдалося надіслати запрошення"
"Розблокувати"
@@ -241,52 +254,86 @@
"Ім\'я користувача"
"Верифікацію скасовано"
"Верифікацію завершено"
- "Перевірте пристрій"
+ "Перевірка не вдалася"
+ "Перевірено"
+ "Верифікувати пристрій"
+ "Підтвердити особу"
"Відео"
"Голосове повідомлення"
"Очікування…"
"Чекаємо на це повідомлення"
+ "Ви"
+ "Ідентичність %1$s, схоже, змінилася. %2$s"
+ "Ідентичність %1$s %2$s схоже, змінилася. %3$s"
+ "(%1$s)"
"Підтвердження"
"Помилка"
"Успіх"
"Попередження"
"Внесені зміни не збережено. Ви впевнені, що хочете повернутися?"
"Зберегти зміни?"
+ "Ваш домашній сервер потрібно оновити, щоб він підтримував службу автентифікації Matrix і створення облікових записів."
"Не вдалося створити постійне посилання"
- "%1$s Не вдалося завантажити карту. Будь ласка, спробуйте ще раз пізніше."
+ "%1$s не може завантажити мапу. Повторіть спробу пізніше."
"Не вдалося завантажити повідомлення"
- "%1$s не вдалося отримати доступ до вашого місцезнаходження. Будь ласка, спробуйте ще раз пізніше."
+ "%1$s не вдалося отримати доступ до вашого розташування. Повторіть спробу пізніше."
"Не вдалося завантажити голосове повідомлення."
"Повідомлення не знайдено"
- "%1$s не має дозволу на доступ до вашого місцезнаходження. Увімкнути доступ можна в Налаштуваннях."
- "%1$s не має дозволу на доступ до вашого місцезнаходження. Увімкніть доступ нижче."
+ "%1$s не має дозволу на доступ до вашого розташування. Увімкнути доступ можна в Налаштуваннях."
+ "%1$s не має дозволу на доступ до вашого розташування. Увімкніть доступ нижче."
"%1$s не має доступу до вашого мікрофона. Надайте доступ, щоб записати голосове повідомлення."
"Деякі повідомлення не були надіслані"
"Вибачте, сталася помилка"
"Автентичність цього зашифрованого повідомлення не може бути гарантована на цьому пристрої."
- "Зашифрований невідомим або видаленим пристроєм."
- "Зашифровано пристроєм, який не підтверджено його власником."
- "Зашифровано неперевіреним користувачем."
+ "Зашифровано попередньо перевіреним користувачем."
+ "Не зашифровано."
+ "Зашифровано невідомим або видаленим пристроєм."
+ "Зашифровано пристроєм, який не верифіковано його власником."
+ "Зашифровано неверифікованим користувачем."
"🔐️ Приєднуйтеся до мене в %1$s"
- "Привіт, пишіть мені за адресою %1$s: %2$s"
+ "Вітаю, поспілкуйтеся зі мною в %1$s: %2$s"
"%1$s Android"
"Повідомити про ваду за допомогою Rageshake"
"Не вдалося вибрати медіафайл, спробуйте ще раз."
"Не вдалося обробити медіафайл для завантаження, спробуйте ще раз."
"Не вдалося завантажити медіафайл, спробуйте ще раз."
+ "Натисніть на повідомлення і виберіть \"%1$s\", щоб додати його сюди."
+ "Закріпіть важливі повідомлення, щоб їх можна було легко знайти"
+
+ - "%1$d Закріплене повідомлення"
+ - "%1$d Закріплених повідомлення"
+ - "%1$d Закріплених повідомлення"
+
+ "Закріплені повідомлення"
+ "Ви збираєтеся перейти до свого облікового запису %1$s, щоб скинути свій обліковий запис. Після цього ви повернетесь до програми."
+ "Не можете підтвердити? Перейдіть до свого облікового запису, щоб скинути облікові дані."
+ "Відкликати верифікацію та відправити"
+ "Ви все одно можете відкликати підтвердження та надіслати це повідомлення, або ви можете скасувати підписку на даний момент і спробувати пізніше після повторної перевірки %1$s."
+ "Ваше повідомлення не було надіслано, оскільки підтверджена особистість %1$s змінилася"
+ "Надіслати повідомлення в будь-якому випадку"
+ "%1$s використовує один або кілька неперевірених пристроїв. Ви можете відправити повідомлення в будь-якому випадку, або ж скасувати відправку і спробувати пізніше, коли %2$s перевірить всі пристрої."
+ "Ваше повідомлення не було надіслано, тому що %1$s не перевірив усі пристрої"
+ "Один або кілька ваших пристроїв не підтверджено. Ви можете відправити повідомлення в будь-якому випадку, або ж скасувати відправку і спробувати пізніше, коли перевірите всі свої пристрої."
+ "Ваше повідомлення не було надіслано, оскільки ви не підтвердили один або декілька своїх пристроїв"
+ "Закріплені повідомлення"
"Не вдалося обробити медіафайл для завантаження, спробуйте ще раз."
"Не вдалося отримати дані користувача"
"%1$s із %2$s"
- "%1$s Закріплених повідомлень"
+ "%1$s закріплених повідомлень"
+ "Завантаження повідомлення…"
"Переглянути всі"
- "Чат"
+ "Бесіда"
+ "Запит на приєднання надіслано"
"Поділитися розташуванням"
"Поділитися моїм розташуванням"
"Відкрити в Apple Maps"
- "Відкрити в Google Maps"
+ "Відкрити в Картах Google"
"Відкрити в OpenStreetMap"
- "Поділитися цим місцезнаходженням"
- "Місцезнаходження"
+ "Поділитися цим місцем перебування"
+ "Повідомлення не надіслано, оскільки підтверджена особистість %1$s змінилася."
+ "Повідомлення не надіслано, оскільки %1$s перевірив не всі пристрої."
+ "Повідомлення не надіслано, оскільки ви не підтвердили один або кілька своїх пристроїв."
+ "Розташування"
"Версія: %1$s (%2$s)"
"uk"
diff --git a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml
index 63395fffee..3c8400c92a 100644
--- a/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-zh-rTW/translations.xml
@@ -119,7 +119,7 @@
"聊天室備份"
"著作權"
"正在建立聊天室…"
- "離開聊天室"
+ "已離開聊天室"
"深色"
"解密錯誤"
"開發者選項"
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 445f1d4cdd..80e69850ff 100644
--- a/libraries/ui-strings/src/main/res/values-zh/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-zh/translations.xml
@@ -7,7 +7,7 @@
"隐藏密码"
"跳转到底部"
"仅提及"
- "关闭通知"
+ "通知已关闭"
"第 %1$d 页"
"暂停"
"PIN 字段"
@@ -40,15 +40,18 @@
"关闭"
"完成验证"
"确认"
+ "确认密码"
"继续"
"复制"
"复制链接"
"复制消息链接"
"创建"
- "创建房间"
+ "创建聊天室"
+ "停用"
+ "停用账户"
"拒绝"
"删除投票"
- "停用"
+ "禁用"
"丢弃"
"完成"
"编辑"
@@ -59,6 +62,7 @@
"忘记密码?"
"转发"
"返回"
+ "忽略"
"邀请"
"邀请朋友"
"邀请朋友加入 %1$s"
@@ -68,7 +72,7 @@
"了解更多"
"离开"
"离开聊天"
- "离开房间"
+ "离开聊天室"
"载入更多"
"管理账户"
"管理设备"
@@ -99,6 +103,7 @@
"发送消息"
"分享"
"分享链接"
+ "显示"
"再次登录"
"登出"
"仍然登出"
@@ -122,20 +127,22 @@
"音频"
"已屏蔽用户"
"气泡"
- "通话进行中(不支持)"
"通话已开始"
"聊天记录备份"
+ "已复制到剪贴板"
"版权"
- "正在创建房间…"
- "离开房间"
- "暗色"
+ "正在创建聊天室…"
+ "离开聊天室"
+ "深色"
"解密错误"
"开发者选项"
+ "设备 ID"
"私聊"
"不再显示此内容"
"(已编辑)"
"编辑中"
"* %1$s %2$s"
+ "加密"
"已启用加密"
"输入 PIN 码"
"错误"
@@ -149,12 +156,13 @@
"文件"
"文件已保存到“下载”"
"转发消息"
+ "常用"
"GIF"
"图片"
"回复 %1$s"
"安装 APK"
"找不到此 Matrix ID,因此可能无法收到邀请。"
- "正在离开房间"
+ "正在离开聊天室"
"浅色"
"链接已复制到剪贴板"
"正在加载…"
@@ -168,7 +176,7 @@
"现代"
"静音"
"没有结果"
- "无房间名"
+ "无聊天室名"
"离线"
"开源许可证"
"或"
@@ -176,6 +184,7 @@
"用户"
"固定链接"
"权限"
+ "已置顶"
"请稍候……"
"确定要结束这个投票吗?"
"投票:%1$s"
@@ -194,8 +203,8 @@
"报告问题"
"报告已提交"
"富文本编辑器"
- "房间"
- "房间名称"
+ "聊天室"
+ "聊天室名称"
"例如:项目名称"
"保存的更改"
"正在保存"
@@ -224,10 +233,12 @@
"第三方通知"
"消息列"
"话题"
- "这个房间是关于什么的?"
+ "这个聊天室是关于什么的?"
"无法解密"
+ "从不安全的设备发送"
"无权访问此消息"
- "无法向一个或多个用户发送邀请。"
+ "发送者的已验证身份已改变"
+ "无法向部分用户发送邀请。"
"无法发送邀请"
"解锁"
"解除静音"
@@ -235,17 +246,25 @@
"用户名"
"验证已取消"
"验证完成"
+ "验证失败"
+ "已验证"
"验证设备"
+ "验证身份"
"视频"
"语音消息"
"等待…"
"正在等待解密密钥"
+ "您"
+ "%1$s 的身份似乎已经改变。%2$s"
+ "%1$s 的 %2$s 身份似乎已经改变。%3$s"
+ "(%1$s)"
"确认"
"错误"
"成功"
"警告"
"更改尚未保存,确定要返回吗?"
"保存更改?"
+ "您的服务器需要升级,以支持 Matrix 鉴权服务和账户创建。"
"创建固定链接失败"
"%1$s 无法加载地图,请稍后再试。"
"加载消息失败"
@@ -258,6 +277,7 @@
"某些信息尚未发送"
"抱歉,发生了错误"
"此加密消息的真实性无法在此设备上保证。"
+ "由先前验证过的用户加密。"
"未加密。"
"由未知或已删除的设备加密。"
"由未经其所有者验证的设备加密。"
@@ -277,7 +297,14 @@
"置顶消息"
"您将要转到您的%1$s帐户来重置您的身份信息。之后,您将被带回该应用。"
"无法确认?请前往您的帐户重置您的身份。"
+ "撤回验证并发送"
+ "您可以撤回验证并仍然发送此消息;也可以暂时取消验证,在重新验证 %1$s 后重试。"
+ "您的消息未发送,因为 %1$s 的已验证身份已发生改变"
+ "仍然发送消息"
+ "%1$s 正在使用一个或多个未经验证的设备。您还是可以继续发送信息;也可以暂时取消,等 %2$s 验证了所有设备后重试。"
"您的消息未发送,因为%1$s尚未验证所有设备"
+ "您有未验证的设备。您仍然可以发送消息;也可以暂时取消,并在验证所有设备后稍后重试。"
+ "您的消息未发送,因为您有尚未验证的设备。"
"置顶消息"
"处理要上传的媒体失败,请重试。"
"无法获取用户信息"
@@ -286,13 +313,16 @@
"正在加载消息…"
"查看全部"
"聊天"
+ "加入请求已发送"
"分享位置"
"分享我的位置"
"在 Apple Maps 中打开"
"在 Google Maps 中打开"
"在 OpenStreetMap 中打开"
"分享这个位置"
+ "消息未发送,因为 %1$s 的已验证身份已经发生改变。"
"消息未发送,因为%1$s尚未验证所有设备。"
+ "消息未发送,因为您有尚未验证的设备。"
"位置"
"版本:%1$s (%2$s)"
"zh-Hans"
diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml
index d1f17f147f..ab3a93a692 100644
--- a/libraries/ui-strings/src/main/res/values/localazy.xml
+++ b/libraries/ui-strings/src/main/res/values/localazy.xml
@@ -129,7 +129,6 @@
"Audio"
"Blocked users"
"Bubbles"
- "Call in progress (unsupported)"
"Call started"
"Chat backup"
"Copied to clipboard"
@@ -247,6 +246,7 @@ Reason: %1$s."
"Unable to send invite(s)"
"Unlock"
"Unmute"
+ "Unsupported call"
"Unsupported event"
"Username"
"Verification cancelled"
@@ -291,6 +291,7 @@ Reason: %1$s."
"Hey, talk to me on %1$s: %2$s"
"%1$s Android"
"Rageshake to report bug"
+ "Decline and ban"
"Failed selecting media, please try again."
"Failed processing media to upload, please try again."
"Failed uploading media, please try again."
@@ -312,12 +313,21 @@ Reason: %1$s."
"One or more of your devices are unverified. You can send the message anyway, or you can cancel for now and try again later after you have verified all of your devices."
"Your message was not sent because you have not verified one or more of your devices"
"Pinned messages"
+ "Requests to join"
"Failed processing media to upload, please try again."
"Could not retrieve user details"
+
+ - "%1$s +%2$d other want to join this room"
+ - "%1$s +%2$d others want to join this room"
+
+ "View all"
"%1$s of %2$s"
"%1$s Pinned messages"
"Loading message…"
"View All"
+ "Accept"
+ "%1$s wants to join this room"
+ "View"
"Chat"
"Request to join sent"
"Share location"
diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt
index 8a14ce5161..c014a8a763 100644
--- a/plugins/src/main/kotlin/Versions.kt
+++ b/plugins/src/main/kotlin/Versions.kt
@@ -47,7 +47,7 @@ private const val versionMinor = 7
// Note: even values are reserved for regular release, odd values for hotfix release.
// When creating a hotfix, you should decrease the value, since the current value
// is the value for the next regular release.
-private const val versionPatch = 3
+private const val versionPatch = 4
object Versions {
const val VERSION_CODE = 4_000_000 + versionMajor * 1_00_00 + versionMinor * 1_00 + versionPatch
diff --git a/plugins/src/main/kotlin/extension/KoverExtension.kt b/plugins/src/main/kotlin/extension/KoverExtension.kt
index 6182fde1f5..ccc077b0a3 100644
--- a/plugins/src/main/kotlin/extension/KoverExtension.kt
+++ b/plugins/src/main/kotlin/extension/KoverExtension.kt
@@ -32,10 +32,8 @@ val localAarProjects = listOf(
val excludedKoverSubProjects = listOf(
":app",
- ":samples",
":anvilannotations",
":anvilcodegen",
- ":samples:minimal",
":tests:testutils",
// Exclude `:libraries:matrix:impl` module, it contains only wrappers to access the Rust Matrix
// SDK api, so it is not really relevant to unit test it: there is no logic to test.
diff --git a/plugins/src/main/kotlin/extension/locales.kt b/plugins/src/main/kotlin/extension/locales.kt
index 0e785d68d6..de631e5c7d 100644
--- a/plugins/src/main/kotlin/extension/locales.kt
+++ b/plugins/src/main/kotlin/extension/locales.kt
@@ -12,6 +12,7 @@ val locales = setOf(
"es",
"et",
"fa",
+ "fi",
"fr",
"hu",
"in",
diff --git a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts
index 967e4fd707..579bda8873 100644
--- a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts
+++ b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts
@@ -6,7 +6,7 @@
*/
/**
- * This will generate the plugin "io.element.android-compose-application" to use by app and samples modules
+ * This will generate the plugin "io.element.android-compose-application" to use by app
*/
import extension.androidConfig
import extension.commonDependencies
diff --git a/samples/minimal/.gitignore b/samples/minimal/.gitignore
deleted file mode 100644
index 42afabfd2a..0000000000
--- a/samples/minimal/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/samples/minimal/build.gradle.kts b/samples/minimal/build.gradle.kts
deleted file mode 100644
index 48713af442..0000000000
--- a/samples/minimal/build.gradle.kts
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-plugins {
- id("io.element.android-compose-application")
- alias(libs.plugins.kotlin.android)
-}
-
-android {
- namespace = "io.element.android.samples.minimal"
-
- defaultConfig {
- applicationId = "io.element.android.samples.minimal"
- targetSdk = Versions.TARGET_SDK
- versionCode = Versions.VERSION_CODE
- versionName = Versions.VERSION_NAME
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- }
-
- buildFeatures {
- buildConfig = true
- }
-
- buildTypes {
- release {
- isMinifyEnabled = false
- proguardFiles(
- getDefaultProguardFile("proguard-android-optimize.txt"),
- "proguard-rules.pro"
- )
- }
- }
-}
-
-dependencies {
- implementation(libs.androidx.activity.compose)
- implementation(libs.androidx.preference)
- implementation(projects.libraries.matrix.api)
- implementation(projects.libraries.matrix.impl)
- implementation(projects.libraries.permissions.noop)
- implementation(projects.libraries.sessionStorage.implMemory)
- implementation(projects.libraries.designsystem)
- implementation(projects.libraries.androidutils)
- implementation(projects.libraries.architecture)
- implementation(projects.libraries.core)
- implementation(projects.libraries.network)
- implementation(projects.libraries.dateformatter.impl)
- implementation(projects.libraries.eventformatter.impl)
- implementation(projects.libraries.fullscreenintent.impl)
- implementation(projects.libraries.preferences.impl)
- implementation(projects.libraries.preferences.test)
- implementation(projects.libraries.indicator.impl)
- implementation(projects.features.invite.impl)
- implementation(projects.features.roomlist.impl)
- implementation(projects.features.leaveroom.impl)
- implementation(projects.features.login.impl)
- implementation(projects.features.logout.impl)
- implementation(projects.features.networkmonitor.impl)
- implementation(projects.services.toolbox.impl)
- implementation(projects.libraries.featureflag.impl)
- implementation(projects.services.analytics.noop)
- implementation(libs.coroutines.core)
- implementation(projects.libraries.push.test)
-}
diff --git a/samples/minimal/src/main/AndroidManifest.xml b/samples/minimal/src/main/AndroidManifest.xml
deleted file mode 100644
index 3f189bf096..0000000000
--- a/samples/minimal/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/AlwaysEnabledFeatureFlagService.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/AlwaysEnabledFeatureFlagService.kt
deleted file mode 100644
index 67151d5aa4..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/AlwaysEnabledFeatureFlagService.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import io.element.android.libraries.featureflag.api.Feature
-import io.element.android.libraries.featureflag.api.FeatureFlagService
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.flowOf
-
-class AlwaysEnabledFeatureFlagService : FeatureFlagService {
- override fun isFeatureEnabledFlow(feature: Feature): Flow {
- return flowOf(true)
- }
-
- override suspend fun setFeatureEnabled(feature: Feature, enabled: Boolean): Boolean {
- return true
- }
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/LoginScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/LoginScreen.kt
deleted file mode 100644
index 1e4324d99f..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/LoginScreen.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import io.element.android.features.login.impl.DefaultLoginUserStory
-import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource
-import io.element.android.features.login.impl.screens.loginpassword.LoginPasswordPresenter
-import io.element.android.features.login.impl.screens.loginpassword.LoginPasswordView
-import io.element.android.features.login.impl.util.defaultAccountProvider
-import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
-
-class LoginScreen(private val authenticationService: MatrixAuthenticationService) {
- @Composable
- fun Content(modifier: Modifier = Modifier) {
- val presenter = remember {
- LoginPasswordPresenter(
- authenticationService = authenticationService,
- AccountProviderDataSource(),
- DefaultLoginUserStory(),
- )
- }
-
- LaunchedEffect(Unit) {
- authenticationService.setHomeserver(defaultAccountProvider.url)
- }
-
- val state = presenter.present()
- LoginPasswordView(
- state = state,
- modifier = modifier,
- onBackClick = {},
- )
- }
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt
deleted file mode 100644
index 1a3c68b478..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/MainActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.foundation.layout.fillMaxSize
-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.core.view.WindowCompat
-import io.element.android.compound.theme.ElementTheme
-import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
-import io.element.android.libraries.matrix.impl.RustClientBuilderProvider
-import io.element.android.libraries.matrix.impl.RustMatrixClientFactory
-import io.element.android.libraries.matrix.impl.auth.OidcConfigurationProvider
-import io.element.android.libraries.matrix.impl.auth.RustMatrixAuthenticationService
-import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory
-import io.element.android.libraries.matrix.impl.room.RustTimelineEventTypeFilterFactory
-import io.element.android.libraries.network.useragent.SimpleUserAgentProvider
-import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
-import io.element.android.libraries.sessionstorage.api.LoggedInState
-import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
-import io.element.android.services.analytics.noop.NoopAnalyticsService
-import io.element.android.services.toolbox.impl.systemclock.DefaultSystemClock
-import kotlinx.coroutines.runBlocking
-import java.io.File
-
-class MainActivity : ComponentActivity() {
- private val matrixAuthenticationService: MatrixAuthenticationService by lazy {
- val baseDirectory = File(applicationContext.filesDir, "sessions")
- val userAgentProvider = SimpleUserAgentProvider("MinimalSample")
- val sessionStore = InMemorySessionStore()
- val userCertificatesProvider = NoOpUserCertificatesProvider()
- val proxyProvider = NoOpProxyProvider()
- RustMatrixAuthenticationService(
- sessionPathsFactory = SessionPathsFactory(baseDirectory, applicationContext.cacheDir),
- coroutineDispatchers = Singleton.coroutineDispatchers,
- sessionStore = sessionStore,
- rustMatrixClientFactory = RustMatrixClientFactory(
- baseDirectory = baseDirectory,
- cacheDirectory = applicationContext.cacheDir,
- appCoroutineScope = Singleton.appScope,
- coroutineDispatchers = Singleton.coroutineDispatchers,
- sessionStore = sessionStore,
- userAgentProvider = userAgentProvider,
- userCertificatesProvider = userCertificatesProvider,
- proxyProvider = proxyProvider,
- clock = DefaultSystemClock(),
- analyticsService = NoopAnalyticsService(),
- featureFlagService = AlwaysEnabledFeatureFlagService(),
- timelineEventTypeFilterFactory = RustTimelineEventTypeFilterFactory(),
- clientBuilderProvider = RustClientBuilderProvider(),
- ),
- passphraseGenerator = NullPassphraseGenerator(),
- oidcConfigurationProvider = OidcConfigurationProvider(baseDirectory),
- appPreferencesStore = InMemoryAppPreferencesStore(),
- )
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- WindowCompat.setDecorFitsSystemWindows(window, false)
- setContent {
- ElementTheme {
- val loggedInState by matrixAuthenticationService.loggedInStateFlow().collectAsState(initial = LoggedInState.NotLoggedIn)
- Content(isLoggedIn = loggedInState is LoggedInState.LoggedIn, modifier = Modifier.fillMaxSize())
- }
- }
- }
-
- @Composable
- fun Content(
- isLoggedIn: Boolean,
- modifier: Modifier = Modifier
- ) {
- if (!isLoggedIn) {
- LoginScreen(authenticationService = matrixAuthenticationService).Content(modifier)
- } else {
- val matrixClient = runBlocking {
- val sessionId = matrixAuthenticationService.getLatestSessionId()!!
- matrixAuthenticationService.restoreSession(sessionId).getOrNull()
- }
- RoomListScreen(LocalContext.current, matrixClient!!).Content(modifier)
- }
- }
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpProxyProvider.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpProxyProvider.kt
deleted file mode 100644
index cda2f870ce..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpProxyProvider.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import io.element.android.libraries.matrix.impl.proxy.ProxyProvider
-
-class NoOpProxyProvider : ProxyProvider {
- override fun provides(): String? = null
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpUserCertificatesProvider.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpUserCertificatesProvider.kt
deleted file mode 100644
index fbaac27e79..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NoOpUserCertificatesProvider.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import io.element.android.libraries.matrix.impl.certificates.UserCertificatesProvider
-
-class NoOpUserCertificatesProvider : UserCertificatesProvider {
- override fun provides(): List = emptyList()
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NullPassphraseGenerator.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NullPassphraseGenerator.kt
deleted file mode 100644
index 2ee4cbd4e5..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/NullPassphraseGenerator.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import io.element.android.libraries.matrix.impl.keys.PassphraseGenerator
-
-class NullPassphraseGenerator : PassphraseGenerator {
- override fun generatePassphrase(): String? = null
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/OnlyFallbackPermalinkParser.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/OnlyFallbackPermalinkParser.kt
deleted file mode 100644
index 254bd893c8..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/OnlyFallbackPermalinkParser.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import android.net.Uri
-import io.element.android.libraries.matrix.api.permalink.PermalinkData
-import io.element.android.libraries.matrix.api.permalink.PermalinkParser
-
-class OnlyFallbackPermalinkParser : PermalinkParser {
- override fun parse(uriString: String): PermalinkData {
- return PermalinkData.FallbackLink(Uri.parse(uriString))
- }
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt
deleted file mode 100644
index 0db3c9da51..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import android.content.Context
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.ui.Modifier
-import io.element.android.features.invite.impl.response.AcceptDeclineInvitePresenter
-import io.element.android.features.invite.impl.response.AcceptDeclineInviteView
-import io.element.android.features.leaveroom.impl.LeaveRoomPresenter
-import io.element.android.features.logout.impl.direct.DirectLogoutPresenter
-import io.element.android.features.networkmonitor.impl.DefaultNetworkMonitor
-import io.element.android.features.roomlist.impl.RoomListPresenter
-import io.element.android.features.roomlist.impl.RoomListView
-import io.element.android.features.roomlist.impl.datasource.RoomListDataSource
-import io.element.android.features.roomlist.impl.datasource.RoomListRoomSummaryFactory
-import io.element.android.features.roomlist.impl.filters.RoomListFiltersPresenter
-import io.element.android.features.roomlist.impl.filters.selection.DefaultFilterSelectionStrategy
-import io.element.android.features.roomlist.impl.search.RoomListSearchDataSource
-import io.element.android.features.roomlist.impl.search.RoomListSearchPresenter
-import io.element.android.libraries.androidutils.system.DefaultDateTimeObserver
-import io.element.android.libraries.core.coroutine.CoroutineDispatchers
-import io.element.android.libraries.dateformatter.impl.DateFormatters
-import io.element.android.libraries.dateformatter.impl.DefaultLastMessageTimestampFormatter
-import io.element.android.libraries.dateformatter.impl.LocalDateTimeProvider
-import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
-import io.element.android.libraries.eventformatter.impl.DefaultRoomLastMessageFormatter
-import io.element.android.libraries.eventformatter.impl.ProfileChangeContentFormatter
-import io.element.android.libraries.eventformatter.impl.RoomMembershipContentFormatter
-import io.element.android.libraries.eventformatter.impl.StateContentFormatter
-import io.element.android.libraries.fullscreenintent.api.aFullScreenIntentPermissionsState
-import io.element.android.libraries.indicator.impl.DefaultIndicatorService
-import io.element.android.libraries.matrix.api.MatrixClient
-import io.element.android.libraries.matrix.api.core.RoomId
-import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
-import io.element.android.libraries.matrix.api.timeline.Timeline
-import io.element.android.libraries.matrix.impl.room.join.DefaultJoinRoom
-import io.element.android.libraries.preferences.impl.store.DefaultSessionPreferencesStore
-import io.element.android.libraries.push.test.notifications.FakeNotificationCleaner
-import io.element.android.services.analytics.noop.NoopAnalyticsService
-import io.element.android.services.toolbox.impl.strings.AndroidStringProvider
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.withContext
-import kotlinx.datetime.Clock
-import kotlinx.datetime.TimeZone
-import timber.log.Timber
-import java.util.Locale
-
-class RoomListScreen(
- context: Context,
- private val matrixClient: MatrixClient,
- private val coroutineDispatchers: CoroutineDispatchers = Singleton.coroutineDispatchers,
-) {
- private val clock = Clock.System
- private val locale = Locale.getDefault()
- private val dateTimeProvider = LocalDateTimeProvider(clock) { TimeZone.currentSystemDefault() }
- private val dateFormatters = DateFormatters(locale, clock) { TimeZone.currentSystemDefault() }
- private val sessionVerificationService = matrixClient.sessionVerificationService()
- private val encryptionService = matrixClient.encryptionService()
- private val stringProvider = AndroidStringProvider(context.resources)
- private val featureFlagService = AlwaysEnabledFeatureFlagService()
- private val roomListRoomSummaryFactory = RoomListRoomSummaryFactory(
- lastMessageTimestampFormatter = DefaultLastMessageTimestampFormatter(
- localDateTimeProvider = dateTimeProvider,
- dateFormatters = dateFormatters
- ),
- roomLastMessageFormatter = DefaultRoomLastMessageFormatter(
- sp = stringProvider,
- roomMembershipContentFormatter = RoomMembershipContentFormatter(
- matrixClient = matrixClient,
- sp = stringProvider
- ),
- profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
- stateContentFormatter = StateContentFormatter(stringProvider),
- permalinkParser = OnlyFallbackPermalinkParser(),
- ),
- )
- private val presenter = RoomListPresenter(
- client = matrixClient,
- networkMonitor = DefaultNetworkMonitor(context, Singleton.appScope),
- snackbarDispatcher = SnackbarDispatcher(),
- leaveRoomPresenter = LeaveRoomPresenter(matrixClient, RoomMembershipObserver(), coroutineDispatchers),
- roomListDataSource = RoomListDataSource(
- roomListService = matrixClient.roomListService,
- roomListRoomSummaryFactory = roomListRoomSummaryFactory,
- coroutineDispatchers = coroutineDispatchers,
- notificationSettingsService = matrixClient.notificationSettingsService(),
- appScope = Singleton.appScope,
- dateTimeObserver = DefaultDateTimeObserver(context),
- ),
- indicatorService = DefaultIndicatorService(
- sessionVerificationService = sessionVerificationService,
- encryptionService = encryptionService,
- ),
- featureFlagService = featureFlagService,
- searchPresenter = RoomListSearchPresenter(
- RoomListSearchDataSource(
- roomListService = matrixClient.roomListService,
- roomSummaryFactory = roomListRoomSummaryFactory,
- coroutineDispatchers = coroutineDispatchers,
- ),
- featureFlagService = featureFlagService,
- ),
- sessionPreferencesStore = DefaultSessionPreferencesStore(
- context = context,
- sessionId = matrixClient.sessionId,
- sessionCoroutineScope = Singleton.appScope
- ),
- filtersPresenter = RoomListFiltersPresenter(
- roomListService = matrixClient.roomListService,
- filterSelectionStrategy = DefaultFilterSelectionStrategy(),
- ),
- acceptDeclineInvitePresenter = AcceptDeclineInvitePresenter(
- client = matrixClient,
- joinRoom = DefaultJoinRoom(matrixClient, NoopAnalyticsService()),
- notificationCleaner = FakeNotificationCleaner(),
- ),
- analyticsService = NoopAnalyticsService(),
- fullScreenIntentPermissionsPresenter = { aFullScreenIntentPermissionsState() },
- notificationCleaner = FakeNotificationCleaner(),
- logoutPresenter = DirectLogoutPresenter(matrixClient, encryptionService),
- )
-
- @Composable
- fun Content(modifier: Modifier = Modifier) {
- fun onRoomClick(roomId: RoomId) {
- Singleton.appScope.launch {
- withContext(coroutineDispatchers.io) {
- matrixClient.getRoom(roomId)!!.use { room ->
- room.liveTimeline.paginate(Timeline.PaginationDirection.BACKWARDS)
- }
- }
- }
- }
-
- val state = presenter.present()
- RoomListView(
- state = state,
- onRoomClick = ::onRoomClick,
- onSettingsClick = {},
- onSetUpRecoveryClick = {},
- onConfirmRecoveryKeyClick = {},
- onCreateRoomClick = {},
- onRoomSettingsClick = {},
- onMenuActionClick = {},
- onRoomDirectorySearchClick = {},
- modifier = modifier,
- acceptDeclineInviteView = {
- AcceptDeclineInviteView(state = state.acceptDeclineInviteState, onAcceptInvite = {}, onDeclineInvite = {})
- },
- onMigrateToNativeSlidingSyncClick = {},
- )
-
- DisposableEffect(Unit) {
- Timber.w("Start sync!")
- runBlocking {
- matrixClient.syncService().startSync()
- }
- onDispose {
- Timber.w("Stop sync!")
- runBlocking {
- matrixClient.syncService().stopSync()
- }
- }
- }
- }
-}
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt
deleted file mode 100644
index 7b33dda53b..0000000000
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2023, 2024 New Vector Ltd.
- *
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
- */
-
-package io.element.android.samples.minimal
-
-import io.element.android.libraries.core.coroutine.CoroutineDispatchers
-import io.element.android.libraries.core.meta.BuildMeta
-import io.element.android.libraries.core.meta.BuildType
-import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
-import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
-import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration
-import io.element.android.libraries.matrix.impl.tracing.RustTracingService
-import kotlinx.coroutines.CoroutineName
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.MainScope
-import kotlinx.coroutines.plus
-
-object Singleton {
- val buildMeta = BuildMeta(
- isDebuggable = true,
- buildType = BuildType.DEBUG,
- applicationName = "EAX-Minimal",
- productionApplicationName = "EAX-Minimal",
- desktopApplicationName = "EAX-Minimal-Desktop",
- applicationId = "io.element.android.samples.minimal",
- isEnterpriseBuild = false,
- lowPrivacyLoggingEnabled = false,
- versionName = "0.1.0",
- versionCode = 1,
- gitRevision = "",
- gitBranchName = "",
- flavorDescription = "NA",
- flavorShortDescription = "NA",
- )
-
- init {
- val tracingConfiguration = TracingConfiguration(
- filterConfiguration = TracingFilterConfigurations.debug,
- writesToLogcat = true,
- writesToFilesConfiguration = WriteToFilesConfiguration.Disabled
- )
- RustTracingService(buildMeta).setupTracing(tracingConfiguration)
- }
-
- val appScope = MainScope() + CoroutineName("Minimal Scope")
- val coroutineDispatchers = CoroutineDispatchers(
- io = Dispatchers.IO,
- computation = Dispatchers.Default,
- main = Dispatchers.Main,
- )
-}
diff --git a/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher.webp b/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher.webp
deleted file mode 100644
index c209e78ecd..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher_round.webp
deleted file mode 100644
index b2dfe3d1ba..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher.webp b/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher.webp
deleted file mode 100644
index 4f0f1d64e5..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher_round.webp
deleted file mode 100644
index 62b611da08..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher.webp b/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher.webp
deleted file mode 100644
index 948a3070fe..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
deleted file mode 100644
index 1b9a6956b3..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher.webp
deleted file mode 100644
index 28d4b77f9f..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9287f50836..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
deleted file mode 100644
index aa7d6427e6..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
deleted file mode 100644
index 9126ae37cb..0000000000
Binary files a/samples/minimal/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ
diff --git a/samples/minimal/src/main/res/values-night/themes.xml b/samples/minimal/src/main/res/values-night/themes.xml
deleted file mode 100644
index bcbbf3cdbd..0000000000
--- a/samples/minimal/src/main/res/values-night/themes.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
diff --git a/samples/minimal/src/main/res/values/strings.xml b/samples/minimal/src/main/res/values/strings.xml
deleted file mode 100644
index d4b4bb9459..0000000000
--- a/samples/minimal/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- EAX-Sample
-
diff --git a/samples/minimal/src/main/res/values/themes.xml b/samples/minimal/src/main/res/values/themes.xml
deleted file mode 100644
index 63fdc55168..0000000000
--- a/samples/minimal/src/main/res/values/themes.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
diff --git a/screenshots/de/appnav.loggedin_LoggedInView_Day_1_de.png b/screenshots/de/appnav.loggedin_LoggedInView_Day_1_de.png
index 1f10ded788..e9dc7a593f 100644
--- a/screenshots/de/appnav.loggedin_LoggedInView_Day_1_de.png
+++ b/screenshots/de/appnav.loggedin_LoggedInView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:02d1ddf186d518d3284a23f7fc3e1edd132e9aa0d42c22b8f830804500f445ac
-size 9421
+oid sha256:a66053fd8eb2da06267c468188f9a1ddc2a217cfcf22ea66e3885e2f904a28ca
+size 9433
diff --git a/screenshots/de/appnav.loggedin_SyncStateView_Day_0_de.png b/screenshots/de/appnav.loggedin_SyncStateView_Day_0_de.png
index 37ccab0912..c0461bc3f2 100644
--- a/screenshots/de/appnav.loggedin_SyncStateView_Day_0_de.png
+++ b/screenshots/de/appnav.loggedin_SyncStateView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:504af9508487312a58c578bc03206f5579a4f666ff5c7c5729da4b271fee6da2
-size 9578
+oid sha256:2b263d3a927605d3002973cea5ee0b8183e18bd9d6914bf159504438a3588c3e
+size 9565
diff --git a/screenshots/de/features.createroom.impl.components_RoomPrivacyOption_Day_0_de.png b/screenshots/de/features.createroom.impl.components_RoomPrivacyOption_Day_0_de.png
deleted file mode 100644
index d1d0072a68..0000000000
--- a/screenshots/de/features.createroom.impl.components_RoomPrivacyOption_Day_0_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c84305f71b69d645e509d0e8e674c5efcf44f3b9ab662af0b1effdccc729ec4d
-size 44442
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png
new file mode 100644
index 0000000000..2e33cce11b
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a15fb67f825270cd99686b6ccc41ba96300cd66cd9037a142ca22ea0c97e34b8
+size 39325
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png
new file mode 100644
index 0000000000..a72a126cda
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd301613bba0388dda860f1b9bf17199242b4b2b100306204ce62aa8a8d18475
+size 49352
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png
new file mode 100644
index 0000000000..46b12584d8
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8bdac3f5bab1b95d1ece1891d8f8eed5280189a4df245f7ed428659b070abfc1
+size 60977
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png
new file mode 100644
index 0000000000..301811e23d
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e128c7c58e19420128773da3e7493d23b29318754f16701f15c62b881e0605f
+size 60682
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png
new file mode 100644
index 0000000000..10500ad830
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d3c949a4619265b60081283be9f27eecac606da28efe0802709b2737fee0de0
+size 60782
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png
new file mode 100644
index 0000000000..5d46b370bd
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f437ac8ebbb8a07498cfdb79ae559d6c26ef0df7f69ceadf3517a2240df21adf
+size 60272
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png
new file mode 100644
index 0000000000..324e5c0e7c
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5b45f72a7fc93c57abf3d660fe90681e5dd4d97f6e85fb13930b778275314bc
+size 40243
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png
new file mode 100644
index 0000000000..fa87cb4580
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca979acec5b69c530dd7df8f096bb3ed0155e98adb175c3720c51bf8887101d3
+size 50133
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png
new file mode 100644
index 0000000000..04379c41f0
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3d67f0c62fd3118b5e0dd973e0704ab59e728042103830f4bd3dde3a69ade59
+size 62037
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png
new file mode 100644
index 0000000000..6cf5c6f142
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63f49c49ed3c99866a9c383e5fa6ff944a936f2050001be4d5868fbb47b702b8
+size 62506
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png
new file mode 100644
index 0000000000..167b944d4a
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:678468615a0df5c1ba8add0ec3046e6ce11ab13adf9439635569806ffd29614e
+size 62622
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png
new file mode 100644
index 0000000000..121f527da6
--- /dev/null
+++ b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e72f476868673ddceab4449eb1d64554ccb48be8dcc96f45e4fa3137a4345bd
+size 62077
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_de.png
deleted file mode 100644
index 640202e520..0000000000
--- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ed12c679e7279448f1f62503aae447edab4763a0af50168224e0a6fe5d178fc2
-size 68972
diff --git a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_de.png b/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_de.png
deleted file mode 100644
index 6bae0ca125..0000000000
--- a/screenshots/de/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3fecfae763c33ad3b1618d1da32793c34b088c312af70df7d1046d3ccede9aac
-size 85916
diff --git a/screenshots/de/features.ftue.impl.notifications_NotificationsOptInView_Day_0_de.png b/screenshots/de/features.ftue.impl.notifications_NotificationsOptInView_Day_0_de.png
index 2c0481821f..1637b4b00e 100644
--- a/screenshots/de/features.ftue.impl.notifications_NotificationsOptInView_Day_0_de.png
+++ b/screenshots/de/features.ftue.impl.notifications_NotificationsOptInView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:36ad162073513891713dfdfbcd3e0916cbfb192c6fdc30a176df8b43053f70a0
-size 70567
+oid sha256:9dd80a73d67f1d18c52606aeebc9dcf971857a5f52e4490932499487ca350d08
+size 70530
diff --git a/screenshots/de/features.ftue.impl.welcome_WelcomeView_Day_0_de.png b/screenshots/de/features.ftue.impl.welcome_WelcomeView_Day_0_de.png
index c2f1836b5f..cad600bbe2 100644
--- a/screenshots/de/features.ftue.impl.welcome_WelcomeView_Day_0_de.png
+++ b/screenshots/de/features.ftue.impl.welcome_WelcomeView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:359abe7bf39c0db3e08f70190934082cc0120f1a0f4b20df2aef4cf0c07435d8
-size 265083
+oid sha256:94503fb4de93a765f8d1cb8d989fb798b3e764854c931d5504af2e27525cb278
+size 273704
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 62bcdbac44..1078ac8765 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:c10648dad8de3ee49f7961cb340117c9cbca42eb2cb9fec5b8359e9ba89a0db7
-size 128233
+oid sha256:d8ec5e94258a92dea64d381284eca656980065cf2b9d1da89a7ec0833c77e263
+size 109815
diff --git a/screenshots/de/features.location.impl.send_SendLocationView_Day_0_de.png b/screenshots/de/features.location.impl.send_SendLocationView_Day_0_de.png
index 3a319a2cab..1437c84ebf 100644
--- a/screenshots/de/features.location.impl.send_SendLocationView_Day_0_de.png
+++ b/screenshots/de/features.location.impl.send_SendLocationView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ef204de40ffcaf89493ac4034e5ea17f410bae69fb6a8bb4cbffd9507a5b21d0
-size 20467
+oid sha256:6e43851f11f36f86124741e654bac7133eea3675cf9c64d06416eeb39c9a355b
+size 20547
diff --git a/screenshots/de/features.location.impl.send_SendLocationView_Day_1_de.png b/screenshots/de/features.location.impl.send_SendLocationView_Day_1_de.png
index 2ca26fd76f..db69ce0ae5 100644
--- a/screenshots/de/features.location.impl.send_SendLocationView_Day_1_de.png
+++ b/screenshots/de/features.location.impl.send_SendLocationView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fc8fa8212e7259517e40af598cdf6c9832983cc99b2ee39f8a2169bb7950e01c
-size 38045
+oid sha256:385266aa4705ca5b0761409bc3256b901e03ffbf1b19b21cd87376d28e7ff63a
+size 38111
diff --git a/screenshots/de/features.location.impl.send_SendLocationView_Day_2_de.png b/screenshots/de/features.location.impl.send_SendLocationView_Day_2_de.png
index 2c8350b5cc..5414439047 100644
--- a/screenshots/de/features.location.impl.send_SendLocationView_Day_2_de.png
+++ b/screenshots/de/features.location.impl.send_SendLocationView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ae4393bd42f9fb1ca0bac205f21fe27551b0884209558356593abd7e72ce1a63
-size 34450
+oid sha256:e1a23c1f649da919b8edb3edfc856acea0f67c7646acdd570f8081806df40d44
+size 34512
diff --git a/screenshots/de/features.location.impl.send_SendLocationView_Day_3_de.png b/screenshots/de/features.location.impl.send_SendLocationView_Day_3_de.png
index 3a319a2cab..1437c84ebf 100644
--- a/screenshots/de/features.location.impl.send_SendLocationView_Day_3_de.png
+++ b/screenshots/de/features.location.impl.send_SendLocationView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ef204de40ffcaf89493ac4034e5ea17f410bae69fb6a8bb4cbffd9507a5b21d0
-size 20467
+oid sha256:6e43851f11f36f86124741e654bac7133eea3675cf9c64d06416eeb39c9a355b
+size 20547
diff --git a/screenshots/de/features.location.impl.send_SendLocationView_Day_4_de.png b/screenshots/de/features.location.impl.send_SendLocationView_Day_4_de.png
index ce2e02e956..add5c25a7e 100644
--- a/screenshots/de/features.location.impl.send_SendLocationView_Day_4_de.png
+++ b/screenshots/de/features.location.impl.send_SendLocationView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f1c2621e9325d09672e23f32ba18a97a9c75b0ebc6a263080907308a0bb84d8f
-size 20616
+oid sha256:f7e2b3e52c4032fe3133f1104beacd9944bc0c8b1c7c4921d0dbcd5a01f96e6c
+size 20691
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_0_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_0_de.png
index 74c0c9d1c4..c3148072be 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_0_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a8b1b5b8a58e360ad290febc451e45f8d9ed5914de6131d8419454dce0ef329a
-size 12195
+oid sha256:6432c1ddbd16df737087f880c69fbd2c67d82e4b9266d5123a334852d778c837
+size 12264
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_1_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_1_de.png
index 4ac0009ff8..1019beaf75 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_1_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9658e32678c73a0f47d3e11c7134e1c9b603fe9deb67bbef7b6e9644ad22ced6
-size 32512
+oid sha256:6e1ea6bc818df234727640f239b36c575929f9de10e782e48ae9f96ca4b29b1d
+size 32572
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_2_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_2_de.png
index a7e9b95359..4ad76d47db 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_2_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:17cc95cced6f13bcc7487ca6ead90f162875b050487c545cf86b34c9fa0db5e5
-size 28973
+oid sha256:9ca9eb33cbdefc5ea7b1360b385bc6529bafaa8649d08d7bfabadf6bf68d50d9
+size 29023
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_3_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_3_de.png
index 74c0c9d1c4..c3148072be 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_3_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a8b1b5b8a58e360ad290febc451e45f8d9ed5914de6131d8419454dce0ef329a
-size 12195
+oid sha256:6432c1ddbd16df737087f880c69fbd2c67d82e4b9266d5123a334852d778c837
+size 12264
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_4_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_4_de.png
index adc13e8bfd..2972e83c09 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_4_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:80f944a549c9e9d0d7c66ee7f4f1fafd41a7ba0453bec88fbb5ab5e05f705e17
-size 12388
+oid sha256:1a443ecba8faaab0dfc7cf8742a37a8712b2c2a3b2bfc7c5e94925195e0a532b
+size 12461
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_5_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_5_de.png
index 3e719e069c..8a989fd197 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_5_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cc4c1b633804856175ecbccbd049b27fdf1a9e51603c1f47f83d710ddcf0a950
-size 15971
+oid sha256:e847a96b43a31df8ad991e2818b0e4c01eb3176d38e01aecde6ba34bbc929e90
+size 16033
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_6_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_6_de.png
index e55b6a47a8..6bba72037c 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_6_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:848af1b684b636a11d8abbf0401bfc948118a96186ea39ca840613f0ea4fa544
-size 24558
+oid sha256:bb000d2201d558a88024d54f03acb55e3ae55f4feed54021d7db609dadb5c566
+size 24616
diff --git a/screenshots/de/features.location.impl.show_ShowLocationView_Day_7_de.png b/screenshots/de/features.location.impl.show_ShowLocationView_Day_7_de.png
index 1c2265b980..e18815516c 100644
--- a/screenshots/de/features.location.impl.show_ShowLocationView_Day_7_de.png
+++ b/screenshots/de/features.location.impl.show_ShowLocationView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:40367084c1192026f46a087bab6b83d3120599365c53836a80aa81faab4ae9e0
-size 26926
+oid sha256:723733e42d453d3867580827a9758588cca66fabc73d97a177047b523b0be257
+size 26989
diff --git a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_de.png b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_de.png
index 61394f5206..ba4e0f02a9 100644
--- a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_de.png
+++ b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d1c8e85a784d831e6b8939fe3b48fa7a70a81a3c21975d7890bd689ae16b339d
-size 39057
+oid sha256:e53fddd046e6deffeb2eb4ce584c733626752994c54b4294363b4883e4f71df4
+size 39038
diff --git a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_de.png b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_de.png
index d98fa4d5ef..f648778853 100644
--- a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_de.png
+++ b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3a401cda729eecc7d9436ccf01dd60d8ceb657af6096b2e8e2c7181b271a3860
-size 40064
+oid sha256:97d97075d09280fad2cf81c9524d00703f7d4ee15bf36b042539b223afdb6bc4
+size 40239
diff --git a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_de.png b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_de.png
index 11697ababb..a025eb21c9 100644
--- a/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_de.png
+++ b/screenshots/de/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:59c241c62074c5d000faefdb5e797141420d6c43c4a8c248cb138e6cac2b8f58
-size 29994
+oid sha256:2415819eae450476d2d4ac929c5a9acaed10bddbfb32244689824daf78f02b90
+size 29885
diff --git a/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_de.png b/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_de.png
index 32f57aa719..158db552e0 100644
--- a/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_de.png
+++ b/screenshots/de/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a8c4984348b08378f85ceef20409aecc485a3e42d8572c53d0e7dddd0520913a
-size 69172
+oid sha256:8d2f3cb47d6ea798db5661674a9dddcf1289de1263cb88a7007a9653939be5dc
+size 69240
diff --git a/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_de.png b/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_de.png
index cc7af7d17f..dc9aece926 100644
--- a/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_de.png
+++ b/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7dd7a34fe746e00f28402feeb28ea3bf31fa4c7313751c9de1acf59eddc0a8c8
-size 56523
+oid sha256:0d2fadedcac33e4dbc013c9f441ec80a5a60d39e84c3e5aacf9eba0e9f6813f9
+size 56582
diff --git a/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_de.png b/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_de.png
index c799f43f47..408dc97de4 100644
--- a/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_de.png
+++ b/screenshots/de/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:47597e7a91519874687d9c9f5b1db1d6a94a3b04ffbc3905d644e53ec3bdb32b
-size 49793
+oid sha256:df6dbf639e38330d326973c1790fe8bc044d2de88170c1c3dcbb569dc0e3228d
+size 49814
diff --git a/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_de.png b/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_de.png
index c49c0fea98..d63e78541b 100644
--- a/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_de.png
+++ b/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2555dc4c353775823a5605fbac249ce557c7eaba0f41bf9440e78b085584c10a
-size 27541
+oid sha256:7b38422fa3271d84a2199325752471176820485f4c13832125fd44ed90fe8ece
+size 27236
diff --git a/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_de.png b/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_de.png
index b320ce0684..73bacb7e93 100644
--- a/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_de.png
+++ b/screenshots/de/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1476d0a4afdbdb449f6e9ac14f5dd2c01bee3cb37c4f0f0731fa432bd869249f
-size 60787
+oid sha256:f5c92dca182754b6a3622c6eb7198d6829d6a696bbb29c8e5745b818e5a7050d
+size 60492
diff --git a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_0_de.png b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_0_de.png
index f49d12b774..5318fc864f 100644
--- a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_0_de.png
+++ b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b3e34c59515192b4f20c1221df49f7c869a13f35427378cdd8e3f4d8170c9e50
-size 76631
+oid sha256:f7e32f9afa7fcec67740bc0dc541ed9b37655d08e2d4a851d4195480e277616d
+size 77420
diff --git a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_2_de.png b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_2_de.png
index 55f79ee5b2..a4cac0b1c3 100644
--- a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_2_de.png
+++ b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fb354a2a2e70581b07c54e39f45e134b722a8d1f4b9127737cb02dae2728c919
-size 61312
+oid sha256:e554b8fd9bb9b3ddf81518a875588fb852cff3f525ae4a7cd9841bf7adedf8f0
+size 61915
diff --git a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_3_de.png b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_3_de.png
index 982a45f199..87eb704a54 100644
--- a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_3_de.png
+++ b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:da45b56934dbea069a26f075d70a1123a84673d2271c1291b869db7d27df80a9
-size 54363
+oid sha256:932587c9c20b08576a20c88b06a6a768193d1f0cc342bac332fc72b6dd32ef13
+size 54871
diff --git a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_4_de.png b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_4_de.png
index 5dfb45dcd6..20262d3338 100644
--- a/screenshots/de/features.logout.impl_AccountDeactivationView_Day_4_de.png
+++ b/screenshots/de/features.logout.impl_AccountDeactivationView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:64cb81a79b348ef729d1aa87c19cbd7c5e1a7b7aa4fb74e752aa5e25d3553f2d
-size 53470
+oid sha256:1c366667637a46850c80a875736bf79830e1cdde717878bee3087453d484c3dd
+size 54105
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_0_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_0_de.png
deleted file mode 100644
index 10bce4751e..0000000000
--- a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_0_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc2d2e0e93bc22dfc796ea5b12735c4f0e5e287f397dddc8189a46c0b3cf6c5a
-size 391520
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_1_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_1_de.png
deleted file mode 100644
index b57a41b590..0000000000
--- a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_1_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:629c7cb44d94545c03e9d0fe6031859733e9c15492dbe6e880b7267629bdad7a
-size 16209
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_2_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_2_de.png
deleted file mode 100644
index aa40ca176c..0000000000
--- a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_2_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2d5364c50135e4b11be2f6d352a9a13a3c1ef550fd836202b6a9905febe24368
-size 50045
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_3_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_3_de.png
deleted file mode 100644
index 828da69075..0000000000
--- a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_3_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0d842369d7ccde4111784d8d78c5b6bccb269a977c63d6cb53d909756ae06e87
-size 76465
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_4_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_4_de.png
new file mode 100644
index 0000000000..045191214f
--- /dev/null
+++ b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_4_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2fa534dab8314d06e5abb8c32ac8520245ca994245c9d3f12130e25bf354b02
+size 52533
diff --git a/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_5_de.png b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_5_de.png
new file mode 100644
index 0000000000..a604c941b2
--- /dev/null
+++ b/screenshots/de/features.messages.impl.attachments.preview_AttachmentsView_5_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8b056aa7601b7080a123a9c8391cedbcbcefe27dfa2c802ed1f699285a72578
+size 78749
diff --git a/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_de.png b/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_de.png
index 464fdcf400..5e223eefb8 100644
--- a/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_de.png
+++ b/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1d6a1aad14f185515d8ab464cd68525ed472f15297189d7e19066c5dbbd98fcd
-size 63505
+oid sha256:c1655a4fe1d8d6be2762265e2c183716b4f181abd0ff8a69d121ba47e498ed95
+size 63422
diff --git a/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_de.png b/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_de.png
index 504074936b..5dd455a313 100644
--- a/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_de.png
+++ b/screenshots/de/features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dbc5feb13789f4c1e78c8ed15cb66a971afef80f3a2e93f40d8458f4da1885e8
-size 67051
+oid sha256:bfed5e9b301307563d609fe7fd634068ef3a452eb08d5fb055e438aa59925e88
+size 66988
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_0_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_0_de.png
index 46c87740cd..959ac4d15f 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_0_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:915d2638f03d43671864edbe89c4c3ef20328c202f106acfb64c38b24158a3e9
-size 49041
+oid sha256:b22d1772e0778b5cc298871d1fabf39809d8dc7eaf4c74bb5319a0889e3b7ae8
+size 48742
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_1_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_1_de.png
index 9d22d1481d..280331df35 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_1_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:984dbdbd6f06d4803003bc040c7688c581cfa94527aa15227f95dd6b450498e2
-size 49980
+oid sha256:2f80e0016a9a024ccfb9421c4ca459060e6efd7f2277a174d0df355537e7b0e4
+size 49757
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_2_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_2_de.png
index 22093b61c8..ec231d6d89 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_2_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2ab185db8e19894412e2920184f6401d427cbbd90dd212275dfe2c0c63a1e2c2
-size 49508
+oid sha256:53e5b70eff1acd9e76c522b5a2f6b6a8eb95e918c43b7dac912c3a57409a3745
+size 49265
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_3_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_3_de.png
index c9a1a28041..fa22bc328d 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_3_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7d7a8c5f1dbd21126298d3571f505576d92fada889c43236c826e386b9f962c4
-size 48033
+oid sha256:251236d638c52f3c35c32f42f1f8bef6ec761079cec094e6ac71f42b49968d4d
+size 48846
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_4_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_4_de.png
index a52367ee04..ca64ebd339 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_4_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:611c1244c3c13f727a8b146f668d85e8844292f11f9615931244d16076cc7afc
-size 34179
+oid sha256:80693c6c11ec509b2d62a82f62fd256c83f8ac9878162a301fab768fcefecdf6
+size 28758
diff --git a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_5_de.png b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_5_de.png
index 22093b61c8..ec231d6d89 100644
--- a/screenshots/de/features.messages.impl.report_ReportMessageView_Day_5_de.png
+++ b/screenshots/de/features.messages.impl.report_ReportMessageView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2ab185db8e19894412e2920184f6401d427cbbd90dd212275dfe2c0c63a1e2c2
-size 49508
+oid sha256:53e5b70eff1acd9e76c522b5a2f6b6a8eb95e918c43b7dac912c3a57409a3745
+size 49265
diff --git a/screenshots/de/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_de.png b/screenshots/de/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_de.png
deleted file mode 100644
index 313e714456..0000000000
--- a/screenshots/de/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e85ec9c3ec5bad3537bff940d6a3ae04107bc2ea638dbed9b7d1b8bdf737df37
-size 8497
diff --git a/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_2_de.png b/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_2_de.png
new file mode 100644
index 0000000000..eec0d14f41
--- /dev/null
+++ b/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_2_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30a67ddcd95c4a387cd9abe35d0b93f0303a6ceba5a6b73f9dfc5fdfe80c6b27
+size 6619
diff --git a/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_3_de.png b/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_3_de.png
new file mode 100644
index 0000000000..b93eafce77
--- /dev/null
+++ b/screenshots/de/features.messages.impl.timeline.components_CallMenuItem_Day_3_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b62eb64c91e55846eeb393ff4d32ce904917da8c03e4cc98d65cbd7eddc2011
+size 6179
diff --git a/screenshots/de/features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_de.png b/screenshots/de/features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_de.png
index d46cbb48d4..28340febd3 100644
--- a/screenshots/de/features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_de.png
+++ b/screenshots/de/features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c74fbb033404fb0c21114a956e09dbddfbd6cf23ebf6f0338f0c1c4f1c188ef5
-size 20817
+oid sha256:9367f66dcb7b5aaac0fd38dca80fe4789158da4ad9feeda0818fd533bb6edbe7
+size 42519
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineViewMessageShield_Day_0_de.png b/screenshots/de/features.messages.impl.timeline_TimelineViewMessageShield_Day_0_de.png
index 5b212e454a..c55efa3279 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineViewMessageShield_Day_0_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineViewMessageShield_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:47c3916ba25fd145f7699735e3c8ca61c9796fc1d6ae34274bf75bbf61421b65
+oid sha256:67cb517c3074a8a87afab0fb7a8531ce8568bb590f42f7596fc5d858d25fdf58
size 37488
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_0_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_0_de.png
index 7efe528a49..655ff7d819 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_0_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ef01b8c49dfa3950ac88a955772edabf087f3ad2fb9c1789945897dff9bcbe77
-size 50412
+oid sha256:02ff3103350fb27a614b7ea590e0b0002500d3c3310146e2763390388824c1ec
+size 50423
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_11_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_11_de.png
index 66e22980b5..9dc9c0ce53 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_11_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_11_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1ae826353af0538b23a8efdeb71918d663ab0f62ac2e29b41c71966b7d68fab2
-size 84153
+oid sha256:47834691177f145f00fd2e0672c635741ff3bf0e4f4fb6bce779a1a04e3b4326
+size 84125
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_12_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_12_de.png
index e21114b98a..e3a6fc2c32 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_12_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_12_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5eeffca98e367dcda636264ad5e9d8c5919499cff5ef4c45cb9eb2813a61a263
-size 51888
+oid sha256:95e6fcbee41e2ae80b7ae94d9e59034cf9e86f3ec703ca1efc3bc2edeb1eed48
+size 51910
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_13_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_13_de.png
index 14ed398b96..c00f90f4ee 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_13_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_13_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4ea04dc7b42cf0c794319aa6c19821d02bcedc3eaeb46ae3ef6729e477c120f6
-size 63468
+oid sha256:db933395df1e1a354accd0956e727e33be72c6af50821477c34e97bb0feb308b
+size 63469
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_14_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_14_de.png
index 6280b1a3ce..73ee44636e 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_14_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_14_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2bca338437a2320a2dc35e59680c4fac8cc037de5b874363561d87f13704eeb6
-size 48325
+oid sha256:884e174f1a6fba9137493d821dca9e88a3393b3a620cf8092416e8d043b17fd3
+size 48332
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_15_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_15_de.png
index 268797a031..d756889011 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_15_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_15_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:479877e54e0cd8886d29ffc5f514f5b5aacedcda74a84044623e6f13e7db3a29
-size 72022
+oid sha256:332d421d80802e1c88471f98fba5884dec399d09ab56ae08dd30269471eba6b1
+size 72028
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_16_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_16_de.png
index f655d63027..49d4c9002e 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_16_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_16_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4ff36005b0b29f99a6b79d0cc6e324b29e34d5adcf66da0ba12f3cbcf0d1700f
-size 58053
+oid sha256:d7eaec18f60e71583055aa2feea1053602167dfe20e2e748b07cdced3f1f2432
+size 58063
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_17_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_17_de.png
index c976f300bd..7dad3e4dc0 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_17_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_17_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:39a94b5ba42b3232f8e88cbd9bafdb2b4fdee26fec135521a483151defb8d6ca
-size 64368
+oid sha256:0ddc24acf7fadb4d70781bb2df7417c6389553ce59cbbc68a939f1e2f1a498a7
+size 64365
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_1_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_1_de.png
index 26666b17c3..a2e15d5e83 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_1_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6f8da680223c23dfdce6109b5fbe23133c63db3e2a67865ff835163dfaf6811d
-size 71822
+oid sha256:77f8bc13c8f58379a15d676fde2b8e56eff70434b24d10bd6db805b9eac7a8ac
+size 71827
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_4_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_4_de.png
index c419e2d65d..ec6fb4d5ec 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_4_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:15e45b221f5fc941f57a22b175f5e8e7a5f2fd3e4bcb0c495e2ab5675c606939
-size 70513
+oid sha256:c991fe686a800fa172d371f109c7cddcacfccd2777c0d5e39ae0fe5fb212aa51
+size 70511
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_6_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_6_de.png
index 31d5666f54..e88f8536fe 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_6_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:06907b60e9815a85806729837dc3b4cbb260503904aee6055e58e68255658522
-size 73010
+oid sha256:2a586bcc9d36e042471c001ca8f94c3fdf971d32dc8217ed7f5e6cb210bf75f5
+size 73011
diff --git a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_8_de.png b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_8_de.png
index cf1f55ff51..f7612534e8 100644
--- a/screenshots/de/features.messages.impl.timeline_TimelineView_Day_8_de.png
+++ b/screenshots/de/features.messages.impl.timeline_TimelineView_Day_8_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4a0fcb3ada4dbdf7c92e965f8ca601a64fa50c41bf6f95083177ee52d2c31ae4
-size 53443
+oid sha256:d0ae852f23e3954610f4f5fe91276a57423d8dade99a0720aebabe912487e411
+size 53431
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_0_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_0_de.png
index 6239554cdd..e2d97ae903 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_0_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bc7d196912bba295590cc34bd046dd45f555317d343ed43cd321215bce5cf232
-size 57187
+oid sha256:2da06565c3d20ff1582f90be3bd8067327ae5cf3c521166afd012071390c8ad6
+size 57218
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_10_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_10_de.png
index f2b5cd62ae..4ef8cd9a35 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_10_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_10_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b0136a05c67161cbea51d0a5d8298fc69d7736d9d13a244c20d8f62d81ab7ef2
-size 59649
+oid sha256:045d7039f28141f95bbe5fa32eb803b48628676a4a47f761d1c4a296ca681443
+size 59676
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_11_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_11_de.png
index 919db5a517..1a703a0bc5 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_11_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_11_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:984b4394d1fc285f67c89ef315639ec7f3ab53468c74cc19672fd00662ed1a1d
-size 47416
+oid sha256:4b63853b9ec8d77118eee52fd499ed17d7afd9896e1e57342aee625fba052d99
+size 47424
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_12_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_12_de.png
index 45f7e655f4..e2f3754445 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_12_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_12_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:81a4ce28b416998dfaa9de103264781a8db0f2ebd6d9db2f4218890dfcb7d556
-size 57217
+oid sha256:20dd9f5239d21b5c04a8a7737b328d6d588b6cde386333ae8e47c2029ff9d696
+size 57248
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_13_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_13_de.png
index 535471d42d..775dae038b 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_13_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_13_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1f2850fcfae3846f0a3294cd8bd964a72a6d9f4d1193c45fea9f295938307624
-size 60529
+oid sha256:bec5c5334d601f42f0aa84c389f02931b174711cb5cc22291ff43790f87efa66
+size 60559
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_1_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_1_de.png
index 4bc5b7178e..956c77cb66 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_1_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8790c9983f05b0083eb1ab6b2ac4bf5571367b2a3bbf52905276f903638bf957
-size 56377
+oid sha256:42959aa09b8a7942a0081493760aa6ef9b1ab4507f60d8cbe3faf8aecfec906a
+size 56404
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_2_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_2_de.png
index 9cf4b796b1..d9a35aff1b 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_2_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1949dbb68c40fcac4c493932f4daf5908f1b4e9b6793cb692f74c14fb910e3b7
-size 28235
+oid sha256:a64c1a71b6d93f91243cf368c0b50cc319afe0846f1ec5eca41358015ac61dc3
+size 41944
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 54977b01db..f99d9c7d6d 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:20ccb7fd369ffa37d564ef301ca4106db1387b4eae866761cca668175a72f9af
-size 60387
+oid sha256:d529b4fd0e5b5ba965bfcd6ebaebc3a00e85d06d56ece90e00c9a64bcef4d966
+size 60422
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_4_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_4_de.png
index fc447e7bb3..b062adb52e 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_4_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:842e250a9bc4bfe5243ef0f0e0a20cdc98eea767d9d3fe76083c8b092b3b291e
-size 55147
+oid sha256:402a075bbf31051664f6319cdf0ceab966a600a093e936cbc570a21c6a535aee
+size 55155
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_5_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_5_de.png
index 5c5da4b92b..f165e39c7f 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_5_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e65df5cdf0c4d4acc29eff05bf4f58dff29a84e6bd4df67d55ad4cb347c5b3e6
-size 55033
+oid sha256:0c9dc70010d54f8d7cdf55a0f16786c6eada25dd39dd9638647943e0352fddfb
+size 55060
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_6_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_6_de.png
index 01ec2bbd28..5b2f14628f 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_6_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ab9d8e6c8e7739433ff493bd2c932723d92c97d56811f0ffbe3260984484c9d8
-size 54305
+oid sha256:cd01d8df9ff4ee80c105eb963e442102b4d33eb18964a2018d4b8c3752556fca
+size 54296
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_7_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_7_de.png
index e4fa48be20..3a32bad63a 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_7_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:edba9deac51da0ca11d37786c01efaf6dae26a9c63b9e415c896cc755c4b4941
-size 59011
+oid sha256:b38710c1aebcd80e145fdea1a9de88a2ab98b3801dd9e7c9d45d9782d0f8bc98
+size 59018
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_8_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_8_de.png
index 6dd24e1861..ce36f1ffb6 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_8_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_8_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fe4115ca14777a2aeb5fa0d91d7c3cba52422a30ff5cdee5ad8b53a9f1216708
-size 42001
+oid sha256:237442ad923217722973bc8a43c92714151a8ba93af34af4ed77b845cf8a8e02
+size 42009
diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_9_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_9_de.png
index 6a7980e7d2..293b586bbf 100644
--- a/screenshots/de/features.messages.impl_MessagesView_Day_9_de.png
+++ b/screenshots/de/features.messages.impl_MessagesView_Day_9_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:21559e496a298d43143b2f7a2e8a3f113e2c9ef71c80142cdfdd5f3c3ca7d2de
-size 41952
+oid sha256:57e34f2f89e5817630caf892882f15b3328858f968bdf4285ee76c1943a22b28
+size 41960
diff --git a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_0_de.png b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_0_de.png
index bccb55156c..427e5ca89f 100644
--- a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_0_de.png
+++ b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5e3314ad0e483fa774ae08df223ecc1703316c8a8232db79612a1119934189cc
-size 304905
+oid sha256:a1ce9cdff91b1779c8012cbb5a3d97fa3d3a2f234137504e649401a55f18bb79
+size 315251
diff --git a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_1_de.png b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_1_de.png
index 039432156b..f633bfa019 100644
--- a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_1_de.png
+++ b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:782b80608d7e547255660dde27f4a1948e93634989cda7000083bd62195219f3
-size 300088
+oid sha256:139052189bb9fd0925057ca6f24c153e2b74f2152bd96176cbf748acdc32657a
+size 310709
diff --git a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_2_de.png b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_2_de.png
index 72088c0aed..473d54b929 100644
--- a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_2_de.png
+++ b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60a2ee51dc98e5717ad304a8ecb7dc22ff8fd9cff46bca8d721751c8039a11ec
-size 303090
+oid sha256:eb3ef7da385418584ceae0bf4f8f2b66f2342b5f924118976807a89a974d69d0
+size 313709
diff --git a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_3_de.png b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_3_de.png
index 180777be68..45cc609343 100644
--- a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_3_de.png
+++ b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e013ee7d883dba5c3819ac348e7dcf9a366d7f794d97457787ceb8708aa13c02
-size 297848
+oid sha256:5cf4084319b5af180e18fe7ef56be0f02e28007da76b2a575300d40c809d9d22
+size 308069
diff --git a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_4_de.png b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_4_de.png
index a0d61c41c5..9dc1afd109 100644
--- a/screenshots/de/features.onboarding.impl_OnBoardingView_Day_4_de.png
+++ b/screenshots/de/features.onboarding.impl_OnBoardingView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e177723bf22ad7f1cddd55486301a07fc0c7e50738600810566c0d6c250a6861
-size 305677
+oid sha256:286c322d0b255ff738fbd8f1985582e8e7d9d88e7918054bf2fd47e184490b60
+size 316029
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_0_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_0_de.png
index 96d601f107..b4c4781666 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_0_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:156d8e06283c17e4aaff906d29433e377b0c03b381d28b1df941e45fc2accd5f
-size 39479
+oid sha256:fa1963b726c746016db7ef50f332ea1ad9bf16e2571a506462ef992a5b02292c
+size 39394
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_1_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_1_de.png
index 749b82cf8e..0c361d7b90 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_1_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b9f6bc6f7f3c6f19b4135a113a4b39db055e79567bd5d8d7e1dc3e00d075c54f
-size 42412
+oid sha256:ad923904e450ff20c9eb3b922569b4411e77ada904220aa0696729957617f0fc
+size 42235
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_2_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_2_de.png
index b78406a7e1..0a65b74e4b 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_2_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5b000235066669c2cde16134b286bd86a7f7b4b887b52592473d78024e50c4dc
-size 40385
+oid sha256:99e15bde7039b8c0abe24ff3e70d1f6703440c9209d94dd9914337aa2009acdf
+size 41957
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_3_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_3_de.png
index 07cf877a02..38948a8d3f 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_3_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ea8613356550b4d22cb0dfe18474296a27517d7725fd166c4a59bd148b3e7ac2
-size 50162
+oid sha256:e74b1bd8782053a2cae360f4adb80fc915b500d2aadb4df477ec7ebd48adb1fa
+size 49758
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_4_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_4_de.png
index 5590d2b66c..9fa65da903 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_4_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:37964899962d3dbf129b411ee51ed2fb553663642b5d40109f4139be69ff1c10
-size 28186
+oid sha256:0d7d9291ccb6140f7ce7773a2392b4e0be77c0260e7d505c9cd3486658b90b0a
+size 27797
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_5_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_5_de.png
index 9fbb5a8644..25343cc444 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_5_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6e775880d1ba1a9781bc6dfcf66ca19bb086b833c51606c2a386d1b1a4660183
-size 118841
+oid sha256:5d8c229a1808b31425794732f06dce68f48b30bd1adc88d5574c2c88fdc87cf2
+size 118546
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_6_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_6_de.png
index dc2c5ada81..2cef8a9693 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_6_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2125807c4479557a3ea3f882dcaa7923be9b75d7b93fc75376ce359a1f6dfd80
-size 43190
+oid sha256:2b37aaed9c0795ad7475df9a416b0481123677556d9a2d99cf2080b1225d3b8a
+size 43141
diff --git a/screenshots/de/features.poll.impl.create_CreatePollView_Day_7_de.png b/screenshots/de/features.poll.impl.create_CreatePollView_Day_7_de.png
index 5ea0f068ef..706d8369fc 100644
--- a/screenshots/de/features.poll.impl.create_CreatePollView_Day_7_de.png
+++ b/screenshots/de/features.poll.impl.create_CreatePollView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f00fef67e441ef43ef4a9e951c643fb3404d189f9c5a7f6dceb8f4971553f409
-size 41962
+oid sha256:2ae34e12dfec9330bcdc26c89c17bf1863d0df6819e3ac73b53f98ed817aa90a
+size 42057
diff --git a/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_4_de.png b/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_4_de.png
index c7d37704d5..7e1c58bcad 100644
--- a/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_4_de.png
+++ b/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a70121e2be10cc4038de039cd072b9829aea89cee28192b0cb3645e782367a2c
-size 62689
+oid sha256:ce7c8dc17cc79d0cdac24211ec74222fb2dbac3b8bcbf030cf7b51ee98d5d0e9
+size 62653
diff --git a/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_5_de.png b/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_5_de.png
index 6e274479e8..87e1c644a5 100644
--- a/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_5_de.png
+++ b/screenshots/de/features.preferences.impl.blockedusers_BlockedUsersView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:325a9fde4b0fb803bb9112916e9d549fd9d725c17a09983db87c3a0a03725a10
-size 61731
+oid sha256:3a42b95e58b01e6e787e4fd763ccc359d39194f90af697dbd6189814ebcd63bf
+size 61736
diff --git a/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_de.png b/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_de.png
index 97bfaab334..b82d2d34a9 100644
--- a/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_de.png
+++ b/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0b31bd23d6c286b7574591d1a569556539ecf147f6e9c9f92e620a6874c76968
-size 22166
+oid sha256:1abd9d8600f32dc471e7befaec73fef7bd67234532b6dbcbfd4e94daec927fe5
+size 22152
diff --git a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_0_de.png b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_0_de.png
index be208daed2..32700b0b7e 100644
--- a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_0_de.png
+++ b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7d95761a3a054c70edd8437808f9fa2568119ec9d0047f5f167002374544f990
-size 78750
+oid sha256:c9f41b578db2e8e8f2e3ba3f6f65e20d7e3225510bdcbf5d1ebe9e68bee8290a
+size 79647
diff --git a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_1_de.png b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_1_de.png
index ebc0c70eef..faa108a66b 100644
--- a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_1_de.png
+++ b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6912c62ece567a4721a3594f98431127ae2a1d8162ca9039d1b1c354bc9794af
-size 85935
+oid sha256:e4e08e2cd8817acc2a6fe9dc65d39134f94a2f16962ac0ef7fcb3757d05c8f5f
+size 98899
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 5cac96432c..7167008af8 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:658a3e3c66463725fc966e6edfd7f0a64ec75f7b3eb994770fac70bd2e084130
-size 71219
+oid sha256:4a43926c96a5cfefe179091e79083ea3148b4f6d66c4f8356168ce8ba165d6a1
+size 75125
diff --git a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_3_de.png b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_3_de.png
index be208daed2..32700b0b7e 100644
--- a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_3_de.png
+++ b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7d95761a3a054c70edd8437808f9fa2568119ec9d0047f5f167002374544f990
-size 78750
+oid sha256:c9f41b578db2e8e8f2e3ba3f6f65e20d7e3225510bdcbf5d1ebe9e68bee8290a
+size 79647
diff --git a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_4_de.png b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_4_de.png
index 0c9fc38556..16d57a7b8e 100644
--- a/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_4_de.png
+++ b/screenshots/de/features.rageshake.impl.bugreport_BugReportView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f82fa03d1783e0aad32405dfec262ffded447effe1a71b29f271c376b2cabf30
-size 59148
+oid sha256:b59a91b1bc68d18b5c431968f67fbd64d5b95e2b06c5a026a6dc9b6f154ebcf1
+size 56975
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_de.png
index e58268a587..dfc9a5e094 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:33b0034e6fef702fe7dae8b63104302bf93bc8667d936f9d58b4a0591bddce8f
-size 29812
+oid sha256:6d4a68eb39431cdcccd8b35abaf82b5cd830ddce1fa1d1af5764f2c67248a16b
+size 29718
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_de.png
index 0f283d8add..4e184fbf08 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d5889aba8d581b97a4f2b39ed50de836a72306c021d9f21c4597ffa6ba700008
-size 24073
+oid sha256:5634d1088411e2e3204b40c8098fe9f0dde28847f33a7002aaf017791472cc3b
+size 24039
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_de.png
index 0f8887251d..ffa0082d1d 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9dbb897879a701d315d141e2df7c852929b6ad68adc0b1daa1271da867592051
-size 31065
+oid sha256:8bda53ae653315c654003c6b441bff6c35ddb1fa5bbd2233e1a630f7a74fc6a9
+size 30885
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_de.png
index 509d86f03a..4918518fe3 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e2a22eeec2407f74f1cce5e2c421d646551544e2a3c3c011b46a840682f3c207
-size 55445
+oid sha256:39c4b72f7469c06e7086ce40340cfa4f326e6ee845420e34b8dd4c98f8434c29
+size 55361
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_de.png
index c5caef02f1..fa82187fd4 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:569b5b66c85619133923a40d360877ff78dd225780e5de2bc4dce2abb4d679d6
-size 29430
+oid sha256:322609531df2bcf28a78fe21a0180658a07ac754128d611b8bca0a201731e77d
+size 29827
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_de.png
index 3b7b13726f..aab749e94e 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1adc44c43ffed315fa58233ef34cf70b3c07a6d022ba2e5cac1fc7c3e6effd11
-size 29564
+oid sha256:2c07aa7a1aa31b8866bd1981bee11476cd1daa32d02b2f7b6aa368b2fdd3c3e2
+size 29868
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_de.png
index b4d6fe521a..13ff5b6524 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0b6091c1821671f7c9194fec2ab513468674e6d83d76689e8f93276cb701f7a0
-size 26291
+oid sha256:e3d4acb84c68ac6147a8255e1897e0e658086982d9b732d421d3d52fe0ea0f19
+size 27020
diff --git a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_de.png b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_de.png
index 9d5a985108..67a642a376 100644
--- a/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_de.png
+++ b/screenshots/de/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a62dbecaea9cadbc7d72486a7e961af0916e35c73ca0f0f679234ef92b32dd0c
-size 29014
+oid sha256:65952680e6f2c3eb2931c1d7026cfae0a1aad8426cda42477838425795182d23
+size 29512
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_de.png
index 0c26cb7e88..71ca874985 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3e0a27956c38bbb9ed09bdad34a3f7afdf56c6c4005123374a66339393b3d3c6
-size 20021
+oid sha256:13b9a41b5649f3b94a11570d0056f0c0efe1d6b6ec606b5ccd9373de34fb2999
+size 19916
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_de.png
index 1b82afcb01..ac0e8fe389 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bc9f37d6d0cdaac75b6714993e7aef03a71f6d14d18025012b140097cdf6a4ea
-size 24378
+oid sha256:31922c2250e5f5c767aa24be1dba0a16e9ec135fb56670383de9badeb069056d
+size 24304
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_de.png
index 043e3ae9a1..a800a18ee4 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2953bb11c8531aa7ce75777ce272bdca2cc987958b1ed80aa252e318858fe0b4
-size 30098
+oid sha256:9bba9b4a73d8a2ff98223d2054cc18c64b6b8c4064d09fd86b3a05d9535f956f
+size 30026
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_de.png
index 2a18017b3d..b9df84aae0 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:296db138a27cd8a6dc2d3a22e282bc7cd26526fb316bee11e55d13d36fcc6d3e
-size 9634
+oid sha256:d7ed8b8a8190f00ed028a901e23abaf6497b91718afd3f64af94e1d75e9562ff
+size 9601
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_de.png
index 3b03e686a9..46bcee2f62 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bab22bdfcacbc1cfe8d795daf1e581a52b4251bef121bf676cf09f86ff0fa267
-size 9944
+oid sha256:a8a335d4f61371a5ba7f609446ba93c80b53ce06ca47aa011ab89ef43d3cfce3
+size 9926
diff --git a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_de.png b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_de.png
index 7aa77f0bc7..e15d3745bb 100644
--- a/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_de.png
+++ b/screenshots/de/features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d7ae7cf6e62cd6e65c3e9b5b8ad82d12595dc1c49b63e5128b6554510ac3f3f4
-size 9282
+oid sha256:cc604387773fc50481303c325a57813f354ea14724a2f0ea2d46f059ef9e5204
+size 9294
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 474e92e1df..2fa5bd13f9 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:d345bc790f18a8f55337fe9a7b360741fc94d03ea135ff0be8377602a35dc510
-size 68891
+oid sha256:8246376167a0ec50efc38d493304380a6c3b74d472d44525001a75f4ca6b5ead
+size 68844
diff --git a/screenshots/de/features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_de.png b/screenshots/de/features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_de.png
index 1d473083b5..0fdf484df4 100644
--- a/screenshots/de/features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_de.png
+++ b/screenshots/de/features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:12e8e7c4db1884f8b5aeadb5f8ff99eddc757cd0a51a39e983f90b0ab706889d
-size 50139
+oid sha256:a87c123ddd3fc5ee55217df2f1425da7c4f7bde155e9dc3c0547584c6a8c8252
+size 63370
diff --git a/screenshots/de/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_de.png b/screenshots/de/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_de.png
index 8671f6cd2e..1c28385f83 100644
--- a/screenshots/de/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_de.png
+++ b/screenshots/de/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03135fdbce4eb0502ff8a82a72fa88ae34420f1b21bcfcb9659ddd862486647d
-size 13512
+oid sha256:54655f494d57e3dbbcb8518112ba0b1385c77e9f60eaa35353316d6b6a5530c7
+size 13584
diff --git a/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_de.png b/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_de.png
index a0884f8eb1..81502aa260 100644
--- a/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_de.png
+++ b/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:babba9ba21126c58bc531cffb980c668f8d916b1bcef48d1a677d25a2ff8c7c3
-size 37232
+oid sha256:4da31f61c7fd79c994b703d160a31f046590ca144100dd5ad50f522af4a8d6b8
+size 40716
diff --git a/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_de.png b/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_de.png
index a9c242d889..c74619a286 100644
--- a/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_de.png
+++ b/screenshots/de/features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3952863400d28d54b5f1ec8b2b0b853fe091b7ead675a86a35e7f4d26649d3dc
-size 36960
+oid sha256:f7ca367d0e4117fa458470bb4230adebd3c08547a63ae54eaafb09e6522cb0e9
+size 40435
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_0_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_0_de.png
index 419c761e4a..ad0ae2477d 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_0_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b3820eb3edb99ba7cf5d4efb36aefc42e8a5e9f173113f0dd63c253559d50cbb
-size 80825
+oid sha256:9a4d458d8bd9c217329d423bcdb83d745aa37346fe98f2d941c6533eb492c7d3
+size 84051
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_10_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_10_de.png
index daf7ef9507..86b5635b76 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_10_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_10_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:73a300a4dc220986afd1e6442795cb3299bbd29fa94d59674e7d743a491964cb
-size 105285
+oid sha256:b9b4cf9ae0b318051c5ce21092bfc7a0941e31fd37756ac93983b69e25111abe
+size 108428
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_1_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_1_de.png
index 419c761e4a..ad0ae2477d 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_1_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b3820eb3edb99ba7cf5d4efb36aefc42e8a5e9f173113f0dd63c253559d50cbb
-size 80825
+oid sha256:9a4d458d8bd9c217329d423bcdb83d745aa37346fe98f2d941c6533eb492c7d3
+size 84051
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_2_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_2_de.png
index 1de8b6436e..0ba5621fcc 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_2_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b996a6b2fd92cdaf84456aa6dcb34587c438bc6f19bb3aeaf9bf9f77da6256c3
-size 80782
+oid sha256:fbdd2a0855033bf98edb0f7cc97240f6048e5b1ca8ada5b033fee7c10dcad350
+size 83904
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_3_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_3_de.png
index 33fe3b7863..ab9416653f 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_3_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fb27462e5ab4b9055e213229b84b1c063dd24d1d51f762fb770f22c2f956100c
-size 24482
+oid sha256:2683355e9289a1dfed4f54ce164b3e0df2c4ff968f0433cee4bf91a2c9dae14b
+size 65068
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_4_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_4_de.png
index 3be06aa99a..c60aec74f8 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_4_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:845de6292a275470cc0402f1d441c2e6e85146c0be316a45625d05b355fccb01
-size 23822
+oid sha256:8244f9f4651bc4df29d95773a2212a980ce3cea4d75c990b3c4398614da904c6
+size 64446
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_5_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_5_de.png
index 3964f4d421..a54822ebc6 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_5_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:52c92687be8874450abe0d1b7462593a05c09ec76c288f2f343b9caa045a0c28
-size 21924
+oid sha256:beaf1ad8b23db2e7f29695cca9e0c8582df84169891b1208521ebc77ce7bd0f8
+size 62643
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_6_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_6_de.png
index 6dd144d388..af24f2ab98 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_6_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ce83868d093a117ba85a1e714f4eac685b30ff6b2f80a3b2b0ca626f5f2bad49
-size 102687
+oid sha256:6d6e3ce003b14c281dbd13ee9d2f3c934993393d7919345db877c5003f92f346
+size 105899
diff --git a/screenshots/de/features.roomlist.impl_RoomListView_Day_7_de.png b/screenshots/de/features.roomlist.impl_RoomListView_Day_7_de.png
index c66bf0bf25..310e7c70f6 100644
--- a/screenshots/de/features.roomlist.impl_RoomListView_Day_7_de.png
+++ b/screenshots/de/features.roomlist.impl_RoomListView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:66c17536588f2fbccf1f452ae9441e3da338006ab2c9cf6679cb0ff28ef4bea5
-size 49677
+oid sha256:568514f2eb3a842032d3564554cf609c3028b174d80cc28d10116d6c45cdd774
+size 49717
diff --git a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_de.png b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_de.png
index 7cd3ce948d..dd0e572ffd 100644
--- a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_de.png
+++ b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6314eeda5c45213d44b8fd97069c49f6a3d4b690365aa59c1b30aeb0d218304e
-size 38783
+oid sha256:9779f1715cad0e14921e3a3e6a9bd681e604f3d4eba74bc3184a9b0a558a0051
+size 38538
diff --git a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_de.png b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_de.png
index a9382b2613..4ee3c0861a 100644
--- a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_de.png
+++ b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f091402b301654b498066f938bf7f4e307b2fa6ac6f22e7e479169c258ceeaca
-size 49806
+oid sha256:4892294712b7550c0e7eb281bd167f57f7494cd150e310773ce128a927bfc7d0
+size 48197
diff --git a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_de.png b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_de.png
index dfadd20378..b4dbdff9fd 100644
--- a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_de.png
+++ b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:22be75f1c0fb9ae4f73149c90d4c0f537be304c8ce754c360a07322f697324b2
-size 48137
+oid sha256:b49405296483544738d2976b2e11475693a7c6929a9e29fef29675ce9a4d1e7c
+size 48418
diff --git a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_de.png b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_de.png
index c8e784643f..4bd059258f 100644
--- a/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_de.png
+++ b/screenshots/de/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:963b54459978896792b77dcd1b4ad1394eb45306b616894d53afb9fd15e1ec3b
-size 40839
+oid sha256:8e2a91b44b95d1e3b496338d779748e2bed96f28b49579e7b830b4ae386fd2e8
+size 38458
diff --git a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_de.png b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_de.png
index 40d0568abd..1328b1ef4d 100644
--- a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_de.png
+++ b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a0f90507b2f8f36a7b831083215d56307d96d38f9a163924c497fd7919c27ccd
-size 30669
+oid sha256:37349901ece92abe0270a8e0215228a4b0264e4b7dbc4eeb84c70d95d9bf3b8f
+size 30648
diff --git a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_de.png b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_de.png
index 989bb61a9f..9ca131aad6 100644
--- a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_de.png
+++ b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:78b1399e8747f172fa676e2d69ebf3a34b1af345bcabf433a4b3b5df20cb095e
-size 29713
+oid sha256:ca8b644688135b0373307b3ff366a279e392de04b52241327f9be4209c2a72cb
+size 29686
diff --git a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_de.png b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_de.png
index 989bb61a9f..9ca131aad6 100644
--- a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_de.png
+++ b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:78b1399e8747f172fa676e2d69ebf3a34b1af345bcabf433a4b3b5df20cb095e
-size 29713
+oid sha256:ca8b644688135b0373307b3ff366a279e392de04b52241327f9be4209c2a72cb
+size 29686
diff --git a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_de.png b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_de.png
index 53550dd39b..716cbe05b0 100644
--- a/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_de.png
+++ b/screenshots/de/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f9276ceb97ea6c6b4ff219976c73a93440b1fb23af6a9229bbcd6d636df77953
-size 44495
+oid sha256:41f22d7dc92f856b780a5c11f1d31c982131a5bbfdd85562eaa9866cfd611282
+size 44582
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_de.png
index c6cdc771ff..49c0d7f6e8 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:423cce16225a8f6666dc737ffae65e3f90388042ddb934f5fc2e3d35879247bf
-size 27425
+oid sha256:8a7ea8c219d7d75cad52646affe980ae477dfa33ca065eb10df1b2da5615de45
+size 27463
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_de.png
index 7ace443442..ca3893ec78 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:124bf4736ee49b3d2210c8c8e31256f8d13d423655f2239a5b8584f0fc6981bb
-size 29786
+oid sha256:27334cd7e92c6a3ad7c5cc6ab6d9af41b3424356ee8948a665d2a09d73ca967f
+size 28834
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_de.png
index d6d966bd8f..764d47e6c1 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:86a3acc49761cf4fd008bcf17bde919d2d9ed1e7a7228cb7638543f3562c72de
-size 28252
+oid sha256:5636f99a8f010f97c16f91e42b339dbf96664d4e616dbdddce15af45dbce8d1c
+size 28616
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_de.png
index 7ace443442..ca3893ec78 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:124bf4736ee49b3d2210c8c8e31256f8d13d423655f2239a5b8584f0fc6981bb
-size 29786
+oid sha256:27334cd7e92c6a3ad7c5cc6ab6d9af41b3424356ee8948a665d2a09d73ca967f
+size 28834
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_de.png
index 4f64df1ea0..237e5a7b6a 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e11301b9e87e2c4d3736f798be0f72d21072fe69fca663c6cfe5f5ad98b96fc4
-size 25364
+oid sha256:98060280deae5e59b8ba5f707dbfe0cc429f22d17aab6a026d2fc5951a0e3c6d
+size 24225
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_de.png
index 15c6851cd3..8d4f6596fd 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a04c2f10e6fbe6a944b7083974689202c3d2a469b359ec5fa007fbdf87376c32
-size 24243
+oid sha256:cb944176e84eb2b4938d0afd508ef0878ac1b1c75cf13f24d7eca71407c0be89
+size 24280
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_de.png
index 2271945662..b41f68a454 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b287c1e2d25cb9fe4b1c38c373cc218255720c4b30c68be2e43f01706acb4b89
-size 27159
+oid sha256:035ffbead8e5e6a8485e1cdec1e4f340c3b8ef54e86d0dcd576ac52886ae464a
+size 27194
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_de.png
index 2271945662..b41f68a454 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b287c1e2d25cb9fe4b1c38c373cc218255720c4b30c68be2e43f01706acb4b89
-size 27159
+oid sha256:035ffbead8e5e6a8485e1cdec1e4f340c3b8ef54e86d0dcd576ac52886ae464a
+size 27194
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_de.png
index c6cdc771ff..49c0d7f6e8 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:423cce16225a8f6666dc737ffae65e3f90388042ddb934f5fc2e3d35879247bf
-size 27425
+oid sha256:8a7ea8c219d7d75cad52646affe980ae477dfa33ca065eb10df1b2da5615de45
+size 27463
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_de.png
index 15c6851cd3..8d4f6596fd 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a04c2f10e6fbe6a944b7083974689202c3d2a469b359ec5fa007fbdf87376c32
-size 24243
+oid sha256:cb944176e84eb2b4938d0afd508ef0878ac1b1c75cf13f24d7eca71407c0be89
+size 24280
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_de.png
index 2271945662..b41f68a454 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b287c1e2d25cb9fe4b1c38c373cc218255720c4b30c68be2e43f01706acb4b89
-size 27159
+oid sha256:035ffbead8e5e6a8485e1cdec1e4f340c3b8ef54e86d0dcd576ac52886ae464a
+size 27194
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_de.png
index 2271945662..b41f68a454 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b287c1e2d25cb9fe4b1c38c373cc218255720c4b30c68be2e43f01706acb4b89
-size 27159
+oid sha256:035ffbead8e5e6a8485e1cdec1e4f340c3b8ef54e86d0dcd576ac52886ae464a
+size 27194
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_de.png
index 83f84c09b6..974afa7061 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:853cf30970e03144e574ea85d7a0289bd264d48f43b5f95961d241984ab979b8
-size 20302
+oid sha256:1a2de493b5cba8cb705d74a4175c9102f961a4bf120b723b6fd862a57cd13a58
+size 20304
diff --git a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_de.png b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_de.png
index 57fe1444ea..a67c0639fe 100644
--- a/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_de.png
+++ b/screenshots/de/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:849b3fba773d43256501e3cd8bbe40397f509fe18aea47a1895785950ba3acfb
-size 19968
+oid sha256:f8c9c08922408e5711bf63204cf9e26280109cdfdee29d1081fb91925ec40a2a
+size 20679
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_de.png
index 0d3cbd4a13..50fe34193c 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7d017296e712146b37b04ad0f10027a5325c3bfbb8d0085fb5ea9a31858c575f
-size 64991
+oid sha256:ec1ce0a2ee199839e7a29f9ec41cf10c0c922c1516ecc5bffa2ec24abd55f62b
+size 65037
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_de.png
index e84d80baf7..2fa70f2c09 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:02f5ed000cf42a4a3e924372ed1c1d7adfef331ab3ae9b28e3c1e720b9c34ebd
-size 61468
+oid sha256:c9274f47c16777317e8218ffe74f6e084dfc7a9112d5b46f2be7c480ef41af88
+size 61516
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_de.png
index ef7a80b428..1d60e19040 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f783499a1cc87048758819cb79a191bdedce909e99498f6fdcab5bf5ae2e80f2
-size 64758
+oid sha256:91c28ce4fd47b06d4a20070ec364ce7bcd5b53d6364903eded573f72e07c0f71
+size 65630
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_de.png
index ef7a80b428..1d60e19040 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f783499a1cc87048758819cb79a191bdedce909e99498f6fdcab5bf5ae2e80f2
-size 64758
+oid sha256:91c28ce4fd47b06d4a20070ec364ce7bcd5b53d6364903eded573f72e07c0f71
+size 65630
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_de.png
index 441e2f883c..60f1565f63 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bb5b73df203519ae4f05dafb864ff17c4bbe32d8f4e61cb8402a9f17ec492482
-size 54815
+oid sha256:79ed93b6c6c63fa4745462088834d448f7a868354bfdf9e749afa5f473439fb5
+size 55477
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_de.png
index 1c36b780aa..6be838cbca 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e4a5c31371cd02e16f1db063ff7e3bee34f57706431fd5ecd4d380ee76176f88
-size 70014
+oid sha256:be88a4b4c469dee0cad669ec92370f1f76aaea79a899fd38bb3c7277cfc03a31
+size 69951
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_de.png
index 9874fb4693..f5ff7322b0 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6f1ba73459572271b9ee1b9a75b3e8d158fe6198e84f776057f4be7034579ef8
-size 66710
+oid sha256:78e49c4ae78ec14430b2397b5bdde5d26bc97bec3f4705fc69c605c8eaa1ade5
+size 66631
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_de.png
index ef7a80b428..1d60e19040 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f783499a1cc87048758819cb79a191bdedce909e99498f6fdcab5bf5ae2e80f2
-size 64758
+oid sha256:91c28ce4fd47b06d4a20070ec364ce7bcd5b53d6364903eded573f72e07c0f71
+size 65630
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_de.png
index ef7a80b428..1d60e19040 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f783499a1cc87048758819cb79a191bdedce909e99498f6fdcab5bf5ae2e80f2
-size 64758
+oid sha256:91c28ce4fd47b06d4a20070ec364ce7bcd5b53d6364903eded573f72e07c0f71
+size 65630
diff --git a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_de.png b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_de.png
index 441e2f883c..60f1565f63 100644
--- a/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_de.png
+++ b/screenshots/de/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bb5b73df203519ae4f05dafb864ff17c4bbe32d8f4e61cb8402a9f17ec492482
-size 54815
+oid sha256:79ed93b6c6c63fa4745462088834d448f7a868354bfdf9e749afa5f473439fb5
+size 55477
diff --git a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_1_de.png b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_1_de.png
index 8950dc9e36..11bcf52ef7 100644
--- a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_1_de.png
+++ b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8693473e2f9f8f0b18585645745ee113b94b0a52d2b62399f8e3d9e54df22ecd
-size 41774
+oid sha256:b210b2c570b1128c5b4992997fb3a64122572357796d19c005003e0e814e71d3
+size 41725
diff --git a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_3_de.png b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_3_de.png
index e4512a48cf..9c6279482a 100644
--- a/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_3_de.png
+++ b/screenshots/de/features.verifysession.impl.incoming_IncomingVerificationView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5aec87f10dae7b22d5eb88fcc4127557247fd191ca53e74ac3ffc8bf58b3e270
-size 50002
+oid sha256:e7f9d341ab004ccc1e9292984b6337d22ec5a75b43ff8c603d2eb7107883c941
+size 49983
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 63832b54a0..1bf33aa875 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:a0eb079a6b91d1862d95f2ef3b99021b5185f66a5677eeb9fef6add9f6a6d25b
-size 30001
+oid sha256:3079fb1d9f25f6ca86a7c41e7df95a7c1593019e3f27594e004e9be874e67669
+size 24474
diff --git a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_de.png b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_de.png
new file mode 100644
index 0000000000..c0db6b7b62
--- /dev/null
+++ b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d570026d4981c7cd450ee79d6035eb6f421b3a8ad811f89fb204299d6eb393f
+size 31462
diff --git a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_de.png b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_de.png
index 0792dcc611..1ddaf40a98 100644
--- a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_de.png
+++ b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:46f929df2f058524cb668812c092f55157c6e795259127ca53348866d946ce76
-size 27390
+oid sha256:fa0fe810e2cbffb69fd9cb46c3e3040869064458f5a9291bf5164fb0cb4ddcd0
+size 30215
diff --git a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_de.png b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_de.png
index 2ea5187d74..9c6279482a 100644
--- a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_de.png
+++ b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cd35588a1e94a60a59f8fe452fe6dbd37be07daa4da7542711d2f4b063583741
-size 55024
+oid sha256:e7f9d341ab004ccc1e9292984b6337d22ec5a75b43ff8c603d2eb7107883c941
+size 49983
diff --git a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_de.png b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_de.png
index e3aa504f9f..5ba09ada53 100644
--- a/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_de.png
+++ b/screenshots/de/features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:699c420eb6a8840c262fc2abfb8950d317b88809373427081f7d0ae5636370c1
-size 35666
+oid sha256:9b55f2cb6999543cdd3cdc4f2bba2cb8cb238b94acbd05f889f25da8b43a8580
+size 24580
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime pickers_de.png
deleted file mode 100644
index 4930ce3e1a..0000000000
--- a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime pickers_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ed48dc7ebaf8ddc04802a6c11fa90a467295a09ce1b2643ef2d69a65db4761d6
-size 31092
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_de.png
new file mode 100644
index 0000000000..b1bb373b78
--- /dev/null
+++ b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26f21bdb866ee13fbcfd0edca7b57425bc14a79c878e31330ac41b375fd18222
+size 31092
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime pickers_de.png
deleted file mode 100644
index 1631785ce9..0000000000
--- a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime pickers_de.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b6c6c892f8099020766205760409a3698e28b6b1941bea45c7cd442dcb8b451c
-size 31576
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_de.png
new file mode 100644
index 0000000000..afc79d353a
--- /dev/null
+++ b/screenshots/de/libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_de.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efa139e3f0ab0c8978a5d22909ede6e3da4c5772ae9c3af578bbca824ccb1735
+size 31581
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_de.png
similarity index 100%
rename from screenshots/de/libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime pickers_de.png
rename to screenshots/de/libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_de.png
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_de.png
similarity index 100%
rename from screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime pickers_de.png
rename to screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_de.png
diff --git a/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime pickers_de.png b/screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_de.png
similarity index 100%
rename from screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime pickers_de.png
rename to screenshots/de/libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_de.png
diff --git a/screenshots/de/libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search views_de.png b/screenshots/de/libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search_views_de.png
similarity index 100%
rename from screenshots/de/libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search views_de.png
rename to screenshots/de/libraries.designsystem.theme.components_SearchBarActiveWithNoResults_Search_views_de.png
diff --git a/screenshots/de/libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_de.png b/screenshots/de/libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_de.png
index 556f994c0d..aecf7a8719 100644
--- a/screenshots/de/libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_de.png
+++ b/screenshots/de/libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_de.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:af72fa2028644925aa440a8b902ba8c941cf2a7512efae8b8dccc3e9d4203ab9
-size 14232
+oid sha256:e4014d1e0117e4753c37008ac468147bd075b3d6c337c1f84b5e3ba5b6a27339
+size 14182
diff --git a/screenshots/html/data.js b/screenshots/html/data.js
index 19d46e4d56..28e8eac593 100644
--- a/screenshots/html/data.js
+++ b/screenshots/html/data.js
@@ -1,59 +1,59 @@
// 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",20027,],
+["features.preferences.impl.about_AboutView_Day_0_en","features.preferences.impl.about_AboutView_Night_0_en",20042,],
["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",20027,],
-["features.invite.impl.response_AcceptDeclineInviteView_Day_2_en","features.invite.impl.response_AcceptDeclineInviteView_Night_2_en",20027,],
-["features.invite.impl.response_AcceptDeclineInviteView_Day_3_en","features.invite.impl.response_AcceptDeclineInviteView_Night_3_en",20027,],
-["features.invite.impl.response_AcceptDeclineInviteView_Day_4_en","features.invite.impl.response_AcceptDeclineInviteView_Night_4_en",20027,],
-["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20027,],
+["features.invite.impl.response_AcceptDeclineInviteView_Day_1_en","features.invite.impl.response_AcceptDeclineInviteView_Night_1_en",20042,],
+["features.invite.impl.response_AcceptDeclineInviteView_Day_2_en","features.invite.impl.response_AcceptDeclineInviteView_Night_2_en",20042,],
+["features.invite.impl.response_AcceptDeclineInviteView_Day_3_en","features.invite.impl.response_AcceptDeclineInviteView_Night_3_en",20042,],
+["features.invite.impl.response_AcceptDeclineInviteView_Day_4_en","features.invite.impl.response_AcceptDeclineInviteView_Night_4_en",20042,],
+["features.logout.impl_AccountDeactivationView_Day_0_en","features.logout.impl_AccountDeactivationView_Night_0_en",20042,],
["features.logout.impl_AccountDeactivationView_Day_1_en","features.logout.impl_AccountDeactivationView_Night_1_en",0,],
-["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20027,],
-["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20027,],
-["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20027,],
+["features.logout.impl_AccountDeactivationView_Day_2_en","features.logout.impl_AccountDeactivationView_Night_2_en",20042,],
+["features.logout.impl_AccountDeactivationView_Day_3_en","features.logout.impl_AccountDeactivationView_Night_3_en",20042,],
+["features.logout.impl_AccountDeactivationView_Day_4_en","features.logout.impl_AccountDeactivationView_Night_4_en",20042,],
["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",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20027,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_10_en","features.messages.impl.actionlist_ActionListViewContent_Night_10_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_11_en","features.messages.impl.actionlist_ActionListViewContent_Night_11_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_12_en","features.messages.impl.actionlist_ActionListViewContent_Night_12_en",20042,],
["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",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20027,],
-["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20027,],
-["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20027,],
-["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20027,],
-["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20027,],
-["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20027,],
-["features.preferences.impl.advanced_AdvancedSettingsView_Day_0_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_0_en",20027,],
-["features.preferences.impl.advanced_AdvancedSettingsView_Day_1_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_1_en",20027,],
-["features.preferences.impl.advanced_AdvancedSettingsView_Day_2_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_2_en",20027,],
-["features.preferences.impl.advanced_AdvancedSettingsView_Day_3_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_3_en",20027,],
-["features.preferences.impl.advanced_AdvancedSettingsView_Day_4_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_4_en",20031,],
-["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20027,],
-["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20027,],
-["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20027,],
-["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20027,],
-["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20027,],
-["services.apperror.impl_AppErrorView_Day_0_en","services.apperror.impl_AppErrorView_Night_0_en",20027,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_2_en","features.messages.impl.actionlist_ActionListViewContent_Night_2_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_3_en","features.messages.impl.actionlist_ActionListViewContent_Night_3_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_4_en","features.messages.impl.actionlist_ActionListViewContent_Night_4_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_5_en","features.messages.impl.actionlist_ActionListViewContent_Night_5_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_6_en","features.messages.impl.actionlist_ActionListViewContent_Night_6_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_7_en","features.messages.impl.actionlist_ActionListViewContent_Night_7_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_8_en","features.messages.impl.actionlist_ActionListViewContent_Night_8_en",20042,],
+["features.messages.impl.actionlist_ActionListViewContent_Day_9_en","features.messages.impl.actionlist_ActionListViewContent_Night_9_en",20042,],
+["features.createroom.impl.addpeople_AddPeopleView_Day_0_en","features.createroom.impl.addpeople_AddPeopleView_Night_0_en",20042,],
+["features.createroom.impl.addpeople_AddPeopleView_Day_1_en","features.createroom.impl.addpeople_AddPeopleView_Night_1_en",20042,],
+["features.createroom.impl.addpeople_AddPeopleView_Day_2_en","features.createroom.impl.addpeople_AddPeopleView_Night_2_en",20042,],
+["features.createroom.impl.addpeople_AddPeopleView_Day_3_en","features.createroom.impl.addpeople_AddPeopleView_Night_3_en",20042,],
+["features.preferences.impl.advanced_AdvancedSettingsView_Day_0_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_0_en",20042,],
+["features.preferences.impl.advanced_AdvancedSettingsView_Day_1_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_1_en",20042,],
+["features.preferences.impl.advanced_AdvancedSettingsView_Day_2_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_2_en",20042,],
+["features.preferences.impl.advanced_AdvancedSettingsView_Day_3_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_3_en",20042,],
+["features.preferences.impl.advanced_AdvancedSettingsView_Day_4_en","features.preferences.impl.advanced_AdvancedSettingsView_Night_4_en",20042,],
+["libraries.designsystem.components.dialogs_AlertDialogContent_Dialogs_en","",20042,],
+["libraries.designsystem.components.dialogs_AlertDialog_Day_0_en","libraries.designsystem.components.dialogs_AlertDialog_Night_0_en",20042,],
+["features.analytics.impl_AnalyticsOptInView_Day_0_en","features.analytics.impl_AnalyticsOptInView_Night_0_en",20042,],
+["features.analytics.api.preferences_AnalyticsPreferencesView_Day_0_en","features.analytics.api.preferences_AnalyticsPreferencesView_Night_0_en",20042,],
+["features.preferences.impl.analytics_AnalyticsSettingsView_Day_0_en","features.preferences.impl.analytics_AnalyticsSettingsView_Night_0_en",20042,],
+["services.apperror.impl_AppErrorView_Day_0_en","services.apperror.impl_AppErrorView_Night_0_en",20042,],
["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",20027,],
+["libraries.designsystem.components.async_AsyncActionView_Day_1_en","libraries.designsystem.components.async_AsyncActionView_Night_1_en",20042,],
["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",20027,],
+["libraries.designsystem.components.async_AsyncActionView_Day_3_en","libraries.designsystem.components.async_AsyncActionView_Night_3_en",20042,],
["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",20027,],
+["libraries.designsystem.components.async_AsyncFailure_Day_0_en","libraries.designsystem.components.async_AsyncFailure_Night_0_en",20042,],
["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",20027,],
+["features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Day_0_en","features.messages.impl.messagecomposer_AttachmentSourcePickerMenu_Night_0_en",20042,],
["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,],
@@ -63,11 +63,13 @@ 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","",20027,],
-["features.messages.impl.attachments.preview_AttachmentsView_1_en","",20027,],
-["features.messages.impl.attachments.preview_AttachmentsView_2_en","",20027,],
-["features.messages.impl.attachments.preview_AttachmentsView_3_en","",20027,],
-["libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_en","libraries.matrix.ui.components_AvatarActionBottomSheet_Night_0_en",20027,],
+["features.messages.impl.attachments.preview_AttachmentsView_0_en","",0,],
+["features.messages.impl.attachments.preview_AttachmentsView_1_en","",0,],
+["features.messages.impl.attachments.preview_AttachmentsView_2_en","",0,],
+["features.messages.impl.attachments.preview_AttachmentsView_3_en","",0,],
+["features.messages.impl.attachments.preview_AttachmentsView_4_en","",20042,],
+["features.messages.impl.attachments.preview_AttachmentsView_5_en","",20042,],
+["libraries.matrix.ui.components_AvatarActionBottomSheet_Day_0_en","libraries.matrix.ui.components_AvatarActionBottomSheet_Night_0_en",20042,],
["libraries.designsystem.components.avatar_Avatar_Avatars_0_en","",0,],
["libraries.designsystem.components.avatar_Avatar_Avatars_10_en","",0,],
["libraries.designsystem.components.avatar_Avatar_Avatars_11_en","",0,],
@@ -150,13 +152,13 @@ export const screenshots = [
["libraries.designsystem.components_Badge_Day_0_en","libraries.designsystem.components_Badge_Night_0_en",0,],
["libraries.designsystem.components_BigCheckmark_Day_0_en","libraries.designsystem.components_BigCheckmark_Night_0_en",0,],
["libraries.designsystem.components_BigIcon_Day_0_en","libraries.designsystem.components_BigIcon_Night_0_en",0,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_0_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_0_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20027,],
-["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20027,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_0_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_0_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_1_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_1_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_2_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_2_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_3_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_3_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_4_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_4_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_5_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_5_en",20042,],
+["features.preferences.impl.blockedusers_BlockedUsersView_Day_6_en","features.preferences.impl.blockedusers_BlockedUsersView_Night_6_en",20042,],
["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,],
@@ -167,117 +169,132 @@ 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",20027,],
-["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20027,],
-["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20027,],
-["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20027,],
-["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20027,],
+["features.rageshake.impl.bugreport_BugReportView_Day_0_en","features.rageshake.impl.bugreport_BugReportView_Night_0_en",20042,],
+["features.rageshake.impl.bugreport_BugReportView_Day_1_en","features.rageshake.impl.bugreport_BugReportView_Night_1_en",20042,],
+["features.rageshake.impl.bugreport_BugReportView_Day_2_en","features.rageshake.impl.bugreport_BugReportView_Night_2_en",20042,],
+["features.rageshake.impl.bugreport_BugReportView_Day_3_en","features.rageshake.impl.bugreport_BugReportView_Night_3_en",20042,],
+["features.rageshake.impl.bugreport_BugReportView_Day_4_en","features.rageshake.impl.bugreport_BugReportView_Night_4_en",20042,],
["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",20042,],
+["features.messages.impl.timeline.components_CallMenuItem_Day_3_en","features.messages.impl.timeline.components_CallMenuItem_Night_3_en",20042,],
+["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",20027,],
-["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20027,],
-["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20027,],
-["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20027,],
+["features.call.impl.ui_CallScreenView_Day_1_en","features.call.impl.ui_CallScreenView_Night_1_en",20042,],
+["features.call.impl.ui_CallScreenView_Day_2_en","features.call.impl.ui_CallScreenView_Night_2_en",20042,],
+["features.call.impl.ui_CallScreenView_Day_3_en","features.call.impl.ui_CallScreenView_Night_3_en",20042,],
+["features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Day_0_en","features.login.impl.screens.changeaccountprovider_ChangeAccountProviderView_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_10_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_10_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_1_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_1_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_2_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_2_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_3_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_3_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_4_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_4_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_5_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_5_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_6_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_6_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_7_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_7_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_8_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_8_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Day_9_en","features.roomdetails.impl.rolesandpermissions.changeroles_ChangeRolesView_Night_9_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_1_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_2_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_3_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_4_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_5_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions.permissions_ChangeRoomPermissionsView_Night_6_en",20042,],
["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",20027,],
-["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20027,],
+["features.login.impl.changeserver_ChangeServerView_Day_1_en","features.login.impl.changeserver_ChangeServerView_Night_1_en",20042,],
+["features.login.impl.changeserver_ChangeServerView_Day_2_en","features.login.impl.changeserver_ChangeServerView_Night_2_en",20042,],
["libraries.matrix.ui.components_CheckableResolvedUserRow_en","",0,],
-["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20027,],
+["libraries.matrix.ui.components_CheckableUnresolvedUserRow_en","",20042,],
["libraries.designsystem.theme.components_Checkboxes_Toggles_en","",0,],
-["libraries.designsystem.theme.components_CircularProgressIndicator_Progress Indicators_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",20027,],
-["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20027,],
-["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20027,],
+["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_0_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_0_en",20042,],
+["libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en","libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en",20042,],
+["libraries.textcomposer_ComposerModeView_Day_0_en","libraries.textcomposer_ComposerModeView_Night_0_en",20042,],
["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_ConfigureRoomView_Day_0_en","features.createroom.impl.configureroom_ConfigureRoomView_Night_0_en",20027,],
-["features.createroom.impl.configureroom_ConfigureRoomView_Day_1_en","features.createroom.impl.configureroom_ConfigureRoomView_Night_1_en",20027,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en","",20045,],
+["features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en","",20045,],
["features.preferences.impl.developer.tracing_ConfigureTracingView_Day_0_en","features.preferences.impl.developer.tracing_ConfigureTracingView_Night_0_en",0,],
-["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20027,],
-["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20027,],
-["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20027,],
-["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20027,],
+["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_0_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_0_en",20042,],
+["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_1_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_1_en",20042,],
+["features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Day_2_en","features.login.impl.screens.confirmaccountprovider_ConfirmAccountProviderView_Night_2_en",20042,],
+["features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_ConfirmRecoveryKeyBanner_Night_0_en",20042,],
["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,],
-["features.rageshake.api.crash_CrashDetectionView_Day_0_en","features.rageshake.api.crash_CrashDetectionView_Night_0_en",20027,],
-["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20027,],
-["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20027,],
-["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20027,],
-["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20027,],
-["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20027,],
-["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20027,],
-["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20027,],
-["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20027,],
-["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20027,],
-["libraries.designsystem.theme.components.previews_DatePickerDark_DateTime pickers_en","",20027,],
-["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime pickers_en","",20027,],
+["features.rageshake.api.crash_CrashDetectionView_Day_0_en","features.rageshake.api.crash_CrashDetectionView_Night_0_en",20042,],
+["features.login.impl.screens.createaccount_CreateAccountView_Day_0_en","features.login.impl.screens.createaccount_CreateAccountView_Night_0_en",20042,],
+["features.login.impl.screens.createaccount_CreateAccountView_Day_1_en","features.login.impl.screens.createaccount_CreateAccountView_Night_1_en",20042,],
+["features.login.impl.screens.createaccount_CreateAccountView_Day_2_en","features.login.impl.screens.createaccount_CreateAccountView_Night_2_en",20042,],
+["features.login.impl.screens.createaccount_CreateAccountView_Day_3_en","features.login.impl.screens.createaccount_CreateAccountView_Night_3_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_0_en","features.poll.impl.create_CreatePollView_Night_0_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_1_en","features.poll.impl.create_CreatePollView_Night_1_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_2_en","features.poll.impl.create_CreatePollView_Night_2_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_3_en","features.poll.impl.create_CreatePollView_Night_3_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_4_en","features.poll.impl.create_CreatePollView_Night_4_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_5_en","features.poll.impl.create_CreatePollView_Night_5_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_6_en","features.poll.impl.create_CreatePollView_Night_6_en",20042,],
+["features.poll.impl.create_CreatePollView_Day_7_en","features.poll.impl.create_CreatePollView_Night_7_en",20042,],
+["features.createroom.impl.root_CreateRoomRootView_Day_0_en","features.createroom.impl.root_CreateRoomRootView_Night_0_en",20042,],
+["features.createroom.impl.root_CreateRoomRootView_Day_1_en","features.createroom.impl.root_CreateRoomRootView_Night_1_en",20042,],
+["features.createroom.impl.root_CreateRoomRootView_Day_2_en","features.createroom.impl.root_CreateRoomRootView_Night_2_en",20042,],
+["features.createroom.impl.root_CreateRoomRootView_Day_3_en","features.createroom.impl.root_CreateRoomRootView_Night_3_en",20042,],
+["libraries.designsystem.theme.components.previews_DatePickerDark_DateTime_pickers_en","",20042,],
+["libraries.designsystem.theme.components.previews_DatePickerLight_DateTime_pickers_en","",20042,],
["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",20027,],
-["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20027,],
-["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20027,],
+["features.logout.impl.direct_DefaultDirectLogoutView_Day_1_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_1_en",20042,],
+["features.logout.impl.direct_DefaultDirectLogoutView_Day_2_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_2_en",20042,],
+["features.logout.impl.direct_DefaultDirectLogoutView_Day_3_en","features.logout.impl.direct_DefaultDirectLogoutView_Night_3_en",20042,],
["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",20027,],
-["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20027,],
-["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20027,],
+["features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Day_0_en","features.preferences.impl.notifications.edit_DefaultNotificationSettingOption_Night_0_en",20042,],
+["features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en",20042,],
+["features.roomlist.impl.components_DefaultRoomListTopBar_Day_0_en","features.roomlist.impl.components_DefaultRoomListTopBar_Night_0_en",20042,],
["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",20027,],
-["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20027,],
-["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20027,],
-["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20027,],
-["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20027,],
-["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20027,],
-["libraries.designsystem.atomic.molecules_DialogLikeBannerMolecule_Day_0_en","libraries.designsystem.atomic.molecules_DialogLikeBannerMolecule_Night_0_en",20027,],
-["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,],
-["libraries.designsystem.theme.components_DialogWithTitleAndOkButton_Dialog with title and ok button_Dialogs_en","",0,],
-["libraries.designsystem.theme.components_DialogWithTitleIconAndOkButton_Dialog with title, icon and ok button_Dialogs_en","",0,],
+["features.licenses.impl.list_DependencyLicensesListView_Day_0_en","features.licenses.impl.list_DependencyLicensesListView_Night_0_en",20042,],
+["features.licenses.impl.list_DependencyLicensesListView_Day_1_en","features.licenses.impl.list_DependencyLicensesListView_Night_1_en",20042,],
+["features.licenses.impl.list_DependencyLicensesListView_Day_2_en","features.licenses.impl.list_DependencyLicensesListView_Night_2_en",20042,],
+["features.preferences.impl.developer_DeveloperSettingsView_Day_0_en","features.preferences.impl.developer_DeveloperSettingsView_Night_0_en",20042,],
+["features.preferences.impl.developer_DeveloperSettingsView_Day_1_en","features.preferences.impl.developer_DeveloperSettingsView_Night_1_en",20042,],
+["features.preferences.impl.developer_DeveloperSettingsView_Day_2_en","features.preferences.impl.developer_DeveloperSettingsView_Night_2_en",20042,],
+["libraries.designsystem.atomic.molecules_DialogLikeBannerMolecule_Day_0_en","libraries.designsystem.atomic.molecules_DialogLikeBannerMolecule_Night_0_en",20042,],
+["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,],
+["libraries.designsystem.theme.components_DialogWithTitleAndOkButton_Dialog_with_title_and_ok_button_Dialogs_en","",0,],
+["libraries.designsystem.theme.components_DialogWithTitleIconAndOkButton_Dialog_with_title,_icon_and_ok_button_Dialogs_en","",0,],
["libraries.textcomposer.components_DismissTextFormattingButton_Day_0_en","libraries.textcomposer.components_DismissTextFormattingButton_Night_0_en",0,],
["libraries.designsystem.components.avatar_DmAvatars_Avatars_en","",0,],
["libraries.designsystem.text_DpScale_0_75f__en","",0,],
["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",20027,],
-["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20027,],
-["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20027,],
-["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20027,],
-["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20027,],
-["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20027,],
+["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_0_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_0_en",20042,],
+["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_1_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_1_en",20042,],
+["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_2_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_2_en",20042,],
+["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_3_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_3_en",20042,],
+["features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Day_4_en","features.preferences.impl.notifications.edit_EditDefaultNotificationSettingView_Night_4_en",20042,],
+["features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en","features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en",20042,],
["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,],
@@ -287,9 +304,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","",20027,],
-["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20027,],
-["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20027,],
+["libraries.designsystem.components.dialogs_ErrorDialogContent_Dialogs_en","",20042,],
+["libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialogWithDoNotShowAgain_Night_0_en",20042,],
+["libraries.designsystem.components.dialogs_ErrorDialog_Day_0_en","libraries.designsystem.components.dialogs_ErrorDialog_Night_0_en",20042,],
["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.designsystem.theme.components_FilledButtonLargeLowPadding_Buttons_en","",0,],
@@ -297,18 +314,22 @@ export const screenshots = [
["libraries.designsystem.theme.components_FilledButtonMediumLowPadding_Buttons_en","",0,],
["libraries.designsystem.theme.components_FilledButtonMedium_Buttons_en","",0,],
["libraries.designsystem.theme.components_FilledButtonSmall_Buttons_en","",0,],
-["libraries.designsystem.theme.components_FloatingActionButton_Floating Action Buttons_en","",0,],
+["libraries.designsystem.theme.components_FilledTextFieldDark_TextFields_en","",0,],
+["libraries.designsystem.theme.components_FilledTextFieldLight_TextFields_en","",0,],
+["libraries.designsystem.theme.components_FilledTextFieldValueLight_TextFields_en","",0,],
+["libraries.designsystem.theme.components_FilledTextFieldValueTextFieldDark_TextFields_en","",0,],
+["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",20027,],
-["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20027,],
-["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20027,],
+["features.messages.impl.timeline.focus_FocusRequestStateView_Day_1_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_1_en",20042,],
+["features.messages.impl.timeline.focus_FocusRequestStateView_Day_2_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_2_en",20042,],
+["features.messages.impl.timeline.focus_FocusRequestStateView_Day_3_en","features.messages.impl.timeline.focus_FocusRequestStateView_Night_3_en",20042,],
["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",20027,],
-["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20027,],
+["features.messages.impl.forward_ForwardMessagesView_Day_3_en","features.messages.impl.forward_ForwardMessagesView_Night_3_en",20042,],
+["features.roomlist.impl.components_FullScreenIntentPermissionBanner_Day_0_en","features.roomlist.impl.components_FullScreenIntentPermissionBanner_Night_0_en",20042,],
["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,],
@@ -329,133 +350,131 @@ export const screenshots = [
["libraries.designsystem.icons_IconsCompound_Day_4_en","libraries.designsystem.icons_IconsCompound_Night_4_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",20027,],
-["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20027,],
+["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en",20042,],
+["features.messages.impl.crypto.identity_IdentityChangeStateView_Day_2_en","features.messages.impl.crypto.identity_IdentityChangeStateView_Night_2_en",20042,],
["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,],
["libraries.matrix.ui.messages.reply_InReplyToView_Day_11_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_11_en",0,],
["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",20027,],
+["libraries.matrix.ui.messages.reply_InReplyToView_Day_4_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_4_en",20042,],
["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",20027,],
+["libraries.matrix.ui.messages.reply_InReplyToView_Day_8_en","libraries.matrix.ui.messages.reply_InReplyToView_Night_8_en",20042,],
["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",20027,],
+["features.call.impl.ui_IncomingCallScreen_Day_0_en","features.call.impl.ui_IncomingCallScreen_Night_0_en",20042,],
["features.verifysession.impl.incoming_IncomingVerificationView_Day_0_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_0_en",0,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20031,],
-["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20031,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_1_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_1_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_2_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_2_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_3_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_3_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_4_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_4_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_5_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_5_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_6_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_6_en",20042,],
+["features.verifysession.impl.incoming_IncomingVerificationView_Day_7_en","features.verifysession.impl.incoming_IncomingVerificationView_Night_7_en",20042,],
["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",20027,],
+["libraries.matrix.ui.components_InviteSenderView_Day_0_en","libraries.matrix.ui.components_InviteSenderView_Night_0_en",20042,],
["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",0,],
["features.joinroom.impl_JoinRoomView_Day_11_en","features.joinroom.impl_JoinRoomView_Night_11_en",0,],
-["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20027,],
-["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",20027,],
+["features.joinroom.impl_JoinRoomView_Day_1_en","features.joinroom.impl_JoinRoomView_Night_1_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_2_en","features.joinroom.impl_JoinRoomView_Night_2_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_3_en","features.joinroom.impl_JoinRoomView_Night_3_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_4_en","features.joinroom.impl_JoinRoomView_Night_4_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_5_en","features.joinroom.impl_JoinRoomView_Night_5_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_6_en","features.joinroom.impl_JoinRoomView_Night_6_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_7_en","features.joinroom.impl_JoinRoomView_Night_7_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_8_en","features.joinroom.impl_JoinRoomView_Night_8_en",20042,],
+["features.joinroom.impl_JoinRoomView_Day_9_en","features.joinroom.impl_JoinRoomView_Night_9_en",20042,],
["libraries.designsystem.components_LabelledCheckbox_Toggles_en","",0,],
-["libraries.designsystem.components_LabelledOutlinedTextField_Day_0_en","libraries.designsystem.components_LabelledOutlinedTextField_Night_0_en",0,],
-["libraries.designsystem.components_LabelledTextField_Day_0_en","libraries.designsystem.components_LabelledTextField_Night_0_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",20027,],
-["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20027,],
-["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20027,],
-["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20027,],
-["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20027,],
-["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20027,],
+["features.leaveroom.api_LeaveRoomView_Day_1_en","features.leaveroom.api_LeaveRoomView_Night_1_en",20042,],
+["features.leaveroom.api_LeaveRoomView_Day_2_en","features.leaveroom.api_LeaveRoomView_Night_2_en",20042,],
+["features.leaveroom.api_LeaveRoomView_Day_3_en","features.leaveroom.api_LeaveRoomView_Night_3_en",20042,],
+["features.leaveroom.api_LeaveRoomView_Day_4_en","features.leaveroom.api_LeaveRoomView_Night_4_en",20042,],
+["features.leaveroom.api_LeaveRoomView_Day_5_en","features.leaveroom.api_LeaveRoomView_Night_5_en",20042,],
+["features.leaveroom.api_LeaveRoomView_Day_6_en","features.leaveroom.api_LeaveRoomView_Night_6_en",20042,],
["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.theme.components_LinearProgressIndicator_Progress_Indicators_en","",0,],
["libraries.designsystem.components.dialogs_ListDialogContent_Dialogs_en","",0,],
["libraries.designsystem.components.dialogs_ListDialog_Day_0_en","libraries.designsystem.components.dialogs_ListDialog_Night_0_en",0,],
-["libraries.designsystem.theme.components_ListItemPrimaryActionWithIcon_List item - Primary action & Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineBothIcons_List item (1 line) - Both Icons_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineLeadingCheckbox_List item (1 line) - Leading Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineLeadingIcon_List item (1 line) - Leading Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineLeadingRadioButton_List item (1 line) - Leading RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineLeadingSwitch_List item (1 line) - Leading Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineSimple_List item (1 line) - Simple_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineTrailingCheckBox_List item (1 line) - Trailing Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineTrailingIcon_List item (1 line) - Trailing Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineTrailingRadioButton_List item (1 line) - Trailing RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemSingleLineTrailingSwitch_List item (1 line) - Trailing Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesBothIcons_List item (3 lines) - Both Icons_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesLeadingCheckbox_List item (3 lines) - Leading Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesLeadingIcon_List item (3 lines) - Leading Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesLeadingRadioButton_List item (3 lines) - Leading RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesLeadingSwitch_List item (3 lines) - Leading Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesSimple_List item (3 lines) - Simple_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesTrailingCheckBox_List item (3 lines) - Trailing Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesTrailingIcon_List item (3 lines) - Trailing Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesTrailingRadioButton_List item (3 lines) - Trailing RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemThreeLinesTrailingSwitch_List item (3 lines) - Trailing Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesBothIconsError_List item (2 lines) - Both Icons - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesBothIcons_List item (2 lines) - Both Icons_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingCheckboxError_List item (2 lines) - Leading Checkbox - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingCheckbox_List item (2 lines) - Leading Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingIconError_List item (2 lines) - Leading Icon - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingIcon_List item (2 lines) - Leading Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingRadioButtonError_List item (2 lines) - Leading RadioButton - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingRadioButton_List item (2 lines) - Leading RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingSwitchError_List item (2 lines) - Leading Switch - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesLeadingSwitch_List item (2 lines) - Leading Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesSimpleError_List item (2 lines) - Simple - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesSimple_List item (2 lines) - Simple_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingCheckBoxError_List item (2 lines) - Trailing Checkbox - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingCheckBox_List item (2 lines) - Trailing Checkbox_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingIconError_List item (2 lines) - Trailing Icon - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingIcon_List item (2 lines) - Trailing Icon_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingRadioButtonError_List item (2 lines) - Trailing RadioButton - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingRadioButton_List item (2 lines) - Trailing RadioButton_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingSwitchError_List item (2 lines) - Trailing Switch - Error_List items_en","",0,],
-["libraries.designsystem.theme.components_ListItemTwoLinesTrailingSwitch_List item (2 lines) - Trailing Switch_List items_en","",0,],
-["libraries.designsystem.theme.components_ListSectionHeaderWithDescriptionAndDivider_List section header with description and divider_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSectionHeaderWithDescription_List section header with description_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSectionHeaderWithDivider_List section header with divider_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSectionHeader_List section header_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSupportingTextCustomPadding_List supporting text - custom padding_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSupportingTextDefaultPadding_List supporting text - default padding_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSupportingTextLargePadding_List supporting text - large padding_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSupportingTextNoPadding_List supporting text - no padding_List sections_en","",0,],
-["libraries.designsystem.theme.components_ListSupportingTextSmallPadding_List supporting text - small padding_List sections_en","",0,],
+["libraries.designsystem.theme.components_ListItemPrimaryActionWithIcon_List_item_-_Primary_action_&_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineBothIcons_List_item_(1_line)_-_Both_Icons_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineLeadingCheckbox_List_item_(1_line)_-_Leading_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineLeadingIcon_List_item_(1_line)_-_Leading_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineLeadingRadioButton_List_item_(1_line)_-_Leading_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineLeadingSwitch_List_item_(1_line)_-_Leading_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineSimple_List_item_(1_line)_-_Simple_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineTrailingCheckBox_List_item_(1_line)_-_Trailing_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineTrailingIcon_List_item_(1_line)_-_Trailing_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineTrailingRadioButton_List_item_(1_line)_-_Trailing_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemSingleLineTrailingSwitch_List_item_(1_line)_-_Trailing_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesBothIcons_List_item_(3_lines)_-_Both_Icons_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesLeadingCheckbox_List_item_(3_lines)_-_Leading_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesLeadingIcon_List_item_(3_lines)_-_Leading_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesLeadingRadioButton_List_item_(3_lines)_-_Leading_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesLeadingSwitch_List_item_(3_lines)_-_Leading_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesSimple_List_item_(3_lines)_-_Simple_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesTrailingCheckBox_List_item_(3_lines)_-_Trailing_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesTrailingIcon_List_item_(3_lines)_-_Trailing_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesTrailingRadioButton_List_item_(3_lines)_-_Trailing_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemThreeLinesTrailingSwitch_List_item_(3_lines)_-_Trailing_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesBothIconsError_List_item_(2_lines)_-_Both_Icons_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesBothIcons_List_item_(2_lines)_-_Both_Icons_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingCheckboxError_List_item_(2_lines)_-_Leading_Checkbox_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingCheckbox_List_item_(2_lines)_-_Leading_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingIconError_List_item_(2_lines)_-_Leading_Icon_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingIcon_List_item_(2_lines)_-_Leading_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingRadioButtonError_List_item_(2_lines)_-_Leading_RadioButton_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingRadioButton_List_item_(2_lines)_-_Leading_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingSwitchError_List_item_(2_lines)_-_Leading_Switch_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesLeadingSwitch_List_item_(2_lines)_-_Leading_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesSimpleError_List_item_(2_lines)_-_Simple_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesSimple_List_item_(2_lines)_-_Simple_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingCheckBoxError_List_item_(2_lines)_-_Trailing_Checkbox_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingCheckBox_List_item_(2_lines)_-_Trailing_Checkbox_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingIconError_List_item_(2_lines)_-_Trailing_Icon_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingIcon_List_item_(2_lines)_-_Trailing_Icon_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingRadioButtonError_List_item_(2_lines)_-_Trailing_RadioButton_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingRadioButton_List_item_(2_lines)_-_Trailing_RadioButton_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingSwitchError_List_item_(2_lines)_-_Trailing_Switch_-_Error_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListItemTwoLinesTrailingSwitch_List_item_(2_lines)_-_Trailing_Switch_List_items_en","",0,],
+["libraries.designsystem.theme.components_ListSectionHeaderWithDescriptionAndDivider_List_section_header_with_description_and_divider_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSectionHeaderWithDescription_List_section_header_with_description_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSectionHeaderWithDivider_List_section_header_with_divider_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSectionHeader_List_section_header_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSupportingTextCustomPadding_List_supporting_text_-_custom_padding_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSupportingTextDefaultPadding_List_supporting_text_-_default_padding_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSupportingTextLargePadding_List_supporting_text_-_large_padding_List_sections_en","",0,],
+["libraries.designsystem.theme.components_ListSupportingTextNoPadding_List_supporting_text_-_no_padding_List_sections_en","",0,],
+["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",20027,],
-["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20027,],
-["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20027,],
-["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20027,],
+["appnav.room.joined_LoadingRoomNodeView_Day_1_en","appnav.room.joined_LoadingRoomNodeView_Night_1_en",20042,],
+["features.lockscreen.impl.settings_LockScreenSettingsView_Day_0_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_0_en",20042,],
+["features.lockscreen.impl.settings_LockScreenSettingsView_Day_1_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_1_en",20042,],
+["features.lockscreen.impl.settings_LockScreenSettingsView_Day_2_en","features.lockscreen.impl.settings_LockScreenSettingsView_Night_2_en",20042,],
["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",20027,],
-["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20027,],
-["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20027,],
-["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20027,],
-["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20027,],
-["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20027,],
-["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20027,],
-["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20027,],
-["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20027,],
-["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20027,],
-["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20027,],
-["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20027,],
-["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20027,],
-["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20027,],
-["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20027,],
-["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20027,],
+["appnav.loggedin_LoggedInView_Day_1_en","appnav.loggedin_LoggedInView_Night_1_en",20042,],
+["appnav.loggedin_LoggedInView_Day_2_en","appnav.loggedin_LoggedInView_Night_2_en",20042,],
+["appnav.loggedin_LoggedInView_Day_3_en","appnav.loggedin_LoggedInView_Night_3_en",20042,],
+["features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en",20042,],
+["features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en",20042,],
+["features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en","features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en",20042,],
+["features.logout.impl_LogoutView_Day_0_en","features.logout.impl_LogoutView_Night_0_en",20042,],
+["features.logout.impl_LogoutView_Day_1_en","features.logout.impl_LogoutView_Night_1_en",20042,],
+["features.logout.impl_LogoutView_Day_2_en","features.logout.impl_LogoutView_Night_2_en",20042,],
+["features.logout.impl_LogoutView_Day_3_en","features.logout.impl_LogoutView_Night_3_en",20042,],
+["features.logout.impl_LogoutView_Day_4_en","features.logout.impl_LogoutView_Night_4_en",20042,],
+["features.logout.impl_LogoutView_Day_5_en","features.logout.impl_LogoutView_Night_5_en",20042,],
+["features.logout.impl_LogoutView_Day_6_en","features.logout.impl_LogoutView_Night_6_en",20042,],
+["features.logout.impl_LogoutView_Day_7_en","features.logout.impl_LogoutView_Night_7_en",20042,],
+["features.logout.impl_LogoutView_Day_8_en","features.logout.impl_LogoutView_Night_8_en",20042,],
+["features.logout.impl_LogoutView_Day_9_en","features.logout.impl_LogoutView_Night_9_en",20042,],
["libraries.designsystem.components.button_MainActionButton_Buttons_en","",0,],
-["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20027,],
+["libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en","libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en",20042,],
["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,],
@@ -468,7 +487,7 @@ export const screenshots = [
["libraries.mediaviewer.api.viewer_MediaViewerView_0_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_10_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_1_en","",0,],
-["libraries.mediaviewer.api.viewer_MediaViewerView_2_en","",20027,],
+["libraries.mediaviewer.api.viewer_MediaViewerView_2_en","",20042,],
["libraries.mediaviewer.api.viewer_MediaViewerView_3_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_4_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_5_en","",0,],
@@ -476,11 +495,11 @@ export const screenshots = [
["libraries.mediaviewer.api.viewer_MediaViewerView_7_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_8_en","",0,],
["libraries.mediaviewer.api.viewer_MediaViewerView_9_en","",0,],
-["libraries.designsystem.theme.components_MediumTopAppBar_App Bars_en","",0,],
+["libraries.designsystem.theme.components_MediumTopAppBar_App_Bars_en","",0,],
["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",20027,],
+["features.messages.impl.messagecomposer_MessageComposerView_Day_0_en","features.messages.impl.messagecomposer_MessageComposerView_Night_0_en",20042,],
["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,],
@@ -497,7 +516,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",20027,],
+["features.messages.impl.timeline.components_MessageShieldView_Day_0_en","features.messages.impl.timeline.components_MessageShieldView_Night_0_en",20042,],
["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,],
@@ -505,129 +524,127 @@ 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",20027,],
-["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20027,],
-["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20027,],
-["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20027,],
-["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20027,],
-["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20027,],
-["features.messages.impl_MessagesView_Day_12_en","features.messages.impl_MessagesView_Night_12_en",20027,],
-["features.messages.impl_MessagesView_Day_13_en","features.messages.impl_MessagesView_Night_13_en",20027,],
-["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20027,],
-["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20027,],
-["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20027,],
-["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20027,],
-["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20027,],
-["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20027,],
-["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20027,],
-["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20027,],
-["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20027,],
+["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en",20042,],
+["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en",20042,],
+["features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en","features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en",20042,],
+["features.messages.impl_MessagesView_Day_0_en","features.messages.impl_MessagesView_Night_0_en",20042,],
+["features.messages.impl_MessagesView_Day_10_en","features.messages.impl_MessagesView_Night_10_en",20042,],
+["features.messages.impl_MessagesView_Day_11_en","features.messages.impl_MessagesView_Night_11_en",20042,],
+["features.messages.impl_MessagesView_Day_12_en","features.messages.impl_MessagesView_Night_12_en",20042,],
+["features.messages.impl_MessagesView_Day_13_en","features.messages.impl_MessagesView_Night_13_en",20042,],
+["features.messages.impl_MessagesView_Day_1_en","features.messages.impl_MessagesView_Night_1_en",20042,],
+["features.messages.impl_MessagesView_Day_2_en","features.messages.impl_MessagesView_Night_2_en",20042,],
+["features.messages.impl_MessagesView_Day_3_en","features.messages.impl_MessagesView_Night_3_en",20042,],
+["features.messages.impl_MessagesView_Day_4_en","features.messages.impl_MessagesView_Night_4_en",20042,],
+["features.messages.impl_MessagesView_Day_5_en","features.messages.impl_MessagesView_Night_5_en",20042,],
+["features.messages.impl_MessagesView_Day_6_en","features.messages.impl_MessagesView_Night_6_en",20042,],
+["features.messages.impl_MessagesView_Day_7_en","features.messages.impl_MessagesView_Night_7_en",20042,],
+["features.messages.impl_MessagesView_Day_8_en","features.messages.impl_MessagesView_Night_8_en",20042,],
+["features.messages.impl_MessagesView_Day_9_en","features.messages.impl_MessagesView_Night_9_en",20042,],
["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",20027,],
-["libraries.designsystem.theme.components_ModalBottomSheetDark_Bottom Sheets_en","",0,],
-["libraries.designsystem.theme.components_ModalBottomSheetLight_Bottom Sheets_en","",0,],
+["features.migration.impl_MigrationView_Day_1_en","features.migration.impl_MigrationView_Night_1_en",20042,],
+["libraries.designsystem.theme.components_ModalBottomSheetDark_Bottom_Sheets_en","",0,],
+["libraries.designsystem.theme.components_ModalBottomSheetLight_Bottom_Sheets_en","",0,],
["appicon.element_MonochromeIcon_en","",0,],
["libraries.designsystem.components.dialogs_MultipleSelectionDialogContent_Dialogs_en","",0,],
["libraries.designsystem.components.dialogs_MultipleSelectionDialog_Day_0_en","libraries.designsystem.components.dialogs_MultipleSelectionDialog_Night_0_en",0,],
-["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",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20027,],
-["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20027,],
-["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20027,],
+["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",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_0_en","features.preferences.impl.notifications_NotificationSettingsView_Night_0_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_10_en","features.preferences.impl.notifications_NotificationSettingsView_Night_10_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_11_en","features.preferences.impl.notifications_NotificationSettingsView_Night_11_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_12_en","features.preferences.impl.notifications_NotificationSettingsView_Night_12_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_1_en","features.preferences.impl.notifications_NotificationSettingsView_Night_1_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_2_en","features.preferences.impl.notifications_NotificationSettingsView_Night_2_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_3_en","features.preferences.impl.notifications_NotificationSettingsView_Night_3_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_4_en","features.preferences.impl.notifications_NotificationSettingsView_Night_4_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_5_en","features.preferences.impl.notifications_NotificationSettingsView_Night_5_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_6_en","features.preferences.impl.notifications_NotificationSettingsView_Night_6_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_7_en","features.preferences.impl.notifications_NotificationSettingsView_Night_7_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_8_en","features.preferences.impl.notifications_NotificationSettingsView_Night_8_en",20042,],
+["features.preferences.impl.notifications_NotificationSettingsView_Day_9_en","features.preferences.impl.notifications_NotificationSettingsView_Night_9_en",20042,],
+["features.ftue.impl.notifications_NotificationsOptInView_Day_0_en","features.ftue.impl.notifications_NotificationsOptInView_Night_0_en",20042,],
["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",20027,],
-["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20027,],
-["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20027,],
-["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20027,],
-["features.onboarding.impl_OnBoardingView_Day_4_en","features.onboarding.impl_OnBoardingView_Night_4_en",20027,],
+["features.onboarding.impl_OnBoardingView_Day_0_en","features.onboarding.impl_OnBoardingView_Night_0_en",20042,],
+["features.onboarding.impl_OnBoardingView_Day_1_en","features.onboarding.impl_OnBoardingView_Night_1_en",20042,],
+["features.onboarding.impl_OnBoardingView_Day_2_en","features.onboarding.impl_OnBoardingView_Night_2_en",20042,],
+["features.onboarding.impl_OnBoardingView_Day_3_en","features.onboarding.impl_OnBoardingView_Night_3_en",20042,],
+["features.onboarding.impl_OnBoardingView_Day_4_en","features.onboarding.impl_OnBoardingView_Night_4_en",20042,],
["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,],
["libraries.designsystem.theme.components_OutlinedButtonMediumLowPadding_Buttons_en","",0,],
["libraries.designsystem.theme.components_OutlinedButtonMedium_Buttons_en","",0,],
["libraries.designsystem.theme.components_OutlinedButtonSmall_Buttons_en","",0,],
-["libraries.designsystem.theme.components_OutlinedTextFieldsDark_TextFields_en","",0,],
-["libraries.designsystem.theme.components_OutlinedTextFields_TextFields_en","",0,],
["libraries.designsystem.components_PageTitleWithIconFull_Day_0_en","libraries.designsystem.components_PageTitleWithIconFull_Night_0_en",0,],
["libraries.designsystem.components_PageTitleWithIconFull_Day_1_en","libraries.designsystem.components_PageTitleWithIconFull_Night_1_en",0,],
["libraries.designsystem.components_PageTitleWithIconFull_Day_2_en","libraries.designsystem.components_PageTitleWithIconFull_Night_2_en",0,],
["libraries.designsystem.components_PageTitleWithIconFull_Day_3_en","libraries.designsystem.components_PageTitleWithIconFull_Night_3_en",0,],
["libraries.designsystem.components_PageTitleWithIconFull_Day_4_en","libraries.designsystem.components_PageTitleWithIconFull_Night_4_en",0,],
["libraries.designsystem.components_PageTitleWithIconMinimal_Day_0_en","libraries.designsystem.components_PageTitleWithIconMinimal_Night_0_en",0,],
-["libraries.mediaviewer.api.local.pdf_PdfPagesErrorView_Day_0_en","libraries.mediaviewer.api.local.pdf_PdfPagesErrorView_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20027,],
-["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20027,],
-["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20027,],
-["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20027,],
-["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20027,],
+["libraries.mediaviewer.api.local.pdf_PdfPagesErrorView_Day_0_en","libraries.mediaviewer.api.local.pdf_PdfPagesErrorView_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Day_0_en","features.roomdetails.impl.rolesandpermissions.changeroles_PendingMemberRowWithLongName_Night_0_en",20042,],
+["libraries.permissions.api_PermissionsView_Day_0_en","libraries.permissions.api_PermissionsView_Night_0_en",20042,],
+["libraries.permissions.api_PermissionsView_Day_1_en","libraries.permissions.api_PermissionsView_Night_1_en",20042,],
+["libraries.permissions.api_PermissionsView_Day_2_en","libraries.permissions.api_PermissionsView_Night_2_en",20042,],
+["libraries.permissions.api_PermissionsView_Day_3_en","libraries.permissions.api_PermissionsView_Night_3_en",20042,],
["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",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20027,],
-["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20027,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_0_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_0_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_1_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_1_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_2_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_2_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_3_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_3_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_4_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_4_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_5_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_5_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_6_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_6_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockViewInApp_Day_7_en","features.lockscreen.impl.unlock_PinUnlockViewInApp_Night_7_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_0_en","features.lockscreen.impl.unlock_PinUnlockView_Night_0_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_1_en","features.lockscreen.impl.unlock_PinUnlockView_Night_1_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_2_en","features.lockscreen.impl.unlock_PinUnlockView_Night_2_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_3_en","features.lockscreen.impl.unlock_PinUnlockView_Night_3_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_4_en","features.lockscreen.impl.unlock_PinUnlockView_Night_4_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_5_en","features.lockscreen.impl.unlock_PinUnlockView_Night_5_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_6_en","features.lockscreen.impl.unlock_PinUnlockView_Night_6_en",20042,],
+["features.lockscreen.impl.unlock_PinUnlockView_Day_7_en","features.lockscreen.impl.unlock_PinUnlockView_Night_7_en",20042,],
["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",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20027,],
-["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20027,],
-["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20027,],
-["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20027,],
-["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20027,],
-["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20027,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_10_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_10_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_1_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_1_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_2_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_2_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_3_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_3_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_4_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_4_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_5_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_5_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_6_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_6_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_7_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_7_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_8_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_8_en",20042,],
+["features.messages.impl.pinned.banner_PinnedMessagesBannerView_Day_9_en","features.messages.impl.pinned.banner_PinnedMessagesBannerView_Night_9_en",20042,],
+["features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_0_en",20042,],
+["features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_1_en",20042,],
+["features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_2_en",20042,],
+["features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_en","features.messages.impl.pinned.list_PinnedMessagesListView_Night_3_en",20042,],
["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",20027,],
-["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20027,],
+["features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedNotSelected_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewDisclosedSelected_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollAnswerViewEndedSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedSelected_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerNotSelected_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Day_0_en","features.poll.api.pollcontent_PollAnswerViewEndedWinnerSelected_Night_0_en",20042,],
["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",20027,],
-["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20027,],
-["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20027,],
-["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20027,],
-["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20027,],
-["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20027,],
-["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20027,],
-["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20027,],
+["features.poll.api.pollcontent_PollContentViewCreatorEditable_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEditable_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollContentViewCreatorEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewCreatorEnded_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollContentViewCreator_Day_0_en","features.poll.api.pollcontent_PollContentViewCreator_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollContentViewDisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewDisclosed_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollContentViewEnded_Day_0_en","features.poll.api.pollcontent_PollContentViewEnded_Night_0_en",20042,],
+["features.poll.api.pollcontent_PollContentViewUndisclosed_Day_0_en","features.poll.api.pollcontent_PollContentViewUndisclosed_Night_0_en",20042,],
+["features.poll.impl.history_PollHistoryView_Day_0_en","features.poll.impl.history_PollHistoryView_Night_0_en",20042,],
+["features.poll.impl.history_PollHistoryView_Day_1_en","features.poll.impl.history_PollHistoryView_Night_1_en",20042,],
+["features.poll.impl.history_PollHistoryView_Day_2_en","features.poll.impl.history_PollHistoryView_Night_2_en",20042,],
+["features.poll.impl.history_PollHistoryView_Day_3_en","features.poll.impl.history_PollHistoryView_Night_3_en",20042,],
+["features.poll.impl.history_PollHistoryView_Day_4_en","features.poll.impl.history_PollHistoryView_Night_4_en",20042,],
["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,],
@@ -644,194 +661,193 @@ 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","",20027,],
-["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20027,],
-["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20027,],
-["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20027,],
+["features.preferences.impl.root_PreferencesRootViewDark_0_en","",20042,],
+["features.preferences.impl.root_PreferencesRootViewDark_1_en","",20042,],
+["features.preferences.impl.root_PreferencesRootViewLight_0_en","",20042,],
+["features.preferences.impl.root_PreferencesRootViewLight_1_en","",20042,],
["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","",20027,],
-["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20027,],
+["libraries.designsystem.components_ProgressDialogContent_Dialogs_en","",20042,],
+["libraries.designsystem.components_ProgressDialog_Day_0_en","libraries.designsystem.components_ProgressDialog_Night_0_en",20042,],
["features.messages.impl.timeline.protection_ProtectedView_Day_0_en","features.messages.impl.timeline.protection_ProtectedView_Night_0_en",0,],
-["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20027,],
-["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20027,],
-["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20027,],
-["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20027,],
-["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20027,],
-["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20027,],
-["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20027,],
-["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20027,],
-["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20027,],
-["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20027,],
+["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_0_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_0_en",20042,],
+["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_1_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_1_en",20042,],
+["features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Day_2_en","features.login.impl.screens.qrcode.confirmation_QrCodeConfirmationView_Night_2_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_0_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_0_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_1_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_1_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_2_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_2_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_3_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_3_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_5_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_5_en",20042,],
+["features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_6_en","features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_6_en",20042,],
+["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en",20042,],
+["features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en","features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en",20042,],
+["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_0_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_0_en",20042,],
+["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_1_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_1_en",20042,],
+["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_2_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_2_en",20042,],
+["features.login.impl.screens.qrcode.scan_QrCodeScanView_Day_3_en","features.login.impl.screens.qrcode.scan_QrCodeScanView_Night_3_en",20042,],
["libraries.designsystem.theme.components_RadioButton_Toggles_en","",0,],
-["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20027,],
-["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20027,],
+["features.rageshake.api.detection_RageshakeDialogContent_Day_0_en","features.rageshake.api.detection_RageshakeDialogContent_Night_0_en",20042,],
+["features.rageshake.api.preferences_RageshakePreferencesView_Day_0_en","features.rageshake.api.preferences_RageshakePreferencesView_Night_0_en",20042,],
["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",20027,],
-["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20027,],
-["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20027,],
-["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20027,],
-["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20027,],
-["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20027,],
-["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20027,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_0_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_0_en",20042,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_1_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_1_en",20042,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_2_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_2_en",20042,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_3_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_3_en",20042,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_4_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_4_en",20042,],
+["features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Day_5_en","features.messages.impl.timeline.components.receipt.bottomsheet_ReadReceiptBottomSheet_Night_5_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en",20042,],
+["features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en","features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en",20042,],
["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",20027,],
-["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20027,],
-["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20027,],
-["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20027,],
-["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20027,],
-["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20027,],
-["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20027,],
-["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20027,],
-["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20027,],
-["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20027,],
-["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20027,],
-["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20027,],
+["features.messages.impl.report_ReportMessageView_Day_0_en","features.messages.impl.report_ReportMessageView_Night_0_en",20042,],
+["features.messages.impl.report_ReportMessageView_Day_1_en","features.messages.impl.report_ReportMessageView_Night_1_en",20042,],
+["features.messages.impl.report_ReportMessageView_Day_2_en","features.messages.impl.report_ReportMessageView_Night_2_en",20042,],
+["features.messages.impl.report_ReportMessageView_Day_3_en","features.messages.impl.report_ReportMessageView_Night_3_en",20042,],
+["features.messages.impl.report_ReportMessageView_Day_4_en","features.messages.impl.report_ReportMessageView_Night_4_en",20042,],
+["features.messages.impl.report_ReportMessageView_Day_5_en","features.messages.impl.report_ReportMessageView_Night_5_en",20042,],
+["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en",20042,],
+["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en",20042,],
+["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en",20042,],
+["features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en","features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en",20042,],
+["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_0_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_0_en",20042,],
+["features.securebackup.impl.reset.root_ResetIdentityRootView_Day_1_en","features.securebackup.impl.reset.root_ResetIdentityRootView_Night_1_en",20042,],
["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",20027,],
-["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20027,],
-["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20027,],
-["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20027,],
-["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20027,],
+["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_1_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_1_en",20042,],
+["features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Day_2_en","features.messages.impl.crypto.sendfailure.resolve_ResolveVerifiedUserSendFailureView_Night_2_en",20042,],
+["libraries.designsystem.components.dialogs_RetryDialogContent_Dialogs_en","",20042,],
+["libraries.designsystem.components.dialogs_RetryDialog_Day_0_en","libraries.designsystem.components.dialogs_RetryDialog_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_0_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_0_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_1_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_1_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_2_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_2_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_3_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_3_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_4_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_4_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_5_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_5_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_6_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_6_en",20042,],
+["features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Day_7_en","features.roomdetails.impl.rolesandpermissions_RolesAndPermissionsView_Night_7_en",20042,],
["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",20027,],
-["features.roomdetails.impl_RoomDetailsDark_0_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_10_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_11_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_12_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_13_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_1_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_2_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_3_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_4_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_5_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_6_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_7_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_8_en","",20027,],
-["features.roomdetails.impl_RoomDetailsDark_9_en","",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20027,],
-["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20027,],
-["features.roomdetails.impl_RoomDetails_0_en","",20027,],
-["features.roomdetails.impl_RoomDetails_10_en","",20027,],
-["features.roomdetails.impl_RoomDetails_11_en","",20027,],
-["features.roomdetails.impl_RoomDetails_12_en","",20027,],
-["features.roomdetails.impl_RoomDetails_13_en","",20027,],
-["features.roomdetails.impl_RoomDetails_1_en","",20027,],
-["features.roomdetails.impl_RoomDetails_2_en","",20027,],
-["features.roomdetails.impl_RoomDetails_3_en","",20027,],
-["features.roomdetails.impl_RoomDetails_4_en","",20027,],
-["features.roomdetails.impl_RoomDetails_5_en","",20027,],
-["features.roomdetails.impl_RoomDetails_6_en","",20027,],
-["features.roomdetails.impl_RoomDetails_7_en","",20027,],
-["features.roomdetails.impl_RoomDetails_8_en","",20027,],
-["features.roomdetails.impl_RoomDetails_9_en","",20027,],
-["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20027,],
-["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20027,],
-["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20027,],
-["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20027,],
-["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20027,],
-["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20027,],
+["features.roomaliasresolver.impl_RoomAliasResolverView_Day_2_en","features.roomaliasresolver.impl_RoomAliasResolverView_Night_2_en",20042,],
+["features.roomdetails.impl_RoomDetailsDark_0_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_10_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_11_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_12_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_13_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_1_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_2_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_3_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_4_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_5_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_6_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_7_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_8_en","",20042,],
+["features.roomdetails.impl_RoomDetailsDark_9_en","",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en",20042,],
+["features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en","features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en",20042,],
+["features.roomdetails.impl_RoomDetails_0_en","",20042,],
+["features.roomdetails.impl_RoomDetails_10_en","",20042,],
+["features.roomdetails.impl_RoomDetails_11_en","",20042,],
+["features.roomdetails.impl_RoomDetails_12_en","",20042,],
+["features.roomdetails.impl_RoomDetails_13_en","",20042,],
+["features.roomdetails.impl_RoomDetails_1_en","",20042,],
+["features.roomdetails.impl_RoomDetails_2_en","",20042,],
+["features.roomdetails.impl_RoomDetails_3_en","",20042,],
+["features.roomdetails.impl_RoomDetails_4_en","",20042,],
+["features.roomdetails.impl_RoomDetails_5_en","",20042,],
+["features.roomdetails.impl_RoomDetails_6_en","",20042,],
+["features.roomdetails.impl_RoomDetails_7_en","",20042,],
+["features.roomdetails.impl_RoomDetails_8_en","",20042,],
+["features.roomdetails.impl_RoomDetails_9_en","",20042,],
+["features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en",20042,],
+["features.roomdirectory.impl.root_RoomDirectoryView_Day_1_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_1_en",20042,],
+["features.roomdirectory.impl.root_RoomDirectoryView_Day_2_en","features.roomdirectory.impl.root_RoomDirectoryView_Night_2_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_0_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_0_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_1_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_1_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_2_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_2_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_3_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_3_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_4_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_4_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_5_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_5_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_6_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_6_en",20042,],
+["features.roomdetails.impl.invite_RoomInviteMembersView_Day_7_en","features.roomdetails.impl.invite_RoomInviteMembersView_Night_7_en",20042,],
+["features.roomlist.impl.components_RoomListContentView_Day_0_en","features.roomlist.impl.components_RoomListContentView_Night_0_en",20042,],
+["features.roomlist.impl.components_RoomListContentView_Day_1_en","features.roomlist.impl.components_RoomListContentView_Night_1_en",20042,],
["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",20027,],
-["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20027,],
-["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20027,],
-["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20027,],
-["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20027,],
-["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20027,],
-["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20027,],
+["features.roomlist.impl.components_RoomListContentView_Day_3_en","features.roomlist.impl.components_RoomListContentView_Night_3_en",20042,],
+["features.roomlist.impl.components_RoomListContentView_Day_4_en","features.roomlist.impl.components_RoomListContentView_Night_4_en",20042,],
+["features.roomlist.impl.filters_RoomListFiltersView_Day_0_en","features.roomlist.impl.filters_RoomListFiltersView_Night_0_en",20042,],
+["features.roomlist.impl.filters_RoomListFiltersView_Day_1_en","features.roomlist.impl.filters_RoomListFiltersView_Night_1_en",20042,],
+["features.roomlist.impl_RoomListModalBottomSheetContent_Day_0_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_0_en",20042,],
+["features.roomlist.impl_RoomListModalBottomSheetContent_Day_1_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_1_en",20042,],
+["features.roomlist.impl_RoomListModalBottomSheetContent_Day_2_en","features.roomlist.impl_RoomListModalBottomSheetContent_Night_2_en",20042,],
["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",20027,],
-["features.roomlist.impl.search_RoomListSearchContent_Day_2_en","features.roomlist.impl.search_RoomListSearchContent_Night_2_en",20027,],
-["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20027,],
-["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20027,],
-["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20027,],
-["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20027,],
-["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20027,],
-["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20027,],
-["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20027,],
-["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20027,],
-["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20027,],
+["features.roomlist.impl.search_RoomListSearchContent_Day_1_en","features.roomlist.impl.search_RoomListSearchContent_Night_1_en",20042,],
+["features.roomlist.impl.search_RoomListSearchContent_Day_2_en","features.roomlist.impl.search_RoomListSearchContent_Night_2_en",20042,],
+["features.roomlist.impl_RoomListView_Day_0_en","features.roomlist.impl_RoomListView_Night_0_en",20042,],
+["features.roomlist.impl_RoomListView_Day_10_en","features.roomlist.impl_RoomListView_Night_10_en",20042,],
+["features.roomlist.impl_RoomListView_Day_1_en","features.roomlist.impl_RoomListView_Night_1_en",20042,],
+["features.roomlist.impl_RoomListView_Day_2_en","features.roomlist.impl_RoomListView_Night_2_en",20042,],
+["features.roomlist.impl_RoomListView_Day_3_en","features.roomlist.impl_RoomListView_Night_3_en",20042,],
+["features.roomlist.impl_RoomListView_Day_4_en","features.roomlist.impl_RoomListView_Night_4_en",20042,],
+["features.roomlist.impl_RoomListView_Day_5_en","features.roomlist.impl_RoomListView_Night_5_en",20042,],
+["features.roomlist.impl_RoomListView_Day_6_en","features.roomlist.impl_RoomListView_Night_6_en",20042,],
+["features.roomlist.impl_RoomListView_Day_7_en","features.roomlist.impl_RoomListView_Night_7_en",20042,],
["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",20027,],
-["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20027,],
+["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_0_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_0_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_1_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_1_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListViewBanned_Day_2_en","features.roomdetails.impl.members_RoomMemberListViewBanned_Night_2_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_0_en","features.roomdetails.impl.members_RoomMemberListView_Night_0_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_1_en","features.roomdetails.impl.members_RoomMemberListView_Night_1_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_2_en","features.roomdetails.impl.members_RoomMemberListView_Night_2_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_3_en","features.roomdetails.impl.members_RoomMemberListView_Night_3_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_4_en","features.roomdetails.impl.members_RoomMemberListView_Night_4_en",20042,],
["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",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20027,],
-["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20027,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_6_en","features.roomdetails.impl.members_RoomMemberListView_Night_6_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_7_en","features.roomdetails.impl.members_RoomMemberListView_Night_7_en",20042,],
+["features.roomdetails.impl.members_RoomMemberListView_Day_8_en","features.roomdetails.impl.members_RoomMemberListView_Night_8_en",20042,],
["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",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20027,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_0_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_0_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_1_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_1_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_2_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_2_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_3_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_3_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_4_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_4_en",20042,],
["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",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_7_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_7_en",20027,],
-["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20027,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_6_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_6_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_7_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_7_en",20042,],
+["features.roomdetails.impl.members.moderation_RoomMembersModerationView_Day_8_en","features.roomdetails.impl.members.moderation_RoomMembersModerationView_Night_8_en",20042,],
["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",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20027,],
-["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20027,],
-["features.createroom.impl.components_RoomPrivacyOption_Day_0_en","features.createroom.impl.components_RoomPrivacyOption_Night_0_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20027,],
-["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20027,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsOption_Night_0_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_0_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_1_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_1_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_2_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_2_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_3_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_3_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_4_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_4_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_5_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_5_en",20042,],
+["features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Day_6_en","features.roomdetails.impl.notificationsettings_RoomNotificationSettingsView_Night_6_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_0_en","libraries.roomselect.impl_RoomSelectView_Night_0_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_1_en","libraries.roomselect.impl_RoomSelectView_Night_1_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_2_en","libraries.roomselect.impl_RoomSelectView_Night_2_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_3_en","libraries.roomselect.impl_RoomSelectView_Night_3_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_4_en","libraries.roomselect.impl_RoomSelectView_Night_4_en",20042,],
+["libraries.roomselect.impl_RoomSelectView_Day_5_en","libraries.roomselect.impl_RoomSelectView_Night_5_en",20042,],
["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,],
@@ -854,10 +870,10 @@ 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",20027,],
-["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20027,],
-["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20027,],
-["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20027,],
+["features.roomlist.impl.components_RoomSummaryRow_Day_29_en","features.roomlist.impl.components_RoomSummaryRow_Night_29_en",20042,],
+["features.roomlist.impl.components_RoomSummaryRow_Day_2_en","features.roomlist.impl.components_RoomSummaryRow_Night_2_en",20042,],
+["features.roomlist.impl.components_RoomSummaryRow_Day_30_en","features.roomlist.impl.components_RoomSummaryRow_Night_30_en",20042,],
+["features.roomlist.impl.components_RoomSummaryRow_Day_31_en","features.roomlist.impl.components_RoomSummaryRow_Night_31_en",20042,],
["features.roomlist.impl.components_RoomSummaryRow_Day_32_en","features.roomlist.impl.components_RoomSummaryRow_Night_32_en",0,],
["features.roomlist.impl.components_RoomSummaryRow_Day_33_en","features.roomlist.impl.components_RoomSummaryRow_Night_33_en",0,],
["features.roomlist.impl.components_RoomSummaryRow_Day_3_en","features.roomlist.impl.components_RoomSummaryRow_Night_3_en",0,],
@@ -867,59 +883,59 @@ 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",20027,],
-["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20027,],
-["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20027,],
+["appnav.root_RootView_Day_0_en","appnav.root_RootView_Night_0_en",20042,],
+["appnav.root_RootView_Day_1_en","appnav.root_RootView_Night_1_en",20042,],
+["appnav.root_RootView_Day_2_en","appnav.root_RootView_Night_2_en",20042,],
["appicon.enterprise_RoundIcon_en","",0,],
["appicon.element_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",20027,],
-["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20027,],
-["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20027,],
-["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","",20027,],
-["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","",20027,],
-["features.createroom.impl.components_SearchSingleUserResultItem_en","",20027,],
-["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20027,],
-["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20027,],
-["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20027,],
-["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20027,],
-["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20027,],
-["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20027,],
-["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20027,],
-["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20031,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20031,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20031,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20031,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20027,],
-["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20027,],
-["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20027,],
+["features.verifysession.impl.emoji_SasEmojis_Day_0_en","features.verifysession.impl.emoji_SasEmojis_Night_0_en",20042,],
+["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en",20042,],
+["features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en","features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en",20042,],
+["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","",20042,],
+["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","",20042,],
+["features.createroom.impl.components_SearchSingleUserResultItem_en","",20042,],
+["features.securebackup.impl.disable_SecureBackupDisableView_Day_0_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_0_en",20042,],
+["features.securebackup.impl.disable_SecureBackupDisableView_Day_1_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_1_en",20042,],
+["features.securebackup.impl.disable_SecureBackupDisableView_Day_2_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_2_en",20042,],
+["features.securebackup.impl.disable_SecureBackupDisableView_Day_3_en","features.securebackup.impl.disable_SecureBackupDisableView_Night_3_en",20042,],
+["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en",20042,],
+["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en",20042,],
+["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en",20042,],
+["features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en","features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_0_en","features.securebackup.impl.root_SecureBackupRootView_Night_0_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_10_en","features.securebackup.impl.root_SecureBackupRootView_Night_10_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_11_en","features.securebackup.impl.root_SecureBackupRootView_Night_11_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_12_en","features.securebackup.impl.root_SecureBackupRootView_Night_12_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_13_en","features.securebackup.impl.root_SecureBackupRootView_Night_13_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_14_en","features.securebackup.impl.root_SecureBackupRootView_Night_14_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_15_en","features.securebackup.impl.root_SecureBackupRootView_Night_15_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_16_en","features.securebackup.impl.root_SecureBackupRootView_Night_16_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_17_en","features.securebackup.impl.root_SecureBackupRootView_Night_17_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_1_en","features.securebackup.impl.root_SecureBackupRootView_Night_1_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_2_en","features.securebackup.impl.root_SecureBackupRootView_Night_2_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_3_en","features.securebackup.impl.root_SecureBackupRootView_Night_3_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_4_en","features.securebackup.impl.root_SecureBackupRootView_Night_4_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_5_en","features.securebackup.impl.root_SecureBackupRootView_Night_5_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_6_en","features.securebackup.impl.root_SecureBackupRootView_Night_6_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_7_en","features.securebackup.impl.root_SecureBackupRootView_Night_7_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_8_en","features.securebackup.impl.root_SecureBackupRootView_Night_8_en",20042,],
+["features.securebackup.impl.root_SecureBackupRootView_Day_9_en","features.securebackup.impl.root_SecureBackupRootView_Night_9_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en",20042,],
+["features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en","features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en",20042,],
["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,],
@@ -927,11 +943,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",20027,],
-["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20027,],
-["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20027,],
-["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20027,],
-["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20027,],
+["features.location.impl.send_SendLocationView_Day_0_en","features.location.impl.send_SendLocationView_Night_0_en",20042,],
+["features.location.impl.send_SendLocationView_Day_1_en","features.location.impl.send_SendLocationView_Night_1_en",20042,],
+["features.location.impl.send_SendLocationView_Day_2_en","features.location.impl.send_SendLocationView_Night_2_en",20042,],
+["features.location.impl.send_SendLocationView_Day_3_en","features.location.impl.send_SendLocationView_Night_3_en",20042,],
+["features.location.impl.send_SendLocationView_Day_4_en","features.location.impl.send_SendLocationView_Night_4_en",20042,],
["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,],
@@ -942,108 +958,107 @@ export const screenshots = [
["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",0,],
-["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20027,],
-["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20027,],
-["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20027,],
-["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20027,],
-["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20027,],
-["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20027,],
-["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20027,],
+["features.roomlist.impl.components_SetUpRecoveryKeyBanner_Day_0_en","features.roomlist.impl.components_SetUpRecoveryKeyBanner_Night_0_en",20042,],
+["features.lockscreen.impl.setup.biometric_SetupBiometricView_Day_0_en","features.lockscreen.impl.setup.biometric_SetupBiometricView_Night_0_en",20042,],
+["features.lockscreen.impl.setup.pin_SetupPinView_Day_0_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_0_en",20042,],
+["features.lockscreen.impl.setup.pin_SetupPinView_Day_1_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_1_en",20042,],
+["features.lockscreen.impl.setup.pin_SetupPinView_Day_2_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_2_en",20042,],
+["features.lockscreen.impl.setup.pin_SetupPinView_Day_3_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_3_en",20042,],
+["features.lockscreen.impl.setup.pin_SetupPinView_Day_4_en","features.lockscreen.impl.setup.pin_SetupPinView_Night_4_en",20042,],
["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",20027,],
-["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20027,],
-["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20027,],
-["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20027,],
+["features.share.impl_ShareView_Day_3_en","features.share.impl_ShareView_Night_3_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_0_en","features.location.impl.show_ShowLocationView_Night_0_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_1_en","features.location.impl.show_ShowLocationView_Night_1_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_2_en","features.location.impl.show_ShowLocationView_Night_2_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_3_en","features.location.impl.show_ShowLocationView_Night_3_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_4_en","features.location.impl.show_ShowLocationView_Night_4_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_5_en","features.location.impl.show_ShowLocationView_Night_5_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_6_en","features.location.impl.show_ShowLocationView_Night_6_en",20042,],
+["features.location.impl.show_ShowLocationView_Day_7_en","features.location.impl.show_ShowLocationView_Night_7_en",20042,],
+["features.signedout.impl_SignedOutView_Day_0_en","features.signedout.impl_SignedOutView_Night_0_en",20042,],
["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,],
-["libraries.designsystem.components.list_SingleSelectionListItemSelectedInSupportingText_Single selection List item - selection in supporting text_List items_en","",0,],
-["libraries.designsystem.components.list_SingleSelectionListItemSelectedInTrailingContent_Single selection List item - selection in trailing content_List items_en","",0,],
-["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.components.list_SingleSelectionListItemCustomFormattert_Single_selection_List_item_-_custom_formatter_List_items_en","",0,],
+["libraries.designsystem.components.list_SingleSelectionListItemSelectedInSupportingText_Single_selection_List_item_-_selection_in_supporting_text_List_items_en","",0,],
+["libraries.designsystem.components.list_SingleSelectionListItemSelectedInTrailingContent_Single_selection_List_item_-_selection_in_trailing_content_List_items_en","",0,],
+["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",20027,],
-["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,],
-["libraries.designsystem.theme.components_SnackbarWithAction_Snackbar with action_Snackbars_en","",0,],
+["features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Day_0_en","features.login.impl.dialogs_SlidingSyncNotSupportedDialog_Night_0_en",20042,],
+["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,],
+["libraries.designsystem.theme.components_SnackbarWithAction_Snackbar_with_action_Snackbars_en","",0,],
["libraries.designsystem.theme.components_Snackbar_Snackbar_Snackbars_en","",0,],
["libraries.designsystem.modifiers_SquareSizeModifierInsideSquare_en","",0,],
["libraries.designsystem.modifiers_SquareSizeModifierLargeHeight_en","",0,],
["libraries.designsystem.modifiers_SquareSizeModifierLargeWidth_en","",0,],
["features.location.api.internal_StaticMapPlaceholder_Day_0_en","features.location.api.internal_StaticMapPlaceholder_Night_0_en",0,],
-["features.location.api.internal_StaticMapPlaceholder_Day_1_en","features.location.api.internal_StaticMapPlaceholder_Night_1_en",20027,],
+["features.location.api.internal_StaticMapPlaceholder_Day_1_en","features.location.api.internal_StaticMapPlaceholder_Night_1_en",20042,],
["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",20027,],
+["features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Day_0_en","features.messages.impl.messagecomposer.suggestions_SuggestionsPickerView_Night_0_en",20042,],
["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",20027,],
+["appnav.loggedin_SyncStateView_Day_0_en","appnav.loggedin_SyncStateView_Night_0_en",20042,],
["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_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20027,],
-["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20027,],
-["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20027,],
+["libraries.textcomposer_TextComposerCaption_Day_0_en","libraries.textcomposer_TextComposerCaption_Night_0_en",0,],
+["libraries.textcomposer_TextComposerEdit_Day_0_en","libraries.textcomposer_TextComposerEdit_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerFormatting_Day_0_en","libraries.textcomposer_TextComposerFormatting_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLinkWithoutText_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerLinkDialogCreateLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogCreateLink_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerLinkDialogEditLink_Day_0_en","libraries.textcomposer_TextComposerLinkDialogEditLink_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_0_en","libraries.textcomposer_TextComposerReply_Night_0_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_10_en","libraries.textcomposer_TextComposerReply_Night_10_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_11_en","libraries.textcomposer_TextComposerReply_Night_11_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_1_en","libraries.textcomposer_TextComposerReply_Night_1_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_2_en","libraries.textcomposer_TextComposerReply_Night_2_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_3_en","libraries.textcomposer_TextComposerReply_Night_3_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_4_en","libraries.textcomposer_TextComposerReply_Night_4_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_5_en","libraries.textcomposer_TextComposerReply_Night_5_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_6_en","libraries.textcomposer_TextComposerReply_Night_6_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_7_en","libraries.textcomposer_TextComposerReply_Night_7_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_8_en","libraries.textcomposer_TextComposerReply_Night_8_en",20042,],
+["libraries.textcomposer_TextComposerReply_Day_9_en","libraries.textcomposer_TextComposerReply_Night_9_en",20042,],
+["libraries.textcomposer_TextComposerSimple_Day_0_en","libraries.textcomposer_TextComposerSimple_Night_0_en",20042,],
["libraries.textcomposer_TextComposerVoice_Day_0_en","libraries.textcomposer_TextComposerVoice_Night_0_en",0,],
["libraries.designsystem.theme.components_TextDark_Text_en","",0,],
-["libraries.designsystem.theme.components_TextFieldDark_TextFields_en","",0,],
-["libraries.designsystem.theme.components_TextFieldLight_TextFields_en","",0,],
-["libraries.designsystem.components.list_TextFieldListItemEmpty_Text field List item - empty_List items_en","",0,],
-["libraries.designsystem.components.list_TextFieldListItemTextFieldValue_Text field List item - textfieldvalue_List items_en","",0,],
-["libraries.designsystem.components.list_TextFieldListItem_Text field List item - text_List items_en","",0,],
-["libraries.designsystem.theme.components_TextFieldValueLight_TextFields_en","",0,],
-["libraries.designsystem.theme.components_TextFieldValueTextFieldDark_TextFields_en","",0,],
+["libraries.designsystem.components.list_TextFieldListItemEmpty_Text_field_List_item_-_empty_List_items_en","",0,],
+["libraries.designsystem.components.list_TextFieldListItemTextFieldValue_Text_field_List_item_-_textfieldvalue_List_items_en","",0,],
+["libraries.designsystem.components.list_TextFieldListItem_Text_field_List_item_-_text_List_items_en","",0,],
+["libraries.designsystem.theme.components_TextFieldsDark_TextFields_en","",0,],
+["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","",20027,],
-["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime pickers_en","",20027,],
-["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime pickers_en","",20027,],
+["libraries.designsystem.theme.components.previews_TimePickerHorizontal_DateTime_pickers_en","",20042,],
+["libraries.designsystem.theme.components.previews_TimePickerVerticalDark_DateTime_pickers_en","",20042,],
+["libraries.designsystem.theme.components.previews_TimePickerVerticalLight_DateTime_pickers_en","",20042,],
["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",20027,],
-["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20027,],
+["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_3_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_3_en",20042,],
+["features.messages.impl.timeline.components_TimelineEventTimestampView_Day_4_en","features.messages.impl.timeline.components_TimelineEventTimestampView_Night_4_en",20042,],
["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,],
["features.messages.impl.timeline.components.event_TimelineItemAudioView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemAudioView_Night_0_en",0,],
["features.messages.impl.timeline.components.event_TimelineItemAudioView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemAudioView_Night_1_en",0,],
["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_TimelineItemCallNotifyView_Day_0_en","features.messages.impl.timeline.components_TimelineItemCallNotifyView_Night_0_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemCallNotifyView_Day_0_en","features.messages.impl.timeline.components_TimelineItemCallNotifyView_Night_0_en",20042,],
["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",20027,],
-["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_0_en",20042,],
+["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_1_en",20042,],
["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_2_en",0,],
["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_3_en",0,],
-["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Day_4_en","features.messages.impl.timeline.components.event_TimelineItemEncryptedView_Night_4_en",20042,],
["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,],
@@ -1051,17 +1066,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",20027,],
-["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_3_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_3_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowTimestamp_Night_4_en",20042,],
["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",20027,],
-["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventRowUtd_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowUtd_Night_0_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithManyReactions_Night_0_en",20042,],
["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",20027,],
-["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_0_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_0_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Day_1_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReplyInformative_Night_1_en",20042,],
["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,],
@@ -1070,38 +1085,38 @@ 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",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_4_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_4_en",20042,],
["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",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Day_8_en","features.messages.impl.timeline.components_TimelineItemEventRowWithReply_Night_8_en",20042,],
["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","",20027,],
+["features.messages.impl.timeline.components_TimelineItemEventTimestampBelow_en","",20042,],
["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_TimelineItemGroupedEventsRowContentCollapse_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Night_0_en",20027,],
-["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentCollapse_Night_0_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en","features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en",20042,],
["features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemImageViewHideMediaContent_Night_0_en",0,],
["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",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en",0,],
["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",20027,],
-["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20027,],
-["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20027,],
-["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20027,],
-["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_0_en",20042,],
+["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_1_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_1_en",20042,],
+["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_2_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_2_en",20042,],
+["features.messages.impl.timeline.components.event_TimelineItemPollView_Day_3_en","features.messages.impl.timeline.components.event_TimelineItemPollView_Night_3_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemReactionsLayout_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsLayout_Night_0_en",20042,],
["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",20027,],
-["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20027,],
+["features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewIncoming_Night_0_en",20042,],
+["features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Day_0_en","features.messages.impl.timeline.components_TimelineItemReactionsViewOutgoing_Night_0_en",20042,],
["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",20027,],
+["features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemReadMarkerView_Night_0_en",20042,],
["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,],
@@ -1110,8 +1125,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",20027,],
-["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemRedactedView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemRedactedView_Night_0_en",20042,],
+["features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en","features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en",20042,],
["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,],
@@ -1124,7 +1139,7 @@ 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",20027,],
+["features.messages.impl.timeline.components.event_TimelineItemUnknownView_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemUnknownView_Night_0_en",20042,],
["features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Day_0_en","features.messages.impl.timeline.components.event_TimelineItemVideoViewHideMediaContent_Night_0_en",0,],
["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,],
@@ -1148,83 +1163,84 @@ 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",20027,],
-["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20027,],
+["features.messages.impl.timeline_TimelineViewMessageShield_Day_0_en","features.messages.impl.timeline_TimelineViewMessageShield_Night_0_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_0_en","features.messages.impl.timeline_TimelineView_Night_0_en",20042,],
["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",20027,],
-["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20027,],
-["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20027,],
+["features.messages.impl.timeline_TimelineView_Day_11_en","features.messages.impl.timeline_TimelineView_Night_11_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_12_en","features.messages.impl.timeline_TimelineView_Night_12_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_13_en","features.messages.impl.timeline_TimelineView_Night_13_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_14_en","features.messages.impl.timeline_TimelineView_Night_14_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_15_en","features.messages.impl.timeline_TimelineView_Night_15_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_16_en","features.messages.impl.timeline_TimelineView_Night_16_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_17_en","features.messages.impl.timeline_TimelineView_Night_17_en",20042,],
+["features.messages.impl.timeline_TimelineView_Day_1_en","features.messages.impl.timeline_TimelineView_Night_1_en",20042,],
["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",20027,],
+["features.messages.impl.timeline_TimelineView_Day_4_en","features.messages.impl.timeline_TimelineView_Night_4_en",20042,],
["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",20027,],
+["features.messages.impl.timeline_TimelineView_Day_6_en","features.messages.impl.timeline_TimelineView_Night_6_en",20042,],
["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",20027,],
+["features.messages.impl.timeline_TimelineView_Day_8_en","features.messages.impl.timeline_TimelineView_Night_8_en",20042,],
["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",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20027,],
-["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20027,],
+["libraries.designsystem.theme.components_TopAppBar_App_Bars_en","",0,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_0_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_0_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_2_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_2_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_3_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_3_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_4_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_4_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_5_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_5_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_6_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_6_en",20042,],
+["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_7_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_7_en",20042,],
["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",20027,],
-["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20027,],
-["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20027,],
-["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20027,],
-["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20027,],
-["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20027,],
+["features.messages.impl.typing_TypingNotificationView_Day_1_en","features.messages.impl.typing_TypingNotificationView_Night_1_en",20042,],
+["features.messages.impl.typing_TypingNotificationView_Day_2_en","features.messages.impl.typing_TypingNotificationView_Night_2_en",20042,],
+["features.messages.impl.typing_TypingNotificationView_Day_3_en","features.messages.impl.typing_TypingNotificationView_Night_3_en",20042,],
+["features.messages.impl.typing_TypingNotificationView_Day_4_en","features.messages.impl.typing_TypingNotificationView_Night_4_en",20042,],
+["features.messages.impl.typing_TypingNotificationView_Day_5_en","features.messages.impl.typing_TypingNotificationView_Night_5_en",20042,],
+["features.messages.impl.typing_TypingNotificationView_Day_6_en","features.messages.impl.typing_TypingNotificationView_Night_6_en",20042,],
["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","",20027,],
+["libraries.matrix.ui.components_UnresolvedUserRow_en","",20042,],
["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",20027,],
-["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20027,],
-["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20027,],
-["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20027,],
+["features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_en","features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Night_0_en",20042,],
+["features.createroom.impl.components_UserListView_Day_0_en","features.createroom.impl.components_UserListView_Night_0_en",20042,],
+["features.createroom.impl.components_UserListView_Day_1_en","features.createroom.impl.components_UserListView_Night_1_en",20042,],
+["features.createroom.impl.components_UserListView_Day_2_en","features.createroom.impl.components_UserListView_Night_2_en",20042,],
["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",20027,],
+["features.createroom.impl.components_UserListView_Day_7_en","features.createroom.impl.components_UserListView_Night_7_en",20042,],
["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",20027,],
+["features.createroom.impl.components_UserListView_Day_9_en","features.createroom.impl.components_UserListView_Night_9_en",20042,],
["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",0,],
-["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20027,],
-["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20027,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_0_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_0_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_10_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_10_en",20031,],
+["features.userprofile.shared_UserProfileView_Day_0_en","features.userprofile.shared_UserProfileView_Night_0_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_1_en","features.userprofile.shared_UserProfileView_Night_1_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_2_en","features.userprofile.shared_UserProfileView_Night_2_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_3_en","features.userprofile.shared_UserProfileView_Night_3_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_4_en","features.userprofile.shared_UserProfileView_Night_4_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_5_en","features.userprofile.shared_UserProfileView_Night_5_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_6_en","features.userprofile.shared_UserProfileView_Night_6_en",20042,],
+["features.userprofile.shared_UserProfileView_Day_7_en","features.userprofile.shared_UserProfileView_Night_7_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_0_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_0_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_10_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_10_en",20042,],
["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_1_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_1_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_2_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_2_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_3_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_4_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_5_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_5_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_6_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_6_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_7_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_7_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_8_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_8_en",20031,],
-["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_9_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_9_en",20031,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_13_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_13_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_1_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_1_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_2_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_2_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_3_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_3_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_4_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_4_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_5_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_5_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_6_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_6_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_7_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_7_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_8_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_8_en",20042,],
+["features.verifysession.impl.outgoing_VerifySelfSessionView_Day_9_en","features.verifysession.impl.outgoing_VerifySelfSessionView_Night_9_en",20042,],
["libraries.designsystem.ruler_VerticalRuler_Day_0_en","libraries.designsystem.ruler_VerticalRuler_Night_0_en",0,],
["features.viewfolder.impl.file_ViewFileView_Day_0_en","features.viewfolder.impl.file_ViewFileView_Night_0_en",0,],
["features.viewfolder.impl.file_ViewFileView_Day_1_en","features.viewfolder.impl.file_ViewFileView_Night_1_en",0,],
@@ -1239,6 +1255,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",20027,],
+["features.ftue.impl.welcome_WelcomeView_Day_0_en","features.ftue.impl.welcome_WelcomeView_Night_0_en",20042,],
["libraries.designsystem.ruler_WithRulers_Day_0_en","libraries.designsystem.ruler_WithRulers_Night_0_en",0,],
];
diff --git a/settings.gradle.kts b/settings.gradle.kts
index e99b6811bc..9ddcb8259e 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -70,8 +70,6 @@ include(":tests:testutils")
include(":anvilannotations")
include(":anvilcodegen")
-include(":samples:minimal")
-
fun includeProjects(directory: File, path: String, maxDepth: Int = 1) {
directory.listFiles().orEmpty().also { it.sort() }.forEach { file ->
if (file.isDirectory) {
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en.png
new file mode 100644
index 0000000000..33a9d65ee4
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_0_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b380df8a4e69e9e11337db374b682e01f96738948e69eb33886817894a049b0
+size 30716
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en.png
new file mode 100644
index 0000000000..cba7000f48
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_1_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5053e8716e3bfe5703f6d00e304101bbbf6cdebaf5eb5088a6043171a1f34e47
+size 41328
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en.png
new file mode 100644
index 0000000000..9bcb3813ac
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_2_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffbdcd28c32808fba8ffb7071b6440578716d3ae89149eb319c22d3f3b78b1ff
+size 59499
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en.png
new file mode 100644
index 0000000000..e9d68af4ee
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_3_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ccbb514ad9bd6a95ecff2e278574ac5bff9bd8a63a5fc91fa35302dbaa9e71f2
+size 55276
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en.png
new file mode 100644
index 0000000000..43814bce07
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_4_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a2ea9839e3dd1288d99c2115c37bc7fe72716af9785c4de3e328a77a57d12d70
+size 56633
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en.png
new file mode 100644
index 0000000000..b254eeceb3
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewDark_5_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b28da0e8ff5cbedf8777b5af8ff6bab2bd5c476df80878b2c28dd96a354d978
+size 54383
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en.png
new file mode 100644
index 0000000000..851051fa3d
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_0_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9dc23b7e9533aa94245efa2089956259b00882809157cf32decaaa22827aeb59
+size 31678
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en.png
new file mode 100644
index 0000000000..0371868836
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_1_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:150b375f3fa9c180ec221b3fcc3ed0397b75920cb760e25e327fd6be46370618
+size 41954
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en.png
new file mode 100644
index 0000000000..bd45e398b4
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_2_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9dc54d0a6c3cb3069482b1c27ed6d80fd63b0bcad1a550bf5c4edb09f69db3a7
+size 60749
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en.png
new file mode 100644
index 0000000000..ae54d119d7
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_3_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71c42c595070733ac8ac2c50da116e73ea6eea7dc120f6f0d28022b5a5f925bd
+size 57099
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en.png
new file mode 100644
index 0000000000..9229891a5f
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_4_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e10c1c3f2b4045d20c9513c70bc4ea041e091976df5385b93d45c2d03b8f6e5f
+size 58513
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en.png
new file mode 100644
index 0000000000..a9ab02f20e
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomViewLight_5_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb54ae79de75af32e32642063d9dc9e0c24b0089f187a043f0fc330151c72c75
+size 56170
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_en.png
deleted file mode 100644
index 28f4bd5c7d..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e7de44cc8f686264788aa79cde24b9896c6ca4dabc49b246abbd1d3dd0311e25
-size 57891
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_en.png
deleted file mode 100644
index 3131e96896..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_1_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2df49a9c82438dbf1ba0ba0670cadd8e7bb47a7e25de27793fd756760cf7c5f2
-size 79562
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_2_en.png
deleted file mode 100644
index 3131e96896..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Day_2_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2df49a9c82438dbf1ba0ba0670cadd8e7bb47a7e25de27793fd756760cf7c5f2
-size 79562
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_0_en.png
deleted file mode 100644
index a1a2247eb8..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c754daf307554dc0c83ba0f89c38f5fa7f5c2edff82907b0826c2b781498dbcb
-size 56047
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_1_en.png
deleted file mode 100644
index 2a7721de80..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_1_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b6e43161abdccacbede4a8c4b4ff446026035df4be0894a55c6364681458bb2f
-size 78805
diff --git a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_2_en.png
deleted file mode 100644
index 2a7721de80..0000000000
--- a/tests/uitests/src/test/snapshots/images/features.createroom.impl.configureroom_ConfigureRoomView_Night_2_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b6e43161abdccacbede4a8c4b4ff446026035df4be0894a55c6364681458bb2f
-size 78805
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 a8b4207c5a..6d0ff2554e 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:74f12ea2c5114363b809fcf4d897487cb87ecfab361952471c05d22898d0048f
-size 130010
+oid sha256:a9d0338485aabe5296754868ce2fcd5097d914eea28298ec11c16f7161ae2341
+size 111617
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 1dc6bb1e2e..17884e7282 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:6950f5e0824c964936077ecda4ff7edb8c8c6796b5a4ae304e6027e57a83cb55
-size 116382
+oid sha256:88584b1d4a4876e68e2972f9bbd03156127ee9b552de1ec20a9057d8f6cb1828
+size 101296
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en.png
index cfa699a1fb..d61a39ffd8 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:afa896a21369e764e32b1dd4858a34708ddf38426a4a8aaa724761e76a90fed7
-size 35316
+oid sha256:ad1a15591ad4c27119d50e14869314371a87e3afe7bd6757bf245f27c99ef00c
+size 35246
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en.png
index 503e26d994..3b528d2d1d 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2dc060e53c33a7a06895e1be02f45f7f7e52b287d87b41c76d3321a71184f525
-size 36501
+oid sha256:4a63c918393297e53f1a54b8de150ae807662ac905d5112d43812665f5a8f0ef
+size 36647
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en.png
index 7c2715d5a4..3b8317f208 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1cdff1f6e189eff691125330b0f2c733ffd16fca324a5f2faee3dd15c9b7bc90
-size 27119
+oid sha256:59bf5b8ed10344e299e5a8b977f3bc21915c500c7b79cfd44bdcc2a8a134fbdc
+size 27291
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en.png
index d8dca2e9e1..d19ed8d375 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60e85a3e25fd112009111634ddc59a6ae7d884e26ea29e0598c1af10818abcb5
-size 34285
+oid sha256:0a3339897e11dbdb7d1fa99cf208d467dc19db03599cde5e6ba21d7b19c522de
+size 34193
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en.png
index 4e8f07b36b..e25cc5f699 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9b518aa920d7183d740be4358dcc495e7df1c2d40c866addb728c7af8e273dbe
-size 35502
+oid sha256:116c5f660aca1866667814903df752ae522c4dcdee2478c7d6815bc5f427684e
+size 35317
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en.png
index 397238e47a..b1356b7efd 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.loginpassword_LoginPasswordView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a96833c5ba2508d77e1b8a1f885df78fb979fcb530223c4591076120729559e4
-size 25080
+oid sha256:30ac5683fe4cc16bd6e31745b9f479a1b1d5e2a1dcf3f18ec7bd5f7793b8fda9
+size 25273
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en.png
index 10ff32c8b1..82df9fa93b 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c66e45979657915aa7010b4796bf80865e8cb96118888c78d86e9edf0fa9bb88
-size 66346
+oid sha256:b738607cad294fea5617f81e4d410896704c395ffcf4118c25228e1d4ab693ba
+size 66436
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en.png
index d736d0539e..a8c9d456c2 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.error_QrCodeErrorView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:341782379e27258de391ba5d9713172eda666a593ca3040c9cfff96aaff72825
-size 64908
+oid sha256:d35646ae638353674a985215cc521db18e8ae6df7de3d241767ad5c994985814
+size 65036
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en.png
index d9ce823ce3..82ce0ef3c6 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:788722dec315d910767e187eb6c868fb85918d0220c7b923fed82fae736c7c38
-size 49947
+oid sha256:b1b50c558703a1fb83dfd8b4dcc8484fc3aaf019e4ab466f0e515db401f0797d
+size 49999
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en.png
index f1282c1430..8c19f1aef2 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b08155f87cc38f33eeaf8d1c1a71760ff3620e8db384159721c49648555a0beb
-size 48509
+oid sha256:c2227b4a58b2a42b08dd41b5955504e23738bc1c49318c4e39c994d550a70bf2
+size 48524
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en.png
index f09673883a..2f53a21181 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:958606fd01dc7126836329f57c04913561cdc667cb47bd86d4a1cde654abd7f4
-size 48458
+oid sha256:d664509d4d3b3f3124952fd477d1cf990ede82a47bba9ddd0d44644b2a67e4a9
+size 48628
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en.png
index 638c8a7ad9..2bdb4a7c27 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.qrcode.intro_QrCodeIntroView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3bf3c0ad50dd204809f7ef0aa95a38e9f18b52fe17943807a732aa4c74d962a7
-size 46027
+oid sha256:717c8d869250d8a8f253fee4340daf95397975cd9eb0795e134541e6c7015b58
+size 46078
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en.png
index b64472a105..20e860f636 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4054b601d6afc38467b632a19a5e12540b21dccbd67a885bcc13f8ad8a86636e
-size 23532
+oid sha256:a5419be4719399829da9684e6635873168f274120738e43c0b101603d8499da1
+size 23562
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en.png
index 60bb996a68..610ae09cd9 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:99fae3f838aa948b77391ef87d71ef56f2ac68b734bfdbd9c2b1868793dba192
-size 51583
+oid sha256:cd128a94f904caabcd0557b2d7742e743fe80ad8618d96148dc469d7c0f3a006
+size 51651
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en.png
index ac2ae3d61a..ba71162aab 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2426456773a27afb8daedb3d4ce8d03901d5b4c5a92c034537a79cd0ed018b0b
-size 23067
+oid sha256:d27d44214d8f083ee8ecbda76e060167af26f00052c9c0acb43b77e87432ae54
+size 23084
diff --git a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en.png
index 0568c90329..1fd3bef78f 100644
--- a/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.login.impl.screens.searchaccountprovider_SearchAccountProviderView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b929faac1dc1e016ae59333941612231fdc56ceeba56515b28d7e768e7fce4e2
-size 50630
+oid sha256:ecd37beb7a097aadda38238b36327dc5da809834f489c583146b9189d4e8a628
+size 50563
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_0_en.png
index 1609605195..5646cfc974 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:de520c3c0cf2133c2f862e061055b24d11a9fd7b54644b7aaaa989a8ecbe466f
-size 76719
+oid sha256:168ccd4dd8afa84f6e08bd18b29a14a90474d3d05d14a13047ad766186ffafc6
+size 77524
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_1_en.png
index 6de57394eb..e4aca60ed6 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0ac8095520e4a80826f34733f90d1cb3d56601f194edbd890508a6fc6f31eadf
-size 75246
+oid sha256:2fc2fd1c67088e29a3d8e2dc633b411cd8256d821243d5d2f96bcf6b8e5ab6cc
+size 75979
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_2_en.png
index 5f5dc77631..72a8572757 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a9d2f18ee31a3370c08ba437ac21173538117b8fcdfeb45665677746c9fdd335
-size 60790
+oid sha256:cd29b3483f20da49930f1bc65c04c25a5ba045a8cf7557ca65df26be3663d94a
+size 61388
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_3_en.png
index 2c11d0356b..d9780d03bf 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:59af9b4f6e390612464e8e83a1fbc0657a4bbd8c954c160e10c05bc6d48442fc
-size 55191
+oid sha256:e26369765383ad4e9d22dc0c0a2945fc28ebfcdc5f8f387dcebcc3db859de544
+size 55677
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_4_en.png
index aef51abcde..750f375c62 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d244fa646c87a6379d14eab9fa182652479473b5c77559e4631f3ffa19c0e1c4
-size 52134
+oid sha256:cf8e762edb7915238e9f2dc3b71b32d44659a02e031b169d004eb15b497e45c4
+size 52747
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_0_en.png
index c346f0501b..2195039d1f 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:babfe5dd3b5eaff3cddeb3a09b6cc72c86241510311bad2322d3938919dd6e01
-size 74907
+oid sha256:288f1451dddbb41d0a45b99f8d06f89fcdc87b6f29696af18a6873062675fede
+size 75681
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_1_en.png
index afe1729971..aa553071e2 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cca5bcbc56dcd6b47e4608682a0a343eb612a0185332e245ca0025336a09bcd0
-size 73344
+oid sha256:1cc6acf5ef063b3bf4d101afe0c65435e2c4a68990ab3e860f57ad0bc18b32ec
+size 74073
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_2_en.png
index 143b0eafcc..6ce596eacc 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:88e989abce89da86ef8a7e2a4e036ac3ff9b41e38270edc3be9959a18cd4c86c
-size 57191
+oid sha256:d5fdc298a5f3320d57d5709f8d979b13712351d2b29e01be88f1ad43b9bb04bf
+size 57856
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_3_en.png
index 510ffd2f60..3e2f5cc07f 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9264c3aab735dc4546e9a12eb7698ad4572c911489906310044c8a5c65336a56
-size 52219
+oid sha256:f32a16cdf84a60cc3d74fb86201355dbcae8ec3dbb4b95c1999e0106752299f9
+size 52817
diff --git a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_4_en.png
index 84a9dab2b6..083aa6f999 100644
--- a/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.logout.impl_AccountDeactivationView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c7e9d33860371dd2a280175f9482e43589aeaf92f443e3d7cb7ab487cdef1dfb
-size 48737
+oid sha256:2132cd35e731279fba539e10b2843b1ae012d1db7e01653e2f0ec60c054e9061
+size 49369
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_0_en.png
index f0d070f178..faac664042 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:85690981c628723b7ae353fe82277967dfda763953d0fca91e2575e3d8d84c25
-size 43788
+oid sha256:8fb068f011864a5045c7bd65ffba67bd4b9234f42f40960c1eba1408328f5b3e
+size 43782
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_1_en.png
index dc5c2db4e2..4c690b2ad6 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d57f594ecf21d414ed0c301b30aa400ad3d04ca4aacae647899ae7550db7521a
-size 45012
+oid sha256:741ad1b881c9598c42c91603e84166768b5dc5a713ec191dc1c34c05360dbb92
+size 44908
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_2_en.png
index 25a08ad8a2..f3ff960999 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f81c06c3cbc14d8f9528a36f46ea9b39510f6eb9b1f93e731d4a182ed2a9dba8
-size 44549
+oid sha256:0da11f0f4d9c191218e0d45caa37620db92311bbf126788a1ac1d84ca03b63a5
+size 44444
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_3_en.png
index 17d1bc9b96..95b367439d 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4fba92eab1bbfc9338db2581f8375c3edf09b3130e7997c1016cf0dcf782284c
-size 43209
+oid sha256:cc14af0383a159fbba7dc643e0d925db9ff8c4b22c2e38afcda20b504fd53d93
+size 44165
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_4_en.png
index 43cdcee43a..5d41f0021c 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fc2bdf0c222a688693e3df942b1c359f0e53799e1a81288f2a04a73bb53929c4
-size 34245
+oid sha256:e96f672af0dd6a622deb18bfccea861cb51b63c3355e85ee8a8db6543e3de05c
+size 33803
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_5_en.png
index 25a08ad8a2..f3ff960999 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Day_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f81c06c3cbc14d8f9528a36f46ea9b39510f6eb9b1f93e731d4a182ed2a9dba8
-size 44549
+oid sha256:0da11f0f4d9c191218e0d45caa37620db92311bbf126788a1ac1d84ca03b63a5
+size 44444
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_0_en.png
index 881b25bfc9..a8c5947ca0 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f2801aecec234fa032e060262f030aebbf39cd23c9d4bfa014caddd422e93ffb
-size 42482
+oid sha256:0e8cdaa2d979c68923e554754a6b5e5d9b31040988c2d4e6fc8248a28a8aa8dc
+size 42409
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_1_en.png
index 379aba6481..7b65db25b3 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d0b38c4e39ce03f0fbdcb51425872a3ed096d58b5c16d05ced11bea882053c58
-size 43652
+oid sha256:ca3973d21ea5575ab0921f78c4443c69c21f1f3f07ca78612c57bfe58b261002
+size 43748
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_2_en.png
index 1de6cb8edc..69b169cdbd 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a26fb7c853e0dd27b48a5d9ef247067f6bd8f8668695949be592dca1e54d3634
-size 43311
+oid sha256:f46c2d027a11f6dfca7edabc3d12ca7feed43c9688007c7cac9b654fb6fd6710
+size 43411
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_3_en.png
index 66366c0610..6172536ca1 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c79d8c292de4b8dab500345a737274d84580f3d8c886652988c004363f975597
-size 42179
+oid sha256:4b5219d31af9590df4e78041af6cf217cfadd7cbe67753b22e919758e4a31f53
+size 42608
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_4_en.png
index 272384b9a1..6aa5ce2698 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:02826a3e3870f8c64a91a1ef0662cf2aa17818481e1c1d5f6ac3512eadb614a5
-size 32041
+oid sha256:85e3ccef2770f569ad2b062b9d7b86438b95e7235bf4d511621fa21dc2086f3e
+size 31504
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_5_en.png
index 1de6cb8edc..69b169cdbd 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.report_ReportMessageView_Night_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a26fb7c853e0dd27b48a5d9ef247067f6bd8f8668695949be592dca1e54d3634
-size 43311
+oid sha256:f46c2d027a11f6dfca7edabc3d12ca7feed43c9688007c7cac9b654fb6fd6710
+size 43411
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en.png
index 0e351e48ff..96a9770836 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a18ab0b1b73878ccb52efccbad03cec0a47cd2e48628248b82bd4b6af53bbf21
-size 8665
+oid sha256:d0e53ece51bf03c62b187ae05bc4fdd71d9f30dcc9b4c18a50cfcb4619419091
+size 12673
diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en.png
index 641334db46..a2c8680640 100644
--- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.event_TimelineItemLegacyCallInviteView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:45b9560a7e0bca74f9d9e8c308a79943bcd34371e0ee6918bc496cadaadf94d1
-size 8642
+oid sha256:f1bbb9c0beb334a94920f3f9f7f6458fa2ea164661a5d78cebb71470368f98ee
+size 12565
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_0_en.png
index 0a4843710c..6e1625ccf9 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1dfe32bea70bff2eb009cde05441a8476701366d34341468a96101c336630c3d
-size 32242
+oid sha256:b85dc08c15c268ae04b6a89d630587a600d1f32cd2fffe72902ac1ab3f7d398f
+size 32057
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_1_en.png
index 982ca17542..e2c022d9f5 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c34faf032e7f38b49d9bb7e99c8688f9e1c7fd821d951a26c52b2bb4bc9cf24d
-size 36637
+oid sha256:d1d455bd313f90002307e23823e14189bf53ebd0f0b1cfa4478514d2bb8ab7d0
+size 36440
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_2_en.png
index 166116ffaf..bd04c5bf99 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5199a5d1f36ee96a30c81dd328dee7c07fc96fd5eab8a4b93f2fe33ccef4405d
-size 38989
+oid sha256:470d70f74c6c5560f5324874b2cedd0458614e3bdf6c65356879eb42ff337bb2
+size 38892
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_3_en.png
index 1a1c1c60de..5ad1a9fa71 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3153a4e0b95bc3c6cd7c1424e864c9e1aadee95eee6a66fa03e760e9cd7cb10f
-size 44462
+oid sha256:cc85c3e76d57bc1b46a427ecee9ca64c238c419a346a43cd52d3a6e9f4199ed4
+size 43958
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_4_en.png
index 1135ce3e0a..1f5b915481 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:85a96fa375f9c77754feb70676a7aeb23803f9688bf3de6e61ebdf39062f42f1
-size 27219
+oid sha256:3399b98bd9f8d3ba2175125656db8871ba14ec98f80595d7be95bf8438a33219
+size 26803
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_5_en.png
index 79c07b1081..011fcd4c77 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:df844f42580ca97e481656b04056ab0ae02b32c83bb6d46411c9d60040b5cf86
-size 117912
+oid sha256:d59fb94b1c8430065b7e40b413d250e631511acfac88cb01c24cf63e3d354cc1
+size 117561
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_6_en.png
index 6a14c1b30d..6cae2b6c8b 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:96d2015cfd86eec443b94263da66c769df35135e8319d19bcab137a2b363d51a
-size 32781
+oid sha256:23ccb6cb1ea3bc23c062760488e7ee2d6bb46a6f706702d11f910428b02a1b71
+size 32714
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_7_en.png
index 3ef5b7dbdb..7a19add67e 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Day_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7af8a815fbdf00bc72ee8bdadfeb2d328b28d0f5a25d845f195889af8abba25e
-size 32770
+oid sha256:05bc4899a147b59134494910e51c3ee884a15ea9c34a6d93f999cc4332852c7b
+size 33487
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_0_en.png
index 4c023d0b88..1a643f3ed9 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:16d14b57d5299dba1cec83f416d6283065281ab5a50f7cb72286d7cea3d2dff5
-size 31067
+oid sha256:3f12091a5467d727b48926ab2182ae7def5f1a7820044613d0a15fbd4bbd622c
+size 30976
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_1_en.png
index 38ce73f9ce..66ddd34ffd 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:18713df330ee3b81cd015e09151e4b4a4739ddd3201a15f8d2e1286ee16b2d1e
-size 35436
+oid sha256:921d30810d6e1b6abfbd24bc7cef4b90916db0b41dccfd7de2298f81882fb5c7
+size 35224
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_2_en.png
index 303d1e090a..fb7e9f53a0 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fef21564c727e0937748abcff1cd9ca45a54bfafe70176d7110f5321de9e7acf
-size 36436
+oid sha256:a07d6cc47b853a2f51aa8250290a5d618d702a40150bbae221bee9f2588828f9
+size 36271
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_3_en.png
index 88da781a18..1026132862 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a218321a53ef189108aa19985bead154eb33afd4be5adf364ad0c0569bf003bf
-size 43054
+oid sha256:fe35cfe537168054a634faeb6c10519b2d13b694d532b152728df588c2f3649a
+size 42636
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_4_en.png
index e3585c7091..b3ea2e859a 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fe01f18063cdaddfaa8f3d9c3395d5dba73c1726908b28e60a945d40a83c5978
-size 26468
+oid sha256:58a98bf2a38cb65d90f8e6181b70b673078830182d9f506598df5bda75cfdfd7
+size 26089
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_5_en.png
index 74f5b54223..8034eed4c2 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d7dccaaf3da114e97fdaf89b000fe62d1b8235402edd3d4027e970746057f154
-size 114209
+oid sha256:4af7eec8cb1d89c71a9b2fe1efb28dbb956bac465e215ba7414432d7a37c272f
+size 113942
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_6_en.png
index de3c373e40..fa4924465e 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0885f4af4e3e8afd56aaeb44f517b75eb087d9f21e1095da2c8a3590715a8672
-size 31669
+oid sha256:6e66b8b86ecd2f3febc7121384357db22a0d0cd5ca5b6155bb2c02dc9fc43180
+size 31627
diff --git a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_7_en.png
index f25bae71b0..99146240cd 100644
--- a/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.poll.impl.create_CreatePollView_Night_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cf1b3633e2a946b3a63c326cdad8ab14dfb4d1d5b41c06754924a696cde47ea5
-size 30290
+oid sha256:00e648be36e7ff1c8bed368491579ed0467b970d9863ce576b2d5e53f822c62e
+size 30896
diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en.png
index 51d11a709a..ebe539290c 100644
--- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f1c5669f63f761311a49a7d82475ccd7463bdb5051db9add2875e13514272690
-size 20189
+oid sha256:4362307104a54c1e65ffe79765b54ce9b11ea482f1965d6ec2a8642b023110a6
+size 20108
diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en.png
index 232c02e380..62382326ad 100644
--- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fe8c7f7de0d56bfc60af6771fd076104687e1f123ced09dfdedc625c03431458
-size 20361
+oid sha256:221e75077d503dc234772e3d3352055311e08290539f104e02c8a21463f03369
+size 20239
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_0_en.png
index 4ccbd24a00..47c56784a2 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b1a27216d9fb2e6d28109f6f414c0a06598103c69d182cdf5e926c930ac0a6b0
-size 69545
+oid sha256:cc804b1b40c10b55b33e33e1614de72cc5b8592762f2319cc2aaf2ac60583671
+size 69614
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_1_en.png
index e8406bc31f..226f7fd4a0 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:97ddd11519803c8d042e593c0d231051bc9518b4fbe2f63d80792ea34319442f
-size 87044
+oid sha256:cf191b543c1b87e0c33965c215b842f05e0f07ab86a4fbc2b2acbd577dc4df17
+size 108891
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 65ed8f2d7f..139444ef1d 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:f6fd4487ae63d2116b70a31b5ee8d18135cf735f6257134afd6572b0dbe1ac5b
-size 63216
+oid sha256:d964de0d0cc6b2210690c99f77bfd70d41173f71893a2c072565101a84982583
+size 66203
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_3_en.png
index 4ccbd24a00..47c56784a2 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b1a27216d9fb2e6d28109f6f414c0a06598103c69d182cdf5e926c930ac0a6b0
-size 69545
+oid sha256:cc804b1b40c10b55b33e33e1614de72cc5b8592762f2319cc2aaf2ac60583671
+size 69614
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_4_en.png
index d0a6434341..1ef3153edc 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1c2cd5fc3c6bef3f6cfc9f1d61bee2e2e41829ae3e77a3d8de31cf2168c25f61
-size 52908
+oid sha256:ebfd71c25bee58cc440f8e5537a2b981fc92552be3f6076b41f3d0642e70c60e
+size 49385
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_0_en.png
index eb78b02621..b5e31ad1bd 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ca62ad16aa94477303c61f1796d6fff8262fde99c3b31184538f6ae9234dc950
-size 67807
+oid sha256:e153740038de710dfd3b636fa60100f814c966ffc4cbb26b84f9f388ae1f0771
+size 67551
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_1_en.png
index 31901f0629..9c504ddc54 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f625b162bbd3172e953676219de6ba00e0cb34f0acbcda5ff6847359e7b867e3
-size 85035
+oid sha256:2497fd0b7d7ae2e8da0a69e36a34c0dd7f7c8abb52b95005cd961b3c5c4b8734
+size 106454
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 d48c9371bb..d9d0bab7bc 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:23f505a91ebe3438f52c65f53362fc2d5cca57a8959e5459722217541ec24fc9
-size 62030
+oid sha256:de1bc2159d3c9fe8ddfa2b1c078b66a40a839e45f9c33f8744aeaec58f5a238e
+size 63800
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_3_en.png
index eb78b02621..b5e31ad1bd 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ca62ad16aa94477303c61f1796d6fff8262fde99c3b31184538f6ae9234dc950
-size 67807
+oid sha256:e153740038de710dfd3b636fa60100f814c966ffc4cbb26b84f9f388ae1f0771
+size 67551
diff --git a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_4_en.png
index daa0f1683f..3434446cdd 100644
--- a/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.rageshake.impl.bugreport_BugReportView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bbe73e23b4217cf10f3a5d50483bcd4d1fdc956b35129e66133c1c9ee26595bd
-size 49536
+oid sha256:d31b50c1c79d1172e773a3106adb01232eb89058a12ab89232c6bcf6fae577db
+size 46143
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en.png
index a12d8d94a7..271b1db86f 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e534ca2cc96a4b7a0e840eb18d153479f9e641348216fb4237c431dc8ef727d4
-size 27831
+oid sha256:2450f444e0e4c7a0f354ff8a38225df5b0255280924996b0d4d40b72fdf0438f
+size 27737
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en.png
index 72dec9f406..03fc0029be 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:31f588a58c0e79c37edbdcc72748fb1cd69e15e2313f48c5800fcf7f473d1f57
-size 21509
+oid sha256:d546519848aa915e33bc8b609cc4feda8037e22048acd063b13c829c6339fa72
+size 21584
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en.png
index cbe4baa6d3..b6876d8b49 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1e085b1745cd0445b7954af882a73b50bbd4dea74ec6def5d49562f6839c6095
-size 29353
+oid sha256:fc00c11dc9c4dcac7f5f80d463959180480ceb0cc2de2ff4482eeb44f3d32c99
+size 29198
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en.png
index 9ac879967d..7fc3c24267 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:54f82d574bca5f68787bc239ecd58cfcae94f1e6dd2f760e48dd033aba784df9
-size 53535
+oid sha256:09f520d47af8427aa51e0a1938adab74c3433952a68c248e090a8f99454e39bf
+size 53466
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en.png
index ed56e112d2..c85a8c79cb 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cea328e94f7fedd4a0d592a0c67ecc9f4b3b1b35e0b54151c3f965f850625502
-size 27342
+oid sha256:d6c94f82d01b1f15b2164f8b4f6c7cb450b071b3d8320e59ab1054d5755677eb
+size 27780
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en.png
index 6bab2cf57f..39abb04b86 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:87f8feb9d779a8c5e5fa8015e8d4ada01e57ae93b439bc8899f0e3ed2bab63be
-size 27481
+oid sha256:fd520888d25aac08da3424046ddc65e4699184b22eee13ba469688b3ca7e5d20
+size 27810
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en.png
index ff1af3dc3e..eec74de6e1 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6409d38501ea210df531b74b3b738348e53249fcae65960171cee8856381e3ea
-size 26006
+oid sha256:829d54c37b33372bf9ebf37cea2f6513264fe774e8b5626504bbda90116f8ff0
+size 26335
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en.png
index 0c20d41838..c42cf7ec6a 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1822081b86aa17204d227e369d079f93bf3e55786dfbd78ef8a75f247f880fc7
-size 23969
+oid sha256:42d3eb319375fec8c129dc19d09c08905604a308a3e6fd10126741c07734427e
+size 24521
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en.png
index 2d095adb03..21eb4ca527 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2244f0a3d3a52f80f3fd1000d2bad32780865bca788bd42a961ed4f70f7c003f
-size 27078
+oid sha256:bf2fc6f445b89571a86c5e65ee891903b8a99ca3234372d8d61b684ef882fdf7
+size 27206
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en.png
index b30c0f7ca4..fb7f2c605f 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f680b481a827995e012cd5a2d8312c7f716031e2142f829c98fa8b0e4d52fffe
-size 20943
+oid sha256:a3be82b15c29d320ed317c522247330c4ec517292311dd662828391ff47522f5
+size 21306
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en.png
index 4feb318cc2..569901c769 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:73b2156af0a1abe814e0a21a76db8b01bf02122feaf7a4d056b8079633e39a8d
-size 28415
+oid sha256:c13b24c426826901e7685023c4340e6735e81ffb86f76b7c47baaf38551e5a71
+size 28733
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en.png
index 0556245426..b28ab7612f 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:982bd12f8fd1f0e1ed849d581b27c23da763c7f8a87f3c5c6fcd6b434c2a7763
-size 52298
+oid sha256:400496a45d13d72c6149cacfdf7474924526a02c7ffbe6624db90d0142e5e557
+size 52431
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en.png
index ed5f2416cf..dec9ae8efc 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:52636fbfcc05ae12af708bb2917824fcd1a9412effdc1cab99f0e7653182e587
-size 26767
+oid sha256:ea758d10506a20bf4839a2de8a8842ae6d1148e484c90d170d41cd6b8a8375f1
+size 27238
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en.png
index f52afa8147..d3f4466b51 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:46479f053f64e87550d7e4a857bcb9248376f6d372c1e9ccc7c3e1652da2a1e7
-size 27019
+oid sha256:fbadd329f9221064b1ae90f6b15ea88326416756e384f5273a45c75f718b2a28
+size 27246
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en.png
index af3c7a55f0..105523de61 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ee31b96d17043a217b28cf3be1635ce3946e2da3d59915156063c42f68317a48
-size 25276
+oid sha256:39c9282d0a9f37cc60ee40711b40c77b02d8f14936b9421e62de8f3b85e6f56a
+size 25428
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en.png
index a72eac504b..330b047c97 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ab06d1af4bf44f75ee8df25fcb5e18043c0620ee39c99fd1854da0d12017bfeb
-size 22054
+oid sha256:1b815487466740046b86cb0f4e94b081f25c7d499e5a121dad50cdc77cbe4d1a
+size 22581
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en.png
index 325e878a28..3fd226bf2d 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e9f0629e8c3e8ecba64ae0a0a535b14f3b1be9dd6be1e12890340d102d0e4e1a
-size 12095
+oid sha256:8fbab73e2fda7b60e4b9b7033a5fdc1bcff1dc1e921783add8b1fb2b12bfafeb
+size 12062
diff --git a/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en.png
index 57ce65003a..a58b44d26f 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomdirectory.impl.root_RoomDirectoryView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:00afd0d99cc415ec5c66a45030c22067d2ef06208ab9085a3929c3f586579062
-size 11776
+oid sha256:74751abc4f122ce216ca5ded8dc76a040b6512572f0f89b9fa53b5d8cbd7bde3
+size 11801
diff --git a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_4_en.png
index 8952f01b7f..a465700eef 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a78abedec8a3aad14bf6368bf73d46621feaf8e6fd6e019d381077ef05856259
-size 72236
+oid sha256:f07e339529fa15809163745520ccd2d187d858f88148a37e59ec9df1d9559cdd
+size 46528
diff --git a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_5_en.png
new file mode 100644
index 0000000000..8952f01b7f
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Day_5_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a78abedec8a3aad14bf6368bf73d46621feaf8e6fd6e019d381077ef05856259
+size 72236
diff --git a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_4_en.png
index 1e6d6d626d..ef72333797 100644
--- a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f60d07c4be6d75142e753dec5071f7a6d5dd15519d87a2eb491b708fa7aeea4b
-size 70917
+oid sha256:44b0af23c318bc8c4e881bca9ad61127d821d4d82f43de2d9e785860bbda2fcf
+size 45038
diff --git a/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_5_en.png
new file mode 100644
index 0000000000..1e6d6d626d
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/features.roomlist.impl.components_RoomListContentView_Night_5_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f60d07c4be6d75142e753dec5071f7a6d5dd15519d87a2eb491b708fa7aeea4b
+size 70917
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en.png
index 71f1c06f51..a99b9983d4 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:31f2c1ef58dfc4c920ac8d61a8dd2958ff82cf9f91debfd46bfada6deb18cfe9
-size 31018
+oid sha256:a45c0e66b8d59b6de1098c045bbfb569f2b89cac7adcdeaf047f0e86bb59fc78
+size 31000
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en.png
index b1dec49d67..ba8b461617 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b5cd4599e7d0273342e3516186c64c37c226a9d44c7118c531180cc6d046ff73
-size 42566
+oid sha256:f0c54496802024e69121e25c1cd3511d75b1075311f1c423cd3af104f07b96af
+size 41809
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en.png
index 0f0e6c24e4..b8b51abc53 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c8cfb86d41e722a2763d5057a61420523616a8079e1eff2fe4f42bd8e1a39926
-size 40970
+oid sha256:8da1db7454b4c44e819b11843463efba938742e978ed8766a0f21be6b98e5457
+size 41982
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en.png
index 4c10c82ea7..10afe56dbe 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e4733b4eb3cc0ee05a5a6c3ed3e7225b02652c749f960dc8ff5b6a935096b6aa
-size 37556
+oid sha256:5f97c75b04f7cd57c7a08b3c62e8af31af4d605c286e3c25b113466c381e93bc
+size 34813
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en.png
index be95e6c6f5..4d0bc5abb7 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a1524460802a0c67be437c959180cc4a1c4d62f41740ce17585eceaf885aa537
-size 30156
+oid sha256:4bd36481fb2c487f4f133ffc07327400a18a40c8bdd38faf123f7b68f7486148
+size 30168
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en.png
index 53cdc5766f..98f6f11dc1 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a92bbc948b7897351853648815f4120997bd1e8a7fd8ed1b3382aaebbb3046f6
-size 41321
+oid sha256:090e8fde4c17b3373b2263ef3971926f512ccc3e7106c50c6c6530d442f83c0e
+size 40676
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en.png
index a6a35cde79..f8935973c7 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:012d2c461808280c0de92babf28b12b2183e9e1a082b66f1c1bf4f3abfc55ded
-size 40352
+oid sha256:fdd1b95451a1665f67510f85f719d331cd860af37aa715f099eff6e7eb4bd50a
+size 40551
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en.png
index 4c3e2fb0f7..85c54d2961 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.enter_SecureBackupEnterRecoveryKeyView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:491522ac006703f66cf714ac8e878ba441f3f882e40b4d017acd8df2833cafd1
-size 34892
+oid sha256:69a66d53ad549932b67c2e36c96b02e97af5e1306513473533c8f89dd671d30b
+size 32376
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en.png
index 3bd23182aa..9320e7331f 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ee82b280a52f787856523288343f68a29180ed4c98bcf7aa96092c1263c5d278
-size 27767
+oid sha256:89135aa932f161844b79ef452bb27e2f5bcd19aa9e7cb19224c719ab948798f5
+size 27769
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en.png
index edd8b0cd4a..0f0176fae1 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dac05c4536e94b1e92b86f1e87a02231116327fa174f592359470badf8492b4d
-size 27128
+oid sha256:c02ce7bd87c240ab7cbcabcee98c6ac16db46351185ea97a032d52b09b479e59
+size 27095
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en.png
index edd8b0cd4a..0f0176fae1 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dac05c4536e94b1e92b86f1e87a02231116327fa174f592359470badf8492b4d
-size 27128
+oid sha256:c02ce7bd87c240ab7cbcabcee98c6ac16db46351185ea97a032d52b09b479e59
+size 27095
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en.png
index 4d3e4f163e..93c6c2bcce 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:db80e3f9d7ba7602be4d81a3b1650ea3a87fabe0cc8790c6eeb48e58a0368e62
-size 39173
+oid sha256:65b6d9fdfdc3adb0b0ce567e1561c677f6562043a6e9e2a3b74fd7318b02ec0f
+size 39500
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en.png
index 77eb724c82..e433e7f7fa 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b70eb163266038ff41c6ea11b6e4bc2efac00f49c3d61947593c0252528c3720
-size 26891
+oid sha256:e7f56cc2df34363c65ad46025d2a22189fbf050183c29ae76b30120f879a1a62
+size 26855
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en.png
index e96a5e2501..9f24d1adcf 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0b72f44ab61d9be69e89c53ffe2aa6a9083884d04745fb07cadaa061a9eebcb0
-size 25170
+oid sha256:379cd0a7132bdbb92a6a17962da378b7b44113be9530fe75304be3318ea2c129
+size 25128
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en.png
index e96a5e2501..9f24d1adcf 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0b72f44ab61d9be69e89c53ffe2aa6a9083884d04745fb07cadaa061a9eebcb0
-size 25170
+oid sha256:379cd0a7132bdbb92a6a17962da378b7b44113be9530fe75304be3318ea2c129
+size 25128
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en.png
index 3237de9395..b8253e844c 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.reset.password_ResetIdentityPasswordView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6e5aca1ae42fafb0b87e5c51f71ac5e97124f03517515f598bdf80423745655e
-size 37633
+oid sha256:41d1e2bcc7baf2b813a6cce22d238afe8f68976b3d2c57388aa5b8e4f02de59e
+size 37733
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en.png
index b1ddc8db95..9939b2f5fc 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:76aa1a5ebc4d4700b9c17bd96a860ec66f0f0290174f60bbff421d0621548d43
-size 16369
+oid sha256:0bc6ca9fdca5e61bcbc490eda3faa9931212a1fcf8836b756c629d64f71dfb44
+size 16285
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en.png
index 81cd9ef6bd..038951f048 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_10_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a863693929a6250605f5e5e42a2f8d71754d42f34c8bf9ed2ae0ae58adbd2f4b
-size 25822
+oid sha256:83d3af95f371fa0ba0ae6cb1a6cc9b70b79854f7f81469bce0560d1c907f9b05
+size 25106
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en.png
index ed0a8b9082..d1811ab5d7 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_11_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6ac5a1746221af73564def12131e625cdcdc91995d404018a79a67453eca7586
-size 23954
+oid sha256:1cdbf634db3e6bab6aefa4f4e15d533d5e70bf4022b8928437db5d5720c6ce3a
+size 24956
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en.png
index 81cd9ef6bd..038951f048 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_12_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a863693929a6250605f5e5e42a2f8d71754d42f34c8bf9ed2ae0ae58adbd2f4b
-size 25822
+oid sha256:83d3af95f371fa0ba0ae6cb1a6cc9b70b79854f7f81469bce0560d1c907f9b05
+size 25106
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en.png
index 575270d44d..28d3677398 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_13_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a323eab11b6a82cdf97a7e9848f5eff1c65a1e14582a9af703753cc2a3950d46
-size 20738
+oid sha256:8f0b8162f77e5e95f8cbcfda27c038cd11ccfa57402c58601501f90222af9e73
+size 19907
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en.png
index 8ac2360af9..64b1a49349 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5bcd30abc12ac1febb2fd694617d9fe1bd68ff7a193cc05eacc15d1506f3db8e
-size 14129
+oid sha256:515442ef3d33d93b172ce0db8b0f2b06be2eee7137933128cf414223d8161b33
+size 14044
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en.png
index 95ed37d088..e3c391e6ba 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:029ea36e197ead95a2fcff4f9ae5ab35e55bae8fcf67d329d05df5c3c1ad0384
-size 22627
+oid sha256:ea7920d1f69056b78471a4f789a02282d6929c72d542e4863affffa1cd99bbd1
+size 22611
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en.png
index 95ed37d088..e3c391e6ba 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:029ea36e197ead95a2fcff4f9ae5ab35e55bae8fcf67d329d05df5c3c1ad0384
-size 22627
+oid sha256:ea7920d1f69056b78471a4f789a02282d6929c72d542e4863affffa1cd99bbd1
+size 22611
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en.png
index 425c102017..1ea727091e 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a05ec1dbaa4efe16276ef9e284e7eaac194d4ca060524f2fd116465d4f4a5b19
-size 16563
+oid sha256:4d53449b4f515a15207ed194469d56266f77c7208856c8481bba4bc89d681ec3
+size 16472
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en.png
index 8ac2360af9..64b1a49349 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5bcd30abc12ac1febb2fd694617d9fe1bd68ff7a193cc05eacc15d1506f3db8e
-size 14129
+oid sha256:515442ef3d33d93b172ce0db8b0f2b06be2eee7137933128cf414223d8161b33
+size 14044
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en.png
index 95ed37d088..e3c391e6ba 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:029ea36e197ead95a2fcff4f9ae5ab35e55bae8fcf67d329d05df5c3c1ad0384
-size 22627
+oid sha256:ea7920d1f69056b78471a4f789a02282d6929c72d542e4863affffa1cd99bbd1
+size 22611
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en.png
index 95ed37d088..e3c391e6ba 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:029ea36e197ead95a2fcff4f9ae5ab35e55bae8fcf67d329d05df5c3c1ad0384
-size 22627
+oid sha256:ea7920d1f69056b78471a4f789a02282d6929c72d542e4863affffa1cd99bbd1
+size 22611
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en.png
index 628791c0ad..bca61b74a8 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_8_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5a7a11c7250ba0e10daad801bfe6a726598846b4e0283c0e8c776ea335322822
-size 15041
+oid sha256:36c8c0c86e5c95ef4be21b4ed8d85c9b8806c7becf1e2ad4df4d58304738dd7f
+size 14922
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en.png
index 2de490b655..3d71d19c06 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Day_9_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:76c6a15c5c16839ad79f70686705f6e460d7f66934f446ddc27d97e80fc45093
-size 14845
+oid sha256:d9b209f9dfe08204ba05bf328891f7694fa726580236daa9c1f1acec3fa9e684
+size 15249
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en.png
index 6d04cbba5b..ec9abfb944 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:78fcd3ba4aca3e25a7d183cb83286bd0ba805f48796db034207e60a99dcb20c6
-size 15810
+oid sha256:484f2b3e592efbc3913cac20ce6cc7df3fe9424f0b40a16faaa870858756d847
+size 15750
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en.png
index 6f51ce1216..5e0d2ab66f 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_10_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:49405aa331a1a70a78c93fba40b1dd3a4dac6ed27aefb27f5a223a9fa81a0ee2
-size 25419
+oid sha256:66298221f90426334e9e87d8109720d491ab63297d3075ab4f864ab4b7d1bb3e
+size 24562
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en.png
index 71af2f7722..b7dac9879d 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_11_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f27c044ef1b5c169a0c588f37885bc91f25d69484156e0dc1d70ae72b0f8ca3d
-size 23997
+oid sha256:b340f63dca138f63bae876b56d7e987301ac7f81657f727f270c0b2000c71661
+size 24008
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en.png
index 6f51ce1216..5e0d2ab66f 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_12_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:49405aa331a1a70a78c93fba40b1dd3a4dac6ed27aefb27f5a223a9fa81a0ee2
-size 25419
+oid sha256:66298221f90426334e9e87d8109720d491ab63297d3075ab4f864ab4b7d1bb3e
+size 24562
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en.png
index e1adcc704e..5fa7a98304 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_13_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b3fd84eb20d7e427d0dbf051068400c43ede9f4a90953f2e243e62c73512faac
-size 20291
+oid sha256:29f9580058e15bafde24d9619c159e3c81eb0097ffd04d655b8377dc33e0454b
+size 19337
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en.png
index 55df3a686a..7eaaa4292b 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:400700ea092e1182d9774f0f717df1085f129fd6c37765d09dff762ffeed9e66
-size 13626
+oid sha256:33d7d1c4a7ff4e1fd82963969721b23326f7a86c4f716b877b5f65455c564902
+size 13572
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en.png
index 1de83a2983..ad35d903c9 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:773b5215bb2250e91c8c96bb858488a3acdcb965432406bf75a83fc2d16374c5
-size 22090
+oid sha256:92c11a80a52d977e27f560c7d9b80e87328ebf14406647c62c05a4c6c962e2d9
+size 21978
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en.png
index 1de83a2983..ad35d903c9 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:773b5215bb2250e91c8c96bb858488a3acdcb965432406bf75a83fc2d16374c5
-size 22090
+oid sha256:92c11a80a52d977e27f560c7d9b80e87328ebf14406647c62c05a4c6c962e2d9
+size 21978
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en.png
index 4bf8a8087d..2c27fddc9a 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4194ce2cc2259d89ebfaa7dd220bb6ecedf3c0e635a1610d99c2bb2302254ff5
-size 16029
+oid sha256:597682e1dc18488401665fe4404fc98f4d76a6587cd142d9e41e826138affc32
+size 15961
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en.png
index 55df3a686a..7eaaa4292b 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_5_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:400700ea092e1182d9774f0f717df1085f129fd6c37765d09dff762ffeed9e66
-size 13626
+oid sha256:33d7d1c4a7ff4e1fd82963969721b23326f7a86c4f716b877b5f65455c564902
+size 13572
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en.png
index 1de83a2983..ad35d903c9 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_6_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:773b5215bb2250e91c8c96bb858488a3acdcb965432406bf75a83fc2d16374c5
-size 22090
+oid sha256:92c11a80a52d977e27f560c7d9b80e87328ebf14406647c62c05a4c6c962e2d9
+size 21978
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en.png
index 1de83a2983..ad35d903c9 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_7_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:773b5215bb2250e91c8c96bb858488a3acdcb965432406bf75a83fc2d16374c5
-size 22090
+oid sha256:92c11a80a52d977e27f560c7d9b80e87328ebf14406647c62c05a4c6c962e2d9
+size 21978
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en.png
index 3f750cd028..d2d7e00a19 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_8_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c71f8dd48aede422c0cf6fb0979052577a0f5381bc558521549388a415e0e7f1
-size 14869
+oid sha256:11d2e076cec22755149fe625bf85a3660f568b9af444c80727284fa63a547ff4
+size 14624
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en.png
index 9038c62a70..e1976d785a 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup.views_RecoveryKeyView_Night_9_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4b80150effc46fbb667f2724ea31781a777231914389154142e0fbe341132bf2
-size 14681
+oid sha256:4b4217ff75eda9c99f57de1053935cfb761a334a0f891109fee567391361223a
+size 14619
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en.png
index 8cb4366256..5f5470c52c 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:95f32675a4220b75fd09530db3f97dad1da0b6a5bbc437b740db1da36481de4b
-size 42617
+oid sha256:226b0e80f8b0b39c0413bc72ad145b6edebb71f58bb1ad7d41dda49776b09f4d
+size 42643
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en.png
index da4b250916..15916a2f9c 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6901a2702035fc9cbb9e2047844c7644556bee72145f533c41f2cb2cbe166a35
-size 40334
+oid sha256:4ac77b3456739f0abae3d05b03b35a17ff7b7d7a625f1bebd9b36b6c759e7e7d
+size 40367
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en.png
index 046fddd15c..c8d4132209 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e6f0aee13c4ad36408edbbeb2fd3350010fe0a47a1f861dfed014ab133674a17
-size 57571
+oid sha256:3a4aefb49b16a1bed3547d1259e3159590ef6428a73687b8b4bfdc9a9eea45e5
+size 57599
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en.png
index 046fddd15c..c8d4132209 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e6f0aee13c4ad36408edbbeb2fd3350010fe0a47a1f861dfed014ab133674a17
-size 57571
+oid sha256:3a4aefb49b16a1bed3547d1259e3159590ef6428a73687b8b4bfdc9a9eea45e5
+size 57599
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en.png
index c916630cac..cb557befe2 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9cdf1234089633a8794f6f8f0f0d149dd9c210beec8715fc5dd111d34e619754
-size 51277
+oid sha256:db5e61758f4decd9422be2ad11e595510cffb2433d42ec97923e4a7e3dc2610e
+size 51310
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en.png
index 9782068f8c..6dc2165b3d 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3dfb18ea5f87f3e8d58c4555a42bbba10b7d4525131c8b40b135a65428a84f09
-size 41465
+oid sha256:459f4185a7c9eaaedd179fdfa117fd730238277995c6520a7e0eba084762a640
+size 41368
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en.png
index a247b43508..a62217d12e 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:41c4860deea7a74984b997c0f2489bb6aa9f0225f91ea97d3beda42f385e926b
-size 39184
+oid sha256:029a76515d629b66668f174ff55d5bc26be19e1a2d708f282b2de6213b1575cf
+size 39090
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en.png
index 615f9fbe33..ff6109ec98 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:aa6b6b8b44fbd9b99a7e2e58d37a27806eac5a663028ee37e24f465b0e92d1bd
-size 55978
+oid sha256:b5b7a4b6d22c15e79ab8e547f10cf5298964d6de4ac5f6b10e0fd12380322350
+size 56012
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en.png
index 615f9fbe33..ff6109ec98 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:aa6b6b8b44fbd9b99a7e2e58d37a27806eac5a663028ee37e24f465b0e92d1bd
-size 55978
+oid sha256:b5b7a4b6d22c15e79ab8e547f10cf5298964d6de4ac5f6b10e0fd12380322350
+size 56012
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en.png
index d252ad2507..3c9ab417db 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupViewChange_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:91668ddafe791de3d0a095777b9c29c79796d7e3c417dcb5270b202d671b31d9
-size 48569
+oid sha256:d8a88518bc44f9554dbe9db6c86c51f26f54aff7172dfa1a011e8c10b0f8dac6
+size 48564
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en.png
index 81b37b2e72..bd4be5fcb3 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:46554d24e2ccb5a655be40bc79909d2bb3fd04d9fcf914fb8839d915587fff47
-size 44091
+oid sha256:aaf674ca4ba02eaaff9f07fdc6374c5b195e7b9c8eb2e03b875e2690a236a975
+size 44115
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en.png
index 231778f22f..0cb67f883f 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e925e2547d3d8cb7322897c0a242cc92e658e9dc1b5fa8e5bbc4c3fc3597e4a5
-size 41906
+oid sha256:9a96a86966223eb3ae22be485d8a7faf7607f0f9de8462419ad13772c55a8a76
+size 41939
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en.png
index 046fddd15c..c8d4132209 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e6f0aee13c4ad36408edbbeb2fd3350010fe0a47a1f861dfed014ab133674a17
-size 57571
+oid sha256:3a4aefb49b16a1bed3547d1259e3159590ef6428a73687b8b4bfdc9a9eea45e5
+size 57599
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en.png
index 046fddd15c..c8d4132209 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e6f0aee13c4ad36408edbbeb2fd3350010fe0a47a1f861dfed014ab133674a17
-size 57571
+oid sha256:3a4aefb49b16a1bed3547d1259e3159590ef6428a73687b8b4bfdc9a9eea45e5
+size 57599
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en.png
index c916630cac..cb557befe2 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Day_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9cdf1234089633a8794f6f8f0f0d149dd9c210beec8715fc5dd111d34e619754
-size 51277
+oid sha256:db5e61758f4decd9422be2ad11e595510cffb2433d42ec97923e4a7e3dc2610e
+size 51310
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en.png
index d003e9a1da..4c5e8940c8 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_0_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e6e8254736a5a4cdd8e8c52c4b51906700f9c2bff5d656a6797ca3400008cf50
-size 42927
+oid sha256:19b68c0545f4b087d19f5f54f3bb104077dcde4622cd5a51803c34ff8111db67
+size 42837
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en.png
index de6c73827c..af5a72d802 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_1_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:634a2ed76e3b115bb6175fe2801cbef3fb29c284f139a8577c201d1cdea2fc03
-size 40820
+oid sha256:b1fae355b34c7b34026bbf932f3e6ba44483e8c39d2d1d3de45f638fd370024f
+size 40729
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en.png
index 615f9fbe33..ff6109ec98 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_2_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:aa6b6b8b44fbd9b99a7e2e58d37a27806eac5a663028ee37e24f465b0e92d1bd
-size 55978
+oid sha256:b5b7a4b6d22c15e79ab8e547f10cf5298964d6de4ac5f6b10e0fd12380322350
+size 56012
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en.png
index 615f9fbe33..ff6109ec98 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_3_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:aa6b6b8b44fbd9b99a7e2e58d37a27806eac5a663028ee37e24f465b0e92d1bd
-size 55978
+oid sha256:b5b7a4b6d22c15e79ab8e547f10cf5298964d6de4ac5f6b10e0fd12380322350
+size 56012
diff --git a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en.png
index d252ad2507..3c9ab417db 100644
--- a/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en.png
+++ b/tests/uitests/src/test/snapshots/images/features.securebackup.impl.setup_SecureBackupSetupView_Night_4_en.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:91668ddafe791de3d0a095777b9c29c79796d7e3c417dcb5270b202d671b31d9
-size 48569
+oid sha256:d8a88518bc44f9554dbe9db6c86c51f26f54aff7172dfa1a011e8c10b0f8dac6
+size 48564
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Day_0_en.png
deleted file mode 100644
index 4e06772c0c..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Day_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ac669fc5626f60320dda16688b0599a197280da22e27758c87688f7f8fec4ae5
-size 14150
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Night_0_en.png
deleted file mode 100644
index 6c57d5a30b..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledOutlinedTextField_Night_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:83d6aa049ceff9ba6bab17e1996ff44574c07891e7f9b60380e0f61dda6e284e
-size 13769
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Day_0_en.png
deleted file mode 100644
index 71588e64cb..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Day_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5c8905196759bf6cb4e6356680a7f8d93fa473ba6017a4feda565ed5ffc43ec4
-size 13952
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Night_0_en.png
deleted file mode 100644
index 54dee379fa..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_LabelledTextField_Night_0_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7ae1f13ecbece64e632aca00e5b47d5803d019dc200b1a28a89cb31576f38ca1
-size 13152
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldDark_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldDark_TextFields_en.png
similarity index 100%
rename from tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldDark_TextFields_en.png
rename to tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldDark_TextFields_en.png
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldLight_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldLight_TextFields_en.png
similarity index 100%
rename from tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldLight_TextFields_en.png
rename to tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldLight_TextFields_en.png
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldValueLight_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldValueLight_TextFields_en.png
similarity index 100%
rename from tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldValueLight_TextFields_en.png
rename to tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldValueLight_TextFields_en.png
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldValueTextFieldDark_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldValueTextFieldDark_TextFields_en.png
similarity index 100%
rename from tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldValueTextFieldDark_TextFields_en.png
rename to tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_FilledTextFieldValueTextFieldDark_TextFields_en.png
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFieldsDark_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFieldsDark_TextFields_en.png
deleted file mode 100644
index e5ab138790..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFieldsDark_TextFields_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e3be1334f8b50ddfce1ceea0c29d4e63ff2e0a71e33d883378602595eceff3a
-size 37003
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFields_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFields_TextFields_en.png
deleted file mode 100644
index 4949183d4e..0000000000
--- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_OutlinedTextFields_TextFields_en.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5cac7aa6102e8f463adfefa90fc4946129624138156df43a3dcf066382138e99
-size 36198
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsDark_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsDark_TextFields_en.png
new file mode 100644
index 0000000000..f0177c8a61
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsDark_TextFields_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:165bbcda11115c490250a86ac45d84277362a8c0fc0931473f1dc729b5eaa70d
+size 42804
diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsLight_TextFields_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsLight_TextFields_en.png
new file mode 100644
index 0000000000..806bbe951c
--- /dev/null
+++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme.components_TextFieldsLight_TextFields_en.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86b121d1b8c7ea4b2401ca6ea36897b630f41b5fa9961c5bcb8746a142b8c26f
+size 44373
diff --git a/tools/localazy/checkForbiddenTerms.py b/tools/localazy/checkForbiddenTerms.py
index 3178c66c3b..f687809f2c 100755
--- a/tools/localazy/checkForbiddenTerms.py
+++ b/tools/localazy/checkForbiddenTerms.py
@@ -23,6 +23,8 @@ forbiddenTerms = {
"screen_onboarding_welcome_title",
# Contains "Element Call"
"screen_incoming_call_subtitle_android",
+ # Contains "Element X"
+ "screen_room_timeline_legacy_call",
]
}
diff --git a/tools/quality/check.sh b/tools/quality/check.sh
index 4d3e1c6856..97dedd54b1 100755
--- a/tools/quality/check.sh
+++ b/tools/quality/check.sh
@@ -18,5 +18,4 @@ set -e
./gradlew runQualityChecks
# Build, test and check the project, with warning as errors
-# It also check that the minimal app is compiling.
./gradlew check -PallWarningsAsErrors=true