From a3558e5b216f1fefa7edcdbf1125705f0177f3b6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 17:31:10 +0200 Subject: [PATCH 01/69] Changelog for version 25.07.0 --- CHANGES.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 4b0b22eb03..1883ee0080 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,79 @@ +Changes in Element X v25.07.0 +============================= + + + +## What's Changed +### 🙌 Improvements +* Change : handle invalid invite error by @ganfra in https://github.com/element-hq/element-x-android/pull/4909 +* Add ability to zoom on video. by @bmarty in https://github.com/element-hq/element-x-android/pull/4916 +* Change : sync moderation and safety preferences with server by @ganfra in https://github.com/element-hq/element-x-android/pull/4962 +### 🐛 Bugfixes +* Restore `MarkdownEditText.focusSearch` override by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4908 +* Fix duplicate usage of a `modifier` variable in `TextInputBox` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4928 +### 🗣 Translations +* Sync Strings - new translations to Danish by @ElementBot in https://github.com/element-hq/element-x-android/pull/4913 +* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4983 +### 🧱 Build +* a11y: Add scripts to enable and disable the talkback service by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4906 +* Update min api level to 33 for Element enterprise by @bmarty in https://github.com/element-hq/element-x-android/pull/4960 +### 🚧 In development 🚧 +* Rename module roomlist to home by @bmarty in https://github.com/element-hq/element-x-android/pull/4955 +* Home navigation bar by @bmarty in https://github.com/element-hq/element-x-android/pull/4964 +### Dependency upgrades +* fix(deps): update dependency org.unifiedpush.android:connector to v3.0.10 by @renovate in https://github.com/element-hq/element-x-android/pull/4871 +* fix(deps): update dependency io.sentry:sentry-android to v8.14.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4892 +* fix(deps): update dependency com.google.crypto.tink:tink-android to v1.18.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4897 +* fix(deps): update wysiwyg to v2.38.4 by @renovate in https://github.com/element-hq/element-x-android/pull/4907 +* fix(deps): update dependency org.robolectric:robolectric to v4.15 by @renovate in https://github.com/element-hq/element-x-android/pull/4901 +* fix(deps): update dependency androidx.sqlite:sqlite-ktx to v2.5.2 by @renovate in https://github.com/element-hq/element-x-android/pull/4898 +* fix(deps): update dependency io.mockk:mockk to v1.14.4 by @renovate in https://github.com/element-hq/element-x-android/pull/4912 +* fix(deps): update dependency org.robolectric:robolectric to v4.15.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4911 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.6.23 by @renovate in https://github.com/element-hq/element-x-android/pull/4917 +* fix(deps): update dependencyanalysis to v2.19.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4932 +* fix(deps): update dependency org.jsoup:jsoup to v1.21.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4914 +* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.6.25 by @renovate in https://github.com/element-hq/element-x-android/pull/4936 +* fix(deps): update dependency io.sentry:sentry-android to v8.15.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4938 +* fix(deps): update dependency org.maplibre.gl:android-sdk to v11.11.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4939 +* fix(deps): update dependency com.google.firebase:firebase-bom to v33.16.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4945 +* fix(deps): update dependency io.sentry:sentry-android to v8.16.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4941 +* Update sdk to version 25.7.1 by @bmarty in https://github.com/element-hq/element-x-android/pull/4966 +* Update haze to v1.6.6 by @renovate in https://github.com/element-hq/element-x-android/pull/4968 +* Update dependency com.google.gms:google-services to v4.4.3 by @renovate in https://github.com/element-hq/element-x-android/pull/4946 +* Update android.gradle.plugin to v8.11.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4931 +* Update dependency io.element.android:element-call-embedded to v0.13.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4969 +* Update dependency org.matrix.rustcomponents:sdk-android to v25.7.2 by @renovate in https://github.com/element-hq/element-x-android/pull/4967 +* Upgrade compose bom to 2025.06.01 by @bmarty in https://github.com/element-hq/element-x-android/pull/4970 +* Update kotlin by @renovate in https://github.com/element-hq/element-x-android/pull/4918 +* Update dependency io.element.android:element-call-embedded to v0.13.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4977 +* Update dependency org.matrix.rustcomponents:sdk-android to v25.7.3 by @ganfra in https://github.com/element-hq/element-x-android/pull/4976 +### Others +* a11y: Make isTalkbackActive() live. by @bmarty in https://github.com/element-hq/element-x-android/pull/4903 +* a11y: improve accessibility on grouped state events header. by @bmarty in https://github.com/element-hq/element-x-android/pull/4902 +* Room debug info by @bmarty in https://github.com/element-hq/element-x-android/pull/4904 +* [a11y] Improve accessibility of message composer by @bmarty in https://github.com/element-hq/element-x-android/pull/4900 +* refactor: Migrate SQLCipher Android to new API by @ShadowRZ in https://github.com/element-hq/element-x-android/pull/4874 +* Iterate on avatar to be able to render Space avatar. by @bmarty in https://github.com/element-hq/element-x-android/pull/4921 +* Simplify syncing the room list when receiving a push by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4915 +* Add unit test on ChooseAccountProviderState so that the coverage is above 90% by @bmarty in https://github.com/element-hq/element-x-android/pull/4924 +* Iterate on avatar to be able to render Space avatar Part2 by @bmarty in https://github.com/element-hq/element-x-android/pull/4923 +* Introduce SessionEnterpriseService. by @bmarty in https://github.com/element-hq/element-x-android/pull/4925 +* Simplify message composer layout by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4884 +* Display error dialog if Element Call can't be joined by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4919 +* misc : simplify timeline diff logic by @ganfra in https://github.com/element-hq/element-x-android/pull/4930 +* Navigation bar component by @bmarty in https://github.com/element-hq/element-x-android/pull/4940 +* a11y: improve content description of the close buttons by @bmarty in https://github.com/element-hq/element-x-android/pull/4943 +* Element Call: remove top app bar and add it inside the webview instead by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4927 +* Replace the Report a problem button with the app's version on the on boading screen. by @bmarty in https://github.com/element-hq/element-x-android/pull/4944 +* Split RoomListPresenter and introduce HomePresenter by @bmarty in https://github.com/element-hq/element-x-android/pull/4958 +* Add "View avatar" content description to all clickable Avatar that will open the avatar preview. by @bmarty in https://github.com/element-hq/element-x-android/pull/4948 +* [a11y] Ensure that the focus is not lost when the send button state change by @bmarty in https://github.com/element-hq/element-x-android/pull/4975 +* [a11y] add missing heading() qualifier on screen titles and other headers by @bmarty in https://github.com/element-hq/element-x-android/pull/4980 +* misc (tracing) : add new TraceLogPack.Notification by @ganfra in https://github.com/element-hq/element-x-android/pull/4981 + + +**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v25.06.3...v25.07.0 + Changes in Element X v25.06.3 ============================= From 649fedd13411d4db7d291444ef5292273942ef46 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:38:24 +0200 Subject: [PATCH 02/69] Update dependency io.element.android:compound-android to v25.7.4 (#4984) * Update dependency io.element.android:compound-android to v25.7.4 * Update screenshots --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: ElementBot --- gradle/libs.versions.toml | 2 +- ....impl.crypto.identity_IdentityChangeStateView_Day_1_en.png | 2 +- ...mpl.crypto.identity_IdentityChangeStateView_Night_1_en.png | 4 ++-- ...rypto.identity_MessagesViewWithIdentityChange_Day_1_en.png | 2 +- ...pto.identity_MessagesViewWithIdentityChange_Night_1_en.png | 4 ++-- ...ponents.virtual_TimelineItemRoomBeginningView_Day_0_en.png | 2 +- ...nents.virtual_TimelineItemRoomBeginningView_Night_0_en.png | 2 +- .../images/features.messages.impl_MessagesView_Day_14_en.png | 2 +- .../features.messages.impl_MessagesView_Night_14_en.png | 4 ++-- ...ces.impl.user.editprofile_EditUserProfileView_Day_0_en.png | 4 ++-- ...ces.impl.user.editprofile_EditUserProfileView_Day_1_en.png | 4 ++-- ...s.impl.user.editprofile_EditUserProfileView_Night_0_en.png | 4 ++-- ...s.impl.user.editprofile_EditUserProfileView_Night_1_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_0_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_1_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_2_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_3_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_4_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_5_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_6_en.png | 4 ++-- ...res.roomdetails.impl.edit_RoomDetailsEditView_Day_7_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_0_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_1_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_2_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_3_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_4_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_5_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_6_en.png | 4 ++-- ...s.roomdetails.impl.edit_RoomDetailsEditView_Night_7_en.png | 4 ++-- ...system.atomic.molecules_ComposerAlertMolecule_Day_1_en.png | 2 +- ...stem.atomic.molecules_ComposerAlertMolecule_Night_1_en.png | 2 +- .../libraries.designsystem.icons_IconsCompound_Day_1_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Day_2_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Day_3_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Day_4_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Day_5_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Night_1_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Night_2_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Night_3_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Night_4_en.png | 4 ++-- .../libraries.designsystem.icons_IconsCompound_Night_5_en.png | 4 ++-- ...aries.matrix.ui.components_EditableAvatarView_Day_0_en.png | 4 ++-- ...aries.matrix.ui.components_EditableAvatarView_Day_1_en.png | 4 ++-- ...aries.matrix.ui.components_EditableAvatarView_Day_2_en.png | 4 ++-- ...ies.matrix.ui.components_EditableAvatarView_Night_0_en.png | 4 ++-- ...ies.matrix.ui.components_EditableAvatarView_Night_1_en.png | 4 ++-- ...ies.matrix.ui.components_EditableAvatarView_Night_2_en.png | 4 ++-- 47 files changed, 86 insertions(+), 86 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fa90db9e3f..77e212c2ec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -163,7 +163,7 @@ coil_network_okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version coil_compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } coil_gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" } coil_test = { module = "io.coil-kt.coil3:coil-test", version.ref = "coil" } -compound = { module = "io.element.android:compound-android", version = "25.4.4" } +compound = { module = "io.element.android:compound-android", version = "25.7.4" } datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "datetime" } serialization_json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_json" } kotlinx_collections_immutable = "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0" diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en.png index 970f1aa848..952553eaa9 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e83fdb82f802f77ed962957c059a027ab6c1aba43a996fda824c188ea26e136a +oid sha256:80de620de0ecc9cd6db0c3a9fa0d67c1d514200fb42bcac5b0393975bfe4bc82 size 23662 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en.png index a164702f81..a53afd3478 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_IdentityChangeStateView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d3c8f5951f9a447f5f35912ca8ed4c7c845bc4f51d628c6238e61bcc0c3c56e -size 26479 +oid sha256:68485e718edc2659b095f602c9f778a79a28f855d73f1d426c444548103d9162 +size 26481 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png index e439e53ed4..00ddfcc0a1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9af45d39c400733792e3053e38612205a8c61ef044101d6beca4710b29e12e7b +oid sha256:8ead97d45b6ff18a36c589af87a07a3f7e415a1308b7b5cd327de76631063f71 size 63435 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png index 19313223b2..794cff0c98 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4511572afb1134a5af14cd5cc0bfc248602761b1b32e35608de7dcba97830ae1 -size 67284 +oid sha256:b37969501cdec9c6cbd3604058c420fc95ca239743dcf8f6e88903d3c76c563b +size 67268 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en.png index 829cf58db8..c264f38320 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4494a2cf13d267a1051ea3fbe4476d2354b8c7827d1b93aabacf5bbe063dc3a +oid sha256:8a61096a39c95a1fdb8f5fc5e39ff71bdb43ec64af0ee50b575d0e1fd2a09809 size 49269 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en.png index 8e03a6e18d..889900fd05 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:affff20aa09000132ffa8535a81d888263e9d530144c8b96e15d25c1873254c9 +oid sha256:b48ffe713223ef479bc91af9e4d59c04d38e593bcf31b0f7a16599af843ff798 size 54426 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png index 38e26d3deb..d0882a2b9b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45ead771fc133b1c992d090f35c93f0de4166b52966b818d8a401e75e5b63caf +oid sha256:c9894c3227570abf19ab6ce261a2ddaebea2477edc6fb4a4b23d12938e78c376 size 62982 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png index 2b750a8c5c..81f5cff0d3 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5864ca4671dee1caef50d0444ffdeb0c7d2a5d9ed28ebc64937efbc469f6031a -size 65288 +oid sha256:a065f9ba8b1429468d4f4d704d124338ded9661fb1eaa66ca4bcb00f02fa5516 +size 65287 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 ebe539290c..73823b0a96 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:4362307104a54c1e65ffe79765b54ce9b11ea482f1965d6ec2a8642b023110a6 -size 20108 +oid sha256:9e88c784690cb846217cb08a16a68ab12ad73c439ed07732b05efc81600b2491 +size 20216 diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_en.png index cd12b08a00..1f7f0262f5 100644 --- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69fdae3edcd02635868f209a2c1ff21ce807ffb4c6d44dcf89fb0f54e1b9c1f3 -size 68396 +oid sha256:4d8d3dec50ab8f93bc65bdba13f84f295af03c4c7004f2067ef844a8e3c4aaa8 +size 68498 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 62382326ad..6b8df38a04 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:221e75077d503dc234772e3d3352055311e08290539f104e02c8a21463f03369 -size 20239 +oid sha256:bf7d6dcac1221ab0fb0f25d7910ac4648a9fe8ab09ed92724458c85621292dee +size 20333 diff --git a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_1_en.png index 5d291def2f..a18091d92f 100644 --- a/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.preferences.impl.user.editprofile_EditUserProfileView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6da7fb8d713d5d8255593f2007edf068870dbd05225fe2c0562d197a1739b876 -size 67313 +oid sha256:63eebc8e41010e14e7faa69ba90471090951ad3f267fdd034d24fa809b622692 +size 67416 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 271b1db86f..95baa54893 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:2450f444e0e4c7a0f354ff8a38225df5b0255280924996b0d4d40b72fdf0438f -size 27737 +oid sha256:063e1d70c882b99d099d405300676ec0ff3ed7c800598dc45424f6008bd6a81d +size 27810 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 03fc0029be..cc3228d573 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:d546519848aa915e33bc8b609cc4feda8037e22048acd063b13c829c6339fa72 -size 21584 +oid sha256:cc07d312df950c7f33fe58b9da8cd8b11e17226f7e866526d1e9984396e76502 +size 21648 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 b6876d8b49..8ad56ab91c 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:fc00c11dc9c4dcac7f5f80d463959180480ceb0cc2de2ff4482eeb44f3d32c99 -size 29198 +oid sha256:7529a1e06fab335eb0bbd9d384d02a14cea43dcce41dc13ea1b0cad4d127ee11 +size 29273 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 7fc3c24267..3b931b076a 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:09f520d47af8427aa51e0a1938adab74c3433952a68c248e090a8f99454e39bf -size 53466 +oid sha256:33a81fab26b314e11bf7f1479046117f834b7134e7dbfe626e9670362ea5a8e1 +size 53532 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 c85a8c79cb..8d62ceaecd 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:d6c94f82d01b1f15b2164f8b4f6c7cb450b071b3d8320e59ab1054d5755677eb -size 27780 +oid sha256:9966b5e425cdd767c6cd97dbae52206d431bd51b31a40081f32771cc4a8eb925 +size 27847 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 39abb04b86..2c634b21d2 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:fd520888d25aac08da3424046ddc65e4699184b22eee13ba469688b3ca7e5d20 -size 27810 +oid sha256:2ca6da4e1dca4ff35f777817b9a1e739d29b23f45825af31de6a21589377a665 +size 27886 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 eec74de6e1..bb9fb1c4a3 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:829d54c37b33372bf9ebf37cea2f6513264fe774e8b5626504bbda90116f8ff0 -size 26335 +oid sha256:ccb90c765621cbfda6fc36edf034a5855827f020a84ec90a4aed4219b046c800 +size 26412 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 fe9ccf95c8..e96ef824ea 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:746c563d3c8b213e49d8bc888ac6a90f8d13e1189761ff7a84eab9c9a35b2d59 -size 24635 +oid sha256:eea956e38d50bebbadb7a8ab45ccdd21a2e26af8c870b1189433448c3e41af88 +size 24708 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 21eb4ca527..9e38dfcfaa 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:bf2fc6f445b89571a86c5e65ee891903b8a99ca3234372d8d61b684ef882fdf7 -size 27206 +oid sha256:e74041d78b698ce79f47f4d10027824e660f0b367569c225105c37ee22224a7c +size 27287 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 fb7f2c605f..5bd0d62f07 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:a3be82b15c29d320ed317c522247330c4ec517292311dd662828391ff47522f5 -size 21306 +oid sha256:722c96f3142cec365070a3b92123d19be3b139f563cb498723b13ebdea472532 +size 21378 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 569901c769..18c6aedce5 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:c13b24c426826901e7685023c4340e6735e81ffb86f76b7c47baaf38551e5a71 -size 28733 +oid sha256:ced82069f961ac321d16abea2e4b0518fbbb9d489c4efbdeb4192158bb39a4a5 +size 28810 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 b28ab7612f..cc23741977 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:400496a45d13d72c6149cacfdf7474924526a02c7ffbe6624db90d0142e5e557 -size 52431 +oid sha256:3990a3ed3398dbc9f59275edb0afe963216e3ec452b4866f74af0a5c319c3fd8 +size 52491 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 dec9ae8efc..e8f290cfe9 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:ea758d10506a20bf4839a2de8a8842ae6d1148e484c90d170d41cd6b8a8375f1 -size 27238 +oid sha256:404db46f224a2c55b5ac6d5ddcb87a4cb967761c0ea4d663ca5cae5ad5dee578 +size 27313 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 d3f4466b51..4abb3f9a25 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:fbadd329f9221064b1ae90f6b15ea88326416756e384f5273a45c75f718b2a28 -size 27246 +oid sha256:3a79102f1ed14cd016875770034431bed04f359df79ebe6e0d1db492eb2e2dcd +size 27320 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 105523de61..a56f4a2604 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:39c9282d0a9f37cc60ee40711b40c77b02d8f14936b9421e62de8f3b85e6f56a -size 25428 +oid sha256:2880e5456c55916ff8ad0502e60c104c5d4aa58d3c6a4d243864bfaa9d3b98ff +size 25476 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 7551562c32..1542894925 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:cf01269f065287238ef3577d148ff892dfb1caf7087c31149093ef9be65dc26c -size 22726 +oid sha256:78df9d391a3e532bef74a855ced55d705e01bfe152932a2c72066dbcb41d5575 +size 22786 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en.png index 4acefcbed4..8033bcd5e9 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95584a554516e7be186493122d5b29b66ffc51de4cc729b135ae3410f1a096de +oid sha256:c99d695f21b0994f534622fc03e8fea34d29bc0450c0bd916468ab13becd0cd5 size 20080 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en.png index e083a61ab1..17bb975624 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:590b3650efc22d14e6c9ce87f0f7c725b50e84822cfc7246db3b65960c452640 +oid sha256:9fc151d23b47f7032ac8fa1bf3654ace0a50af70ed8db3822a28a202e6dd2476 size 23227 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_1_en.png index 290b2c8ba5..108da8fc5a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:157aeb4a1d97133db7034252e5a3ecea2f0c0732f826a63ce6c37edc4c3c3f73 -size 67544 +oid sha256:74cbf9a9c670a0c54a5888c0a7158e3fd307877d4eb5a4d30aefe190db16c296 +size 68219 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_2_en.png index 91ad1bf4eb..52a0080851 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af91b96c2163cbbbf01111f4d875dcb9662c07369cdb3c456cd86178e0173e6c -size 72302 +oid sha256:388e30d071ded06bb90bb1805632f8f9fa21b7d589ad56eb152811d4fa26523d +size 72647 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_3_en.png index 90932cbd1c..7d1519a8c5 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f5b7435cfcf0955e39ce197efaac36e6ff379777c969165aed5a069926a1d2f -size 73134 +oid sha256:e5f2bd6771d925883ada62f9330a1bf7c117ed2292635f814b4484f0c069fc7a +size 73019 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_4_en.png index 613b2d48fb..69dcbe4c53 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c76d53e450b677ada343897ed16250b9cbb6a8e8add1b659db154dc6d954a613 -size 74765 +oid sha256:efd65e7cb0a07af17f5b0eda7b1447f820743416db56cf1d8b72e27bd25f68b9 +size 72636 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_5_en.png index 06ce9e261f..ee7eabfa80 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b3edbf7ec81d79bf7201f32b3e8af53922dc060ebade16d5292c6fde766046f -size 42861 +oid sha256:709aad2c9379a7c6d1fcd8c55e9024778bbc0c39e6d34cc04cac114c86997c7a +size 53610 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_1_en.png index 04b76daf14..b8f9f6f0aa 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83811b6295d5714633e33bd5627e5001eded8306dfdc0e460f1f95cf2f30e1cb -size 64613 +oid sha256:be47bbc3cbfade8b0aec65c2f76ba0237ca9db12f027db30616f89a8b547f8b6 +size 64796 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_2_en.png index a63c57dc8a..0a24436b9b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be70c02875df9a7cd94eaaa7d34ac2de72ebca1214515dda9725dcb923be8a69 -size 69369 +oid sha256:dbdcc3094c0ee56e9c0fbadf070ce3047ef207bb77d13d624c5dc2f014c7cc02 +size 69416 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_3_en.png index 8f21415787..5055606015 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edc05f93374f0b7a95b132f2f892dc193d514ff2c6de32846eee6e55210075f4 -size 70461 +oid sha256:d14d1a25b35cbbc07f931ac4b71816fdf52ce11a9ac5514a87a5e3ec9fb94343 +size 70403 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_4_en.png index a0063834c8..b60bbb50d1 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ee05334852ae63186189e2705d59c8732405b3f042e47a0146729f2bc000000 -size 71966 +oid sha256:3ad00d7ea1b24b20cb7575b8bd78869b4b05c43ffd2b46194f3de9b558011d8e +size 69465 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_5_en.png index 84d8ce1f85..499be6635c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.icons_IconsCompound_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9b068e03c1a383d98e71baef9759e33d4fe22b3cf8a664202b463b8b7be1d39 -size 40886 +oid sha256:d4a4bbdbf29f93bd558d828319d516da5315917ebcedbf4a572500929ecfdb81 +size 51907 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_0_en.png index d77b45ab82..00c24d4db8 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67441f7aae4f9ef3127d2a0deb64137f6cb3c0786dc98a055de1fe75e3fe3178 -size 6786 +oid sha256:bebb72ca8ca70536ae49331c3ef21d4591fe2de2f04d195e7be2bd497204b0b2 +size 6912 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_1_en.png index e528eae056..a8d28a6662 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7e27785d6c6c8fee1ca9e0a5a3d68373ef73cb7c8cabc811a4dd1c0dec27105 -size 8615 +oid sha256:67534640eb7142a7de88b8e173e2dc1041a9dc4dc2f18b3ecbeb0591b7e80514 +size 8735 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_2_en.png index e528eae056..a8d28a6662 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7e27785d6c6c8fee1ca9e0a5a3d68373ef73cb7c8cabc811a4dd1c0dec27105 -size 8615 +oid sha256:67534640eb7142a7de88b8e173e2dc1041a9dc4dc2f18b3ecbeb0591b7e80514 +size 8735 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_0_en.png index 6c27699e05..df1b56dc2c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fec5a3ff7388f5132511a9823155d80dde08429652fd7d39d393215945c1e98 -size 7045 +oid sha256:27b74bcf22ba2b9fc87c841e0334cc7e8decf1dc4390103950fb0825396ac825 +size 7168 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_1_en.png index b9bf089cc7..f3c641a169 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95e047cfbfd7ec5f585a80bf77b9456679715a5f18dbec54ce44940767716b00 -size 8859 +oid sha256:84359350f6af1a6fd1976d1417b971007e2245e88cb8bd4ff543167fed54339c +size 8981 diff --git a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_2_en.png index b9bf089cc7..f3c641a169 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.matrix.ui.components_EditableAvatarView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95e047cfbfd7ec5f585a80bf77b9456679715a5f18dbec54ce44940767716b00 -size 8859 +oid sha256:84359350f6af1a6fd1976d1417b971007e2245e88cb8bd4ff543167fed54339c +size 8981 From 9173ff703ec895adc1cdd86c401f3ae5b3225a6e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Jul 2025 22:41:22 +0000 Subject: [PATCH 03/69] Update haze to v1.6.7 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 77e212c2ec..e1f908e644 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ appyx = "1.7.1" sqldelight = "2.1.0" wysiwyg = "2.38.4" telephoto = "0.16.0" -haze = "1.6.6" +haze = "1.6.7" # Dependency analysis dependencyAnalysis = "2.19.0" From 55d549b8a564f6557da3be9d250493e7898fea50 Mon Sep 17 00:00:00 2001 From: ElementBot <110224175+ElementBot@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:27:46 +0200 Subject: [PATCH 04/69] Sync Strings from Localazy (#4988) Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com> --- .../ui-strings/src/main/res/values-et/translations.xml | 8 ++++++++ .../ui-strings/src/main/res/values-fr/translations.xml | 2 +- ...nses.impl.list_DependencyLicensesListView_Day_0_de.png | 4 ++-- ...nses.impl.list_DependencyLicensesListView_Day_1_de.png | 4 ++-- ...nses.impl.list_DependencyLicensesListView_Day_2_de.png | 4 ++-- ...nses.impl.list_DependencyLicensesListView_Day_3_de.png | 4 ++-- ...l.crypto.identity_IdentityChangeStateView_Day_1_de.png | 2 +- ...o.identity_MessagesViewWithIdentityChange_Day_1_de.png | 2 +- ...s.impl.pinned.list_PinnedMessagesListView_Day_0_de.png | 4 ++-- ...s.impl.pinned.list_PinnedMessagesListView_Day_1_de.png | 4 ++-- ...s.impl.pinned.list_PinnedMessagesListView_Day_2_de.png | 4 ++-- ...s.impl.pinned.list_PinnedMessagesListView_Day_3_de.png | 4 ++-- ...nts.virtual_TimelineItemRoomBeginningView_Day_0_de.png | 2 +- .../de/features.messages.impl_MessagesView_Day_14_de.png | 4 ++-- ...impl.user.editprofile_EditUserProfileView_Day_0_de.png | 4 ++-- ...impl.user.editprofile_EditUserProfileView_Day_1_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_0_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_1_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_2_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_3_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_4_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_5_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_6_de.png | 4 ++-- ...roomdetails.impl.edit_RoomDetailsEditView_Day_7_de.png | 4 ++-- ...s_UserDefinedRoomNotificationSettingsView_Day_0_de.png | 4 ++-- ...em.atomic.molecules_ComposerAlertMolecule_Day_1_de.png | 2 +- screenshots/html/data.js | 1 + 27 files changed, 54 insertions(+), 45 deletions(-) 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 805e30ec94..553d57488a 100644 --- a/libraries/ui-strings/src/main/res/values-et/translations.xml +++ b/libraries/ui-strings/src/main/res/values-et/translations.xml @@ -12,6 +12,7 @@ "Mine lõppu" "Ainult mainimised" "Summutatud" + "Teise kasutaja tunnuspilt" "%1$d. lehekülg" "Peata" "Häälsõnum, kestus:%1$s, praegune asukoht: %2$s" @@ -30,15 +31,18 @@ "Vaata kõiki" "Eemalda reageerimine %1$s emotikoniga" "Eemalda reageerimine: %1$s" + "Jututoa tunnuspilt" "Saada faile" "Näita salasõna" "Helista" + "Kasutaja tunnuspilt" "Kasutajamenüü" "Vaata tunnuspilti" "Vaata üksikasju" "Häälsõnum, kestus:%1$s" "Salvesta häälsõnum." "Lõpeta salvestamine" + "Sinu tunnuspilt" "Nõustu" "Lisa selgitus" "Lisa ajajoonele" @@ -97,6 +101,7 @@ "Ei" "Mitte praegu" "OK" + "Ava kontekstimenüü" "Seadistused" "Ava rakendusega" "Tõsta esile" @@ -121,7 +126,9 @@ "Salvesta" "Otsi" "Saada" + "Saada muudetud sõnum" "Saada sõnum" + "Saada häälsõnum" "Jaga" "Jaga linki" "Näita" @@ -137,6 +144,7 @@ "Valikuteks klõpsa" "Proovi uuesti" "Eemalda esiletõstmine" + "Vaata" "Vaata ajajoonel" "Vaata lähtekoodi" "Jah" 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 d1d1177534..c2a6cd3358 100644 --- a/libraries/ui-strings/src/main/res/values-fr/translations.xml +++ b/libraries/ui-strings/src/main/res/values-fr/translations.xml @@ -126,7 +126,7 @@ "Enregistrer" "Rechercher" "Envoyer" - "Envoyer un message modifié" + "Envoyer les modifications" "Envoyer un message" "Envoyer un message vocal" "Partager" diff --git a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_0_de.png b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_0_de.png index 379ff1e49b..2387269686 100644 --- a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_0_de.png +++ b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daa1ee2d17b392c702067cfd3bd73a64ed393e68e242b342abe1db97baa696db -size 11218 +oid sha256:03d9396d033f227408e8acdb424f187e2c0bf7c5493c13faee5eef51b01e4c93 +size 10726 diff --git a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_1_de.png b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_1_de.png index 1bfd1d6ec3..a07a28ce03 100644 --- a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_1_de.png +++ b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2b03077131e1b6b37762fbfd89519e726ed0a86685d0107a39024873ee0e670 -size 10706 +oid sha256:1b719ebe0ef05845daa58e6e1e0c72b9c30da66e639fc6bed9edeb483ed3d1d0 +size 10206 diff --git a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_2_de.png b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_2_de.png index 9f16ca802b..377751198f 100644 --- a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_2_de.png +++ b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fb2f05e2eea4d25a5bb87f3fc6391df2bf0923967d6ad973152557517fa7819 -size 29864 +oid sha256:78267cc22ef57370eb378a19d37be1826a7da737903ab38f1db984bfaac71014 +size 29368 diff --git a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_3_de.png b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_3_de.png index 725423f7ad..7f32725a95 100644 --- a/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_3_de.png +++ b/screenshots/de/features.licenses.impl.list_DependencyLicensesListView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5c32861bbae702e9f45263ed3ee710d450b4eb66f1919a4f11eb5ccce7a0354 -size 31120 +oid sha256:368438eee2c58b62920c4568d4f727fc760f9e858841015c0fc053a7c1794f34 +size 30633 diff --git a/screenshots/de/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_de.png b/screenshots/de/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_de.png index f006ac08d3..c9aeb2f674 100644 --- a/screenshots/de/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_de.png +++ b/screenshots/de/features.messages.impl.crypto.identity_IdentityChangeStateView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2a9e4c1bf333604bb0a1b17c83af340e7d17a4dd3c465e8a49394dd236c3b45 +oid sha256:676c512eb43f3784c98e8344abc1c76a3950d3765eb888d79e8b3b7a03178fe8 size 25844 diff --git a/screenshots/de/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_de.png b/screenshots/de/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_de.png index 4b9d2d095e..eb84c6bfcb 100644 --- a/screenshots/de/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_de.png +++ b/screenshots/de/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0733dabade5399a419fa04c553a719c32c4925826d34091f7a64a0b4eb929e23 +oid sha256:d01f2725c05013a8a5fbd2cc925ea692a1ced85e2dba1ee057891bf675696226 size 65637 diff --git a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_de.png b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_de.png index 7b20966834..59a4323d4d 100644 --- a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_de.png +++ b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae6680679576c8b573f247eacc79970197f6c544df2a498e83950d84d441a635 -size 24413 +oid sha256:b6927e063867986095e5e95026fcbb2bdc04977cee5fd80bbf89c5c331909acf +size 25047 diff --git a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_de.png b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_de.png index 1e01c9010e..b86184cccf 100644 --- a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_de.png +++ b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c7a6f4ead21dff32579260eb8afb65d5b5748a3fd37ef12dd881fa450fa48a8 -size 9166 +oid sha256:b33738bbd3ec0a20eefacac4bd5fc4f03c71ac0dbce772d914801b316c91625c +size 10018 diff --git a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_de.png b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_de.png index c98e80c3eb..857ac66312 100644 --- a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_de.png +++ b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_2_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c4c13bfeff36e70a209271d37d9df050098ff082097f706b8550fba469db7e8 -size 34501 +oid sha256:f2e6774496aa545174428999235b4ba4825b1255706dcb829c92b9dfb1c1fa09 +size 35290 diff --git a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_de.png b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_de.png index 3afb335f1b..63c3142638 100644 --- a/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_de.png +++ b/screenshots/de/features.messages.impl.pinned.list_PinnedMessagesListView_Day_3_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f08c84f2f4e4334e1e3062f3971e2e9ef0211a9af6c76de7ec90f34a470d0119 -size 42777 +oid sha256:e185a725d6d72f67f87549eebb436abd6b5c252674e38a217af27d2b67fd1a1f +size 43737 diff --git a/screenshots/de/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_de.png b/screenshots/de/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_de.png index f579737b44..9cd944d9a9 100644 --- a/screenshots/de/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_de.png +++ b/screenshots/de/features.messages.impl.timeline.components.virtual_TimelineItemRoomBeginningView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:afba149de7c094ec7c49c094df22e22e5482dbc2196decd2af029f00921ac5e2 +oid sha256:5f3da666595fb927aad97e0f50762534d49e587122a304062baf1322b23b7d48 size 56367 diff --git a/screenshots/de/features.messages.impl_MessagesView_Day_14_de.png b/screenshots/de/features.messages.impl_MessagesView_Day_14_de.png index 720695a5cd..81246168f3 100644 --- a/screenshots/de/features.messages.impl_MessagesView_Day_14_de.png +++ b/screenshots/de/features.messages.impl_MessagesView_Day_14_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a117fd360262156cef595eabfaee2648cdb185678527d9a0aec602160b7823f4 -size 64801 +oid sha256:d540ccf947f37ec51f16a35c824d0eb0ffe0534424b889a170b81907db576605 +size 64802 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 b82d2d34a9..085682696f 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:1abd9d8600f32dc471e7befaec73fef7bd67234532b6dbcbfd4e94daec927fe5 -size 22152 +oid sha256:5a6855a2444515fbb98c1a3d01fb6cc0c5a938b9ab032e81d090490a3b1968a2 +size 22254 diff --git a/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_de.png b/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_de.png index fed4e6873d..9418d19104 100644 --- a/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_de.png +++ b/screenshots/de/features.preferences.impl.user.editprofile_EditUserProfileView_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78688c13e131c5000e7dec50addad0053bb5d3f7dd90ac092eab81623dac69cc -size 70524 +oid sha256:dd9721a15aaf20c0b1dbcf4a10dc8041cc07ec09f268a9408cc2cdf501ba6f5f +size 70638 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 dfc9a5e094..7b417a4ff2 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:6d4a68eb39431cdcccd8b35abaf82b5cd830ddce1fa1d1af5764f2c67248a16b -size 29718 +oid sha256:177a5d2d49d1c7bc27be8a03371b074e98cb163c3fb2bd996ef34d58a58e142d +size 29787 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 4e184fbf08..e7c17897a3 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:5634d1088411e2e3204b40c8098fe9f0dde28847f33a7002aaf017791472cc3b -size 24039 +oid sha256:98f07fe6746bc81551919c3924deb04f61f999f640371c35ac10fd3a9957c678 +size 24101 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 ffa0082d1d..d9179dd17e 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:8bda53ae653315c654003c6b441bff6c35ddb1fa5bbd2233e1a630f7a74fc6a9 -size 30885 +oid sha256:12bb9ce3e39f0734d79f9c877545ca9eeccab4c720ff21152b350bedf2194992 +size 30951 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 4918518fe3..f46e14fb7b 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:39c4b72f7469c06e7086ce40340cfa4f326e6ee845420e34b8dd4c98f8434c29 -size 55361 +oid sha256:1b73e62309cae93bc83abd6f5015cf44f9b0c18eff266da9bc36be85576477c6 +size 55416 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 fa82187fd4..d95d3929e6 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:322609531df2bcf28a78fe21a0180658a07ac754128d611b8bca0a201731e77d -size 29827 +oid sha256:36e919bf716639ddd32464d3b864891e4bc18fcc5a504f405d44a811b9961fa3 +size 29896 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 aab749e94e..c9d1e579c0 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:2c07aa7a1aa31b8866bd1981bee11476cd1daa32d02b2f7b6aa368b2fdd3c3e2 -size 29868 +oid sha256:a8f5d2ee21ff6279f35a2772f5696db3fde1b7a14719002e70b6a0560a5ba324 +size 29940 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 13ff5b6524..c4da5a2374 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:e3d4acb84c68ac6147a8255e1897e0e658086982d9b732d421d3d52fe0ea0f19 -size 27020 +oid sha256:f3f43373818117ea406135038b04e4529a1f343286e5d7bacab08b9e69e5204f +size 27098 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 7c6f69093d..1a351e7e80 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:0f485e12af75bbfdf57b1f54a67548f950cc31204a867e662b7252199dfb5a2a -size 29608 +oid sha256:3c89cc3b86ddea6373e4bf0ca8021a03faac3f40104029cf3118755d75c8ad0e +size 29676 diff --git a/screenshots/de/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_de.png b/screenshots/de/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_de.png index 2c0628da60..19ab9d5d5f 100644 --- a/screenshots/de/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_de.png +++ b/screenshots/de/features.roomdetails.impl.notificationsettings_UserDefinedRoomNotificationSettingsView_Day_0_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fc2a9f674d1a1301b376c7e6f17b29710b51b68a1c8590993139367b25c58dc -size 26171 +oid sha256:62831e4322a6b712389809f630176b18641a05bc3ca73b93aaf7b0ebd0de521e +size 25958 diff --git a/screenshots/de/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_de.png b/screenshots/de/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_de.png index bfdbe5f583..3a66f0c29c 100644 --- a/screenshots/de/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_de.png +++ b/screenshots/de/libraries.designsystem.atomic.molecules_ComposerAlertMolecule_Day_1_de.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae0bab78138a338cced2929a32ecbef81736247dfdd0b6985f69ef41174d2719 +oid sha256:2eb622c603392e5da8ebd3aba69e0bdbe238e9de46cb6ade6306fc2e8fc4ad7a size 20001 diff --git a/screenshots/html/data.js b/screenshots/html/data.js index 9006dd4020..6008dbc0e1 100644 --- a/screenshots/html/data.js +++ b/screenshots/html/data.js @@ -1431,6 +1431,7 @@ export const screenshots = [ ["features.messages.impl.timeline_TimelineView_Day_8_en","features.messages.impl.timeline_TimelineView_Night_8_en",20273,], ["features.messages.impl.timeline_TimelineView_Day_9_en","features.messages.impl.timeline_TimelineView_Night_9_en",0,], ["libraries.designsystem.components.avatar.internal_TombstonedRoomAvatar_Avatars_en","",0,], +["libraries.designsystem.theme.components_TopAppBarStr_App_Bars_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",20273,], ["libraries.troubleshoot.impl_TroubleshootNotificationsView_Day_1_en","libraries.troubleshoot.impl_TroubleshootNotificationsView_Night_1_en",20273,], From f4032e291b37e4a601668db270431634ee617947 Mon Sep 17 00:00:00 2001 From: ElementBot <110224175+ElementBot@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:55:12 +0200 Subject: [PATCH 05/69] Update Gradle Wrapper from 8.14.2 to 8.14.3 (#4985) Signed-off-by: gradle-update-robot Co-authored-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3735f265b9..78cb6e16a4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=7197a12f450794931532469d4ff21a59ea2c1cd59a3ec3f89c035c3c420a6999 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 2b8c4ba079da88b596c9807ee7329b432c559843 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 15 Apr 2025 17:51:27 +0200 Subject: [PATCH 06/69] Remove bloom effect and replace by linear gradient Use semantic colors. --- .../home/impl/components/RoomListTopBar.kt | 64 +- .../background/OnboardingBackground.kt | 2 +- .../designsystem/components/Bloom.kt | 578 ------------------ .../designsystem/modifiers/Gradient.kt | 92 +++ .../designsystem/preview/PreviewGroup.kt | 1 - .../libraries/designsystem/utils/DrawScope.kt | 22 + .../tests/konsist/KonsistPreviewTest.kt | 5 +- 7 files changed, 125 insertions(+), 639 deletions(-) delete mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/DrawScope.kt diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt index 8071dead3d..f1f06afe6d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListTopBar.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme @@ -22,7 +21,6 @@ import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -30,14 +28,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.unit.DpOffset -import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import io.element.android.appconfig.RoomListConfig import io.element.android.compound.theme.ElementTheme @@ -51,12 +44,10 @@ import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarType -import io.element.android.libraries.designsystem.components.avatarBloom +import io.element.android.libraries.designsystem.modifiers.backgroundVerticalGradient import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.applyScaleDown -import io.element.android.libraries.designsystem.text.roundToPx -import io.element.android.libraries.designsystem.text.toDp import io.element.android.libraries.designsystem.text.toSp import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.components.DropdownMenu @@ -73,8 +64,6 @@ import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonStrings -private val avatarBloomSize = 430.dp - @OptIn(ExperimentalMaterial3Api::class) @Composable fun RoomListTopBar( @@ -126,25 +115,13 @@ private fun DefaultRoomListTopBar( canReportBug: Boolean, modifier: Modifier = Modifier, ) { - // We need this to manually clip the top app bar in preview mode - val previewAppBarHeight = if (LocalInspectionMode.current) { - 112.dp.roundToPx() - } else { - null - } val collapsedFraction = scrollBehavior.state.collapsedFraction - var appBarHeight by remember { - mutableIntStateOf(previewAppBarHeight ?: 0) - } - val avatarData by remember(matrixUser) { derivedStateOf { matrixUser.getAvatarData(size = AvatarSize.CurrentUserTopBar) } } - val statusBarPadding = with(LocalDensity.current) { WindowInsets.statusBars.getTop(this).toDp() } - Box(modifier = modifier) { val collapsedTitleTextStyle = ElementTheme.typography.aliasScreenTitle val expandedTitleTextStyle = ElementTheme.typography.fontHeadingLgBold.copy( @@ -160,40 +137,13 @@ private fun DefaultRoomListTopBar( titleLarge = collapsedTitleTextStyle ), ) { - Column( - modifier = Modifier - .onSizeChanged { - appBarHeight = it.height - } - .avatarBloom( - avatarData = avatarData, - background = if (ElementTheme.isLightTheme) { - // Workaround to display a very subtle bloom for avatars with very soft colors - Color(0xFFF9F9F9) - } else { - ElementTheme.colors.bgCanvasDefault - }, - blurSize = DpSize(avatarBloomSize, avatarBloomSize), - offset = DpOffset(24.dp, 24.dp + statusBarPadding), - clipToSize = if (appBarHeight > 0) { - DpSize( - avatarBloomSize, - appBarHeight.toDp() - ) - } else { - DpSize.Unspecified - }, - bottomSoftEdgeColor = ElementTheme.colors.bgCanvasDefault, - bottomSoftEdgeAlpha = if (displayFilters) { - 1f - } else { - 1f - collapsedFraction - }, - alpha = if (areSearchResultsDisplayed) 0f else 1f, - ) - .statusBarsPadding(), - ) { + Column { MediumTopAppBar( + modifier = Modifier + .backgroundVerticalGradient( + isVisible = !areSearchResultsDisplayed, + ) + .statusBarsPadding(), colors = TopAppBarDefaults.mediumTopAppBarColors( containerColor = Color.Transparent, scrolledContainerColor = Color.Transparent, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt index b4830e0904..73bc7ca841 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/OnboardingBackground.kt @@ -23,9 +23,9 @@ import androidx.compose.ui.graphics.LinearGradientShader import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme -import io.element.android.libraries.designsystem.components.drawWithLayer import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.utils.drawWithLayer /** * Gradient background for FTUE (onboarding) screens. diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt deleted file mode 100644 index fd4b380fdc..0000000000 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.designsystem.components - -import android.graphics.Bitmap -import android.graphics.Typeface -import android.os.Build -import android.text.TextPaint -import androidx.annotation.FloatRange -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.consumeWindowInsets -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.IconButton -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.composed -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawWithCache -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.geometry.Rect -import androidx.compose.ui.geometry.center -import androidx.compose.ui.graphics.BlendMode -import androidx.compose.ui.graphics.ClipOp -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.LinearGradientShader -import androidx.compose.ui.graphics.Paint -import androidx.compose.ui.graphics.Path -import androidx.compose.ui.graphics.RadialGradientShader -import androidx.compose.ui.graphics.ShaderBrush -import androidx.compose.ui.graphics.asAndroidBitmap -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.graphics.drawscope.DrawScope -import androidx.compose.ui.graphics.drawscope.clipPath -import androidx.compose.ui.graphics.nativeCanvas -import androidx.compose.ui.graphics.painter.BitmapPainter -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.input.nestedscroll.nestedScroll -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.platform.LocalFontFamilyResolver -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.rememberTextMeasurer -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import androidx.compose.ui.unit.Density -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.DpOffset -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.IntOffset -import androidx.compose.ui.unit.IntSize -import androidx.compose.ui.unit.LayoutDirection -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.isSpecified -import androidx.compose.ui.unit.toOffset -import androidx.compose.ui.unit.toSize -import coil3.SingletonImageLoader -import coil3.request.ImageRequest -import coil3.request.allowHardware -import coil3.toBitmap -import com.airbnb.android.showkase.annotation.ShowkaseComposable -import com.vanniktech.blurhash.BlurHash -import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.libraries.designsystem.colors.AvatarColorsProvider -import io.element.android.libraries.designsystem.components.avatar.Avatar -import io.element.android.libraries.designsystem.components.avatar.AvatarData -import io.element.android.libraries.designsystem.components.avatar.AvatarSize -import io.element.android.libraries.designsystem.components.avatar.AvatarType -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewGroup -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.text.toDp -import io.element.android.libraries.designsystem.theme.components.Icon -import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar -import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.designsystem.utils.CommonDrawables -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import kotlin.math.max -import kotlin.math.roundToInt - -/** - * Default bloom configuration values. - */ -object BloomDefaults { - /** - * Number of components to use with BlurHash to generate the blur effect. - * Larger values mean more detailed blurs. - */ - const val HASH_COMPONENTS = 4 - const val ENCODE_SIZE_PX = 20 - const val DECODE_SIZE_PX = 5 - - /** Default bloom layers. */ - @Composable - fun defaultLayers() = persistentListOf( - // Bottom layer - if (ElementTheme.isLightTheme) { - BloomLayer(0.2f, BlendMode.Hardlight) - } else { - BloomLayer(0.5f, BlendMode.Exclusion) - }, - // Top layer - BloomLayer(if (ElementTheme.isLightTheme) 0.8f else 0.2f, BlendMode.Color), - ) -} - -/** - * Bloom layer configuration. - * @param alpha The alpha value to apply to the layer. - * @param blendMode The blend mode to apply to the layer. - */ -data class BloomLayer( - val alpha: Float, - val blendMode: BlendMode, -) - -/** - * Bloom effect modifier. Applies a bloom effect to the component. - * @param hash The BlurHash to use as the bloom source. - * @param background The background color to use for the bloom effect. Since we use blend modes it must be non-transparent. - * @param blurSize The size of the bloom effect. If not specified the bloom effect will be the size of the component. - * @param offset The offset to use for the bloom effect. If not specified the bloom effect will be centered on the component. - * @param clipToSize The size to use for clipping the bloom effect. If not specified the bloom effect will not be clipped. - * @param layerConfiguration The configuration for the bloom layers. If not specified the default layers configuration will be used. - * @param bottomSoftEdgeColor The color to use for the bottom soft edge. If not specified the [background] color will be used. - * @param bottomSoftEdgeHeight The height of the bottom soft edge. If not specified the bottom soft edge will not be drawn. - * @param bottomSoftEdgeAlpha The alpha value to apply to the bottom soft edge. - * @param alpha The alpha value to apply to the bloom effect. - */ -@SuppressWarnings("ModifierComposed") -fun Modifier.bloom( - hash: String?, - background: Color, - blurSize: DpSize = DpSize.Unspecified, - offset: DpOffset = DpOffset.Unspecified, - clipToSize: DpSize = DpSize.Unspecified, - layerConfiguration: ImmutableList? = null, - bottomSoftEdgeColor: Color = background, - bottomSoftEdgeHeight: Dp = 40.dp, - @FloatRange(from = 0.0, to = 1.0) - bottomSoftEdgeAlpha: Float = 1.0f, - @FloatRange(from = 0.0, to = 1.0) - alpha: Float = 1f, -) = composed { - val defaultLayers = BloomDefaults.defaultLayers() - val layers = layerConfiguration ?: defaultLayers - // Bloom only works on API 29+ - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return@composed this - if (hash == null) return@composed this - - val hashedBitmap = remember(hash) { - BlurHash.decode( - blurHash = hash, - width = BloomDefaults.DECODE_SIZE_PX, - height = BloomDefaults.DECODE_SIZE_PX, - )?.asImageBitmap() - } ?: return@composed this - val density = LocalDensity.current - val pixelSize = remember(blurSize, density) { blurSize.toIntSize(density) } - val clipToPixelSize = remember(clipToSize, density) { clipToSize.toIntSize(density) } - val bottomSoftEdgeHeightPixels = remember(bottomSoftEdgeHeight, density) { with(density) { bottomSoftEdgeHeight.roundToPx() } } - val isRTL = LocalLayoutDirection.current == LayoutDirection.Rtl - drawWithCache { - val dstSize = if (pixelSize != IntSize.Zero) { - pixelSize - } else { - IntSize(size.width.toInt(), size.height.toInt()) - } - // Calculate where to place the center of the bloom effect - val centerOffset = if (offset.isSpecified) { - if (isRTL) { - IntOffset( - size.width.roundToInt() - offset.x.roundToPx(), - size.height.roundToInt() - offset.y.roundToPx(), - ) - } else { - IntOffset( - offset.x.roundToPx(), - offset.y.roundToPx(), - ) - } - } else { - IntOffset( - size.center.x.toInt(), - size.center.y.toInt(), - ) - } - // Calculate the offset to draw the different layers and apply clipping - // This offset is applied to place the top left corner of the bloom effect - val layersOffset = if (offset.isSpecified) { - // Offsets the layers so the center of the bloom effect is at the provided offset value - IntOffset( - centerOffset.x - dstSize.width / 2, - centerOffset.y - dstSize.height / 2, - ) - } else { - // Places the layers at the center of the component - IntOffset.Zero - } - val radius = max(dstSize.width, dstSize.height).toFloat() / 2 - val circularGradientShader = RadialGradientShader( - centerOffset.toOffset(), - radius, - listOf(Color.Red, Color.Transparent), - listOf(0f, 1f) - ) - val circularGradientBrush = ShaderBrush(circularGradientShader) - val bottomEdgeGradient = LinearGradientShader( - from = IntOffset(0, clipToPixelSize.height - bottomSoftEdgeHeightPixels).toOffset(), - to = IntOffset(0, clipToPixelSize.height).toOffset(), - listOf(Color.Transparent, bottomSoftEdgeColor), - listOf(0f, 1f) - ) - val bottomEdgeGradientBrush = ShaderBrush(bottomEdgeGradient) - onDrawBehind { - if (dstSize != IntSize.Zero) { - val circleClipPath = Path().apply { - addOval(Rect(centerOffset.toOffset(), radius - 1)) - } - // Clip the external radius of bloom gradient too, otherwise we have a 1px border - clipPath(circleClipPath, clipOp = ClipOp.Intersect) { - // Draw the bloom layers - drawWithLayer { - // Clip rect to the provided size if needed - if (clipToPixelSize != IntSize.Zero) { - drawContext.canvas.clipRect(Rect(Offset.Zero, clipToPixelSize.toSize()), ClipOp.Intersect) - } - // Draw background color for blending - drawRect(background, size = pixelSize.toSize()) - // Draw layers - for (layer in layers) { - drawImage( - hashedBitmap, - srcSize = IntSize(BloomDefaults.HASH_COMPONENTS, BloomDefaults.HASH_COMPONENTS), - dstSize = dstSize, - dstOffset = layersOffset, - alpha = layer.alpha * alpha, - blendMode = layer.blendMode, - ) - } - // Mask the layers erasing the outer radius using the gradient brush - drawCircle( - circularGradientBrush, - radius, - centerOffset.toOffset(), - blendMode = BlendMode.DstIn - ) - } - } - // Draw the bottom soft edge - drawRect( - bottomEdgeGradientBrush, - topLeft = IntOffset(0, clipToPixelSize.height - bottomSoftEdgeHeight.roundToPx()).toOffset(), - size = IntSize(pixelSize.width, bottomSoftEdgeHeight.roundToPx()).toSize(), - alpha = bottomSoftEdgeAlpha - ) - } - } - } -} - -/** - * Bloom effect modifier for avatars. Applies a bloom effect to the component. - * @param avatarData The avatar data to use as the bloom source. - * If the avatar data has a URL it will be used as the bloom source, otherwise the initials will be used. - * @param background The background color to use for the bloom effect. Since we use blend modes it must be non-transparent. - * @param blurSize The size of the bloom effect. If not specified the bloom effect will be the size of the component. - * @param offset The offset to use for the bloom effect. If not specified the bloom effect will be centered on the component. - * @param clipToSize The size to use for clipping the bloom effect. If not specified the bloom effect will not be clipped. - * @param bottomSoftEdgeColor The color to use for the bottom soft edge. If not specified the [background] color will be used. - * @param bottomSoftEdgeHeight The height of the bottom soft edge. If not specified the bottom soft edge will not be drawn. - * @param bottomSoftEdgeAlpha The alpha value to apply to the bottom soft edge. - * @param alpha The alpha value to apply to the bloom effect. - */ -@SuppressWarnings("ModifierComposed") -fun Modifier.avatarBloom( - avatarData: AvatarData, - background: Color, - blurSize: DpSize = DpSize.Unspecified, - offset: DpOffset = DpOffset.Unspecified, - clipToSize: DpSize = DpSize.Unspecified, - bottomSoftEdgeColor: Color = background, - bottomSoftEdgeHeight: Dp = 40.dp, - @FloatRange(from = 0.0, to = 1.0) - bottomSoftEdgeAlpha: Float = 1.0f, - @FloatRange(from = 0.0, to = 1.0) - alpha: Float = 1f, -) = composed { - // Bloom only works on API 29+ - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return@composed this - - // Request the avatar contents to use as the bloom source - val context = LocalContext.current - if (avatarData.url != null) { - val painterRequest = remember(avatarData) { - ImageRequest.Builder(context) - .data(avatarData) - // Allow cache and default dispatchers - .defaults(ImageRequest.Defaults()) - // Needed to be able to read pixels from the Bitmap for the hash - .allowHardware(false) - // Reduce size so it loads faster for large avatars - .size(BloomDefaults.ENCODE_SIZE_PX, BloomDefaults.ENCODE_SIZE_PX) - .build() - } - - // By making it saveable, we'll 'cache' the previous bloom effect until a new one is loaded - var blurHash by rememberSaveable(avatarData) { mutableStateOf(null) } - LaunchedEffect(avatarData) { - withContext(Dispatchers.IO) { - val bitmap = SingletonImageLoader.get(context) - .execute(painterRequest) - .image - ?.toBitmap() - ?: return@withContext - blurHash = BlurHash.encode( - bitmap = bitmap, - componentX = BloomDefaults.HASH_COMPONENTS, - componentY = BloomDefaults.HASH_COMPONENTS, - ) - } - } - - bloom( - hash = blurHash, - background = background, - blurSize = blurSize, - offset = offset, - clipToSize = clipToSize, - bottomSoftEdgeColor = bottomSoftEdgeColor, - bottomSoftEdgeHeight = bottomSoftEdgeHeight, - bottomSoftEdgeAlpha = bottomSoftEdgeAlpha, - alpha = alpha, - ) - } else { - // There is no URL so we'll generate an avatar with the initials and use that as the bloom source - val avatarColors = AvatarColorsProvider.provide(avatarData.id) - val initialsBitmap = initialsBitmap( - width = BloomDefaults.ENCODE_SIZE_PX.toDp(), - height = BloomDefaults.ENCODE_SIZE_PX.toDp(), - text = avatarData.initialLetter, - textColor = avatarColors.foreground, - backgroundColor = avatarColors.background, - ) - val hash = remember(avatarData, avatarColors) { - BlurHash.encode( - bitmap = initialsBitmap.asAndroidBitmap(), - componentX = BloomDefaults.HASH_COMPONENTS, - componentY = BloomDefaults.HASH_COMPONENTS, - ) - } - bloom( - hash = hash, - background = background, - blurSize = blurSize, - offset = offset, - clipToSize = clipToSize, - bottomSoftEdgeColor = bottomSoftEdgeColor, - bottomSoftEdgeHeight = bottomSoftEdgeHeight, - bottomSoftEdgeAlpha = bottomSoftEdgeAlpha, - alpha = alpha, - ) - } -} - -// Used to create a Bitmap version of the initials avatar -@Composable -private fun initialsBitmap( - text: String, - backgroundColor: Color, - textColor: Color, - width: Dp = 32.dp, - height: Dp = 32.dp, -): ImageBitmap = with(LocalDensity.current) { - val backgroundPaint = remember(backgroundColor) { - Paint().also { it.color = backgroundColor } - } - val resolver: FontFamily.Resolver = LocalFontFamilyResolver.current - val fontSize = remember { height.toSp() / 2 } - val typeface: Typeface = remember(resolver) { - resolver.resolve( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Bold, - fontStyle = FontStyle.Normal, - ) - }.value as Typeface - val textPaint = remember(textColor, typeface) { - TextPaint().apply { - color = textColor.toArgb() - textSize = fontSize.toPx() - this.typeface = typeface - } - } - val textMeasurer = rememberTextMeasurer() - val result = remember(text) { textMeasurer.measure(text, TextStyle.Default.copy(fontSize = fontSize)) } - val centerPx = remember(width, height) { IntOffset(width.roundToPx() / 2, height.roundToPx() / 2) } - remember(text, width, height, backgroundColor, textColor) { - val bitmap = Bitmap.createBitmap(width.roundToPx(), height.roundToPx(), Bitmap.Config.ARGB_8888).asImageBitmap() - androidx.compose.ui.graphics.Canvas(bitmap).also { canvas -> - canvas.drawCircle(centerPx.toOffset(), width.toPx() / 2, backgroundPaint) - canvas.nativeCanvas.drawText(text, centerPx.x.toFloat() - result.size.width / 2, centerPx.y * 2f - result.size.height / 2 - 4, textPaint) - } - bitmap - } -} - -// Translates DP sizes into pixel sizes, taking into account unspecified values -private fun DpSize.toIntSize(density: Density) = with(density) { - if (isSpecified) { - IntSize(width.roundToPx(), height.roundToPx()) - } else { - IntSize.Zero - } -} - -/** - * Helper to draw to a canvas using layers. This allows us to apply clipping to those layers only. - */ -fun DrawScope.drawWithLayer(block: DrawScope.() -> Unit) { - with(drawContext.canvas.nativeCanvas) { - val checkPoint = saveLayer(null, null) - block() - restoreToCount(checkPoint) - } -} - -@OptIn(ExperimentalMaterial3Api::class) -@PreviewsDayNight -@ShowkaseComposable(group = PreviewGroup.Bloom) -@Composable -internal fun BloomPreview() { - val blurhash = "eePn{tI?xExEja}ooKWWodjtNJoKR,j@a|sBWpS3WDbGazoKWWWWj@" - var topAppBarHeight by remember { mutableIntStateOf(-1) } - val topAppBarState = rememberTopAppBarState() - val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarState) - ElementPreview( - drawableFallbackForImages = CommonDrawables.sample_avatar, - ) { - Scaffold( - modifier = Modifier - .fillMaxSize() - .nestedScroll(scrollBehavior.nestedScrollConnection), - topBar = { - Box { - MediumTopAppBar( - modifier = Modifier - .onSizeChanged { size -> - topAppBarHeight = size.height - } - .bloom( - hash = blurhash, - background = ElementTheme.colors.bgCanvasDefault, - blurSize = DpSize(430.dp, 430.dp), - offset = DpOffset(24.dp, 24.dp), - clipToSize = if (topAppBarHeight > 0) DpSize(430.dp, topAppBarHeight.toDp()) else DpSize.Zero, - ), - colors = TopAppBarDefaults.largeTopAppBarColors( - containerColor = Color.Transparent, - scrolledContainerColor = Color.Black.copy(alpha = 0.05f), - ), - navigationIcon = { - Avatar( - avatarData = AvatarData( - id = "sample-avatar", - name = "sample", - url = "aURL", - size = AvatarSize.CurrentUserTopBar, - ), - avatarType = AvatarType.User, - ) - }, - actions = { - IconButton(onClick = {}) { - Icon( - imageVector = CompoundIcons.ShareAndroid(), - contentDescription = null, - ) - } - }, - title = { - Text("Title") - }, - scrollBehavior = scrollBehavior, - ) - } - }, - ) { paddingValues -> - Column( - modifier = Modifier - .padding(paddingValues) - .consumeWindowInsets(paddingValues) - .fillMaxSize() - .verticalScroll(rememberScrollState()), - ) { - repeat(20) { - Text("Content", modifier = Modifier.padding(vertical = 20.dp)) - } - } - } - } -} - -class InitialsColorIntProvider : PreviewParameterProvider { - override val values: Sequence - get() = sequenceOf(0, 1, 2, 3, 4, 5, 6, 7) -} - -@PreviewsDayNight -@Composable -@ShowkaseComposable(group = PreviewGroup.Bloom) -internal fun BloomInitialsPreview(@PreviewParameter(InitialsColorIntProvider::class) color: Int) { - ElementPreview { - val avatarColors = AvatarColorsProvider.provide("$color") - val bitmap = initialsBitmap(text = "F", backgroundColor = avatarColors.background, textColor = avatarColors.foreground) - val hash = BlurHash.encode( - bitmap = bitmap.asAndroidBitmap(), - componentX = BloomDefaults.HASH_COMPONENTS, - componentY = BloomDefaults.HASH_COMPONENTS, - ) - Box( - modifier = Modifier - .size(256.dp) - .bloom( - hash = hash, - background = if (ElementTheme.isLightTheme) { - // Workaround to display a very subtle bloom for avatars with very soft colors - Color(0xFFF9F9F9) - } else { - ElementTheme.colors.bgCanvasDefault - }, - bottomSoftEdgeColor = ElementTheme.colors.bgCanvasDefault, - blurSize = DpSize(256.dp, 256.dp), - ), - contentAlignment = Alignment.Center - ) { - Image( - modifier = Modifier - .size(32.dp) - .clip(CircleShape), - painter = BitmapPainter(bitmap), - contentDescription = null - ) - } - } -} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt new file mode 100644 index 0000000000..9e1950df5f --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.designsystem.modifiers + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +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.LocalBuildMeta + +/** + * Ref: https://www.figma.com/design/kcnHxunG1LDWXsJhaNuiHz/ER-145--Workspaces-V1?node-id=1141-24692 + */ +@Stable +@Composable +fun Modifier.backgroundVerticalGradient( + isVisible: Boolean = true, + isEnterpriseBuild: Boolean = LocalBuildMeta.current.isEnterpriseBuild, +): Modifier { + if (!isVisible) return this + return background( + brush = Brush.verticalGradient( + colorStops = buildList { + if (isEnterpriseBuild) { + // For enterprise builds, ensure that we are theming the gradient + add(0f to ElementTheme.colors.textActionAccent.copy(alpha = 0.5f)) + add(0.75f to ElementTheme.colors.bgCanvasDefault) + add(1f to Color.Transparent) + } else { + add(0f to ElementTheme.colors.gradientSubtleStop1) + add(1 / 5f to ElementTheme.colors.gradientSubtleStop2) + add(2 / 5f to ElementTheme.colors.gradientSubtleStop3) + add(3 / 5f to ElementTheme.colors.gradientSubtleStop4) + add(4 / 5f to ElementTheme.colors.gradientSubtleStop5) + add(1f to ElementTheme.colors.gradientSubtleStop6) + } + }.toTypedArray(), + ), + alpha = 0.75f, + ) +} + +@PreviewsDayNight +@Composable +internal fun BackgroundVerticalGradientPreview() = ElementPreview { + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = 100.dp) + .backgroundVerticalGradient() + ) +} + +@PreviewsDayNight +@Composable +internal fun BackgroundVerticalGradientEnterprisePreview() = ElementPreview { + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = 100.dp) + .backgroundVerticalGradient( + isEnterpriseBuild = true, + ) + ) +} + +@PreviewsDayNight +@Composable +internal fun BackgroundVerticalGradientDisabledPreview() = ElementPreview { + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = 100.dp) + .backgroundVerticalGradient( + isVisible = false, + ) + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/preview/PreviewGroup.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/preview/PreviewGroup.kt index 79853f5983..aa2b4dd761 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/preview/PreviewGroup.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/preview/PreviewGroup.kt @@ -11,7 +11,6 @@ package io.element.android.libraries.designsystem.preview object PreviewGroup { const val AppBars = "App Bars" const val Avatars = "Avatars" - const val Bloom = "Bloom" const val BottomSheets = "Bottom Sheets" const val Buttons = "Buttons" const val DateTimePickers = "DateTime pickers" diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/DrawScope.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/DrawScope.kt new file mode 100644 index 0000000000..4db7082720 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/DrawScope.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.designsystem.utils + +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.graphics.nativeCanvas + +/** + * Helper to draw to a canvas using layers. This allows us to apply clipping to those layers only. + */ +fun DrawScope.drawWithLayer(block: DrawScope.() -> Unit) { + with(drawContext.canvas.nativeCanvas) { + val checkPoint = saveLayer(null, null) + block() + restoreToCount(checkPoint) + } +} diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 3bf65574ed..240e382cf4 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -61,8 +61,9 @@ class KonsistPreviewTest { .withoutName( "AsyncIndicatorFailurePreview", "AsyncIndicatorLoadingPreview", - "BloomInitialsPreview", - "BloomPreview", + "BackgroundVerticalGradientDisabledPreview", + "BackgroundVerticalGradientEnterprisePreview", + "BackgroundVerticalGradientPreview", "CallScreenPipViewPreview", "ColorAliasesPreview", "DefaultRoomListTopBarWithIndicatorPreview", From b3af5509c737a9a0453d83d021573967d5b16f77 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 Jun 2025 17:08:16 +0200 Subject: [PATCH 07/69] Improve Konsist test. --- .../tests/konsist/KonsistPreviewTest.kt | 189 ++++++++++-------- 1 file changed, 105 insertions(+), 84 deletions(-) diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 240e382cf4..4513f86189 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -8,8 +8,10 @@ package io.element.android.tests.konsist import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.google.common.truth.Truth.assertThat import com.lemonappdev.konsist.api.Konsist import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf +import com.lemonappdev.konsist.api.ext.list.withName import com.lemonappdev.konsist.api.ext.list.withoutName import com.lemonappdev.konsist.api.verify.assertEmpty import com.lemonappdev.konsist.api.verify.assertTrue @@ -52,96 +54,115 @@ class KonsistPreviewTest { } } + private val previewNameExceptions = listOf( + "AsyncIndicatorFailurePreview", + "AsyncIndicatorLoadingPreview", + "BackgroundVerticalGradientDisabledPreview", + "BackgroundVerticalGradientEnterprisePreview", + "BackgroundVerticalGradientPreview", + "CallScreenPipViewPreview", + "ColorAliasesPreview", + "DefaultRoomListTopBarWithIndicatorPreview", + "FocusedEventPreview", + "GradientFloatingActionButtonCircleShapePreview", + "HeaderFooterPageScrollablePreview", + "IconsCompoundPreview", + "IconsOtherPreview", + "MarkdownTextComposerEditPreview", + "MatrixBadgeAtomInfoPreview", + "MatrixBadgeAtomNegativePreview", + "MatrixBadgeAtomNeutralPreview", + "MatrixBadgeAtomPositivePreview", + "MessageComposerViewVoicePreview", + "MessagesReactionButtonAddPreview", + "MessagesReactionButtonExtraPreview", + "MessagesViewWithIdentityChangePreview", + "PageTitleWithIconFullPreview", + "PageTitleWithIconMinimalPreview", + "PendingMemberRowWithLongNamePreview", + "PinUnlockViewInAppPreview", + "PollAnswerViewDisclosedNotSelectedPreview", + "PollAnswerViewDisclosedSelectedPreview", + "PollAnswerViewEndedSelectedPreview", + "PollAnswerViewEndedWinnerNotSelectedPreview", + "PollAnswerViewEndedWinnerSelectedPreview", + "PollAnswerViewUndisclosedNotSelectedPreview", + "PollAnswerViewUndisclosedSelectedPreview", + "PollContentViewCreatorEditablePreview", + "PollContentViewCreatorEndedPreview", + "PollContentViewCreatorPreview", + "PollContentViewDisclosedPreview", + "PollContentViewEndedPreview", + "PollContentViewUndisclosedPreview", + "ReadReceiptBottomSheetPreview", + "RoomMemberListViewBannedPreview", + "SasEmojisPreview", + "SecureBackupSetupViewChangePreview", + "SelectedUserCannotRemovePreview", + "TextComposerAddCaptionPreview", + "TextComposerCaptionPreview", + "TextComposerEditCaptionPreview", + "TextComposerEditNotEncryptedPreview", + "TextComposerEditPreview", + "TextComposerFormattingNotEncryptedPreview", + "TextComposerFormattingPreview", + "TextComposerLinkDialogCreateLinkPreview", + "TextComposerLinkDialogCreateLinkWithoutTextPreview", + "TextComposerLinkDialogEditLinkPreview", + "TextComposerReplyPreview", + "TextComposerSimpleNotEncryptedPreview", + "TextComposerSimplePreview", + "TextComposerVoiceNotEncryptedPreview", + "TextComposerVoicePreview", + "TextFieldDialogWithErrorPreview", + "TimelineImageWithCaptionRowPreview", + "TimelineItemEventRowForDirectRoomPreview", + "TimelineItemEventRowShieldPreview", + "TimelineItemEventRowTimestampPreview", + "TimelineItemEventRowUtdPreview", + "TimelineItemEventRowWithManyReactionsPreview", + "TimelineItemEventRowWithRRPreview", + "TimelineItemEventRowWithReplyPreview", + "TimelineItemGroupedEventsRowContentCollapsePreview", + "TimelineItemGroupedEventsRowContentExpandedPreview", + "TimelineItemImageViewHideMediaContentPreview", + "TimelineItemVideoViewHideMediaContentPreview", + "TimelineItemVoiceViewUnifiedPreview", + "TimelineVideoWithCaptionRowPreview", + "TimelineViewMessageShieldPreview", + "UserAvatarColorsPreview", + "UserProfileHeaderSectionWithVerificationViolationPreview", + "VoiceItemViewPlayPreview", + ) + + @Test + fun `previewNameExceptions is sorted alphabetically`() { + assertThat(previewNameExceptions.sorted()).isEqualTo(previewNameExceptions) + } + + @Test + fun `previewNameExceptions only contains existing functions`() { + val names = previewNameExceptions.toMutableSet() + Konsist + .scopeFromProject() + .functions() + .withAllAnnotationsOf(PreviewsDayNight::class) + .withName(previewNameExceptions) + .let { + it.forEach { function -> + names.remove(function.name) + } + } + assertThat(names).isEmpty() + } + @Test fun `Functions with '@PreviewsDayNight' have correct name`() { Konsist .scopeFromProject() .functions() .withAllAnnotationsOf(PreviewsDayNight::class) - .withoutName( - "AsyncIndicatorFailurePreview", - "AsyncIndicatorLoadingPreview", - "BackgroundVerticalGradientDisabledPreview", - "BackgroundVerticalGradientEnterprisePreview", - "BackgroundVerticalGradientPreview", - "CallScreenPipViewPreview", - "ColorAliasesPreview", - "DefaultRoomListTopBarWithIndicatorPreview", - "FocusedEventPreview", - "GradientFloatingActionButtonCircleShapePreview", - "HeaderFooterPageScrollablePreview", - "IconsCompoundPreview", - "IconsOtherPreview", - "MarkdownTextComposerEditPreview", - "MatrixBadgeAtomPositivePreview", - "MatrixBadgeAtomNeutralPreview", - "MatrixBadgeAtomNegativePreview", - "MatrixBadgeAtomInfoPreview", - "MentionSpanPreview", - "MessageComposerViewVoicePreview", - "MessagesReactionButtonAddPreview", - "MessagesReactionButtonExtraPreview", - "MessagesViewWithIdentityChangePreview", - "MessagesViewWithTypingPreview", - "PageTitleWithIconFullPreview", - "PageTitleWithIconMinimalPreview", - "PendingMemberRowWithLongNamePreview", - "PinUnlockViewInAppPreview", - "PollAnswerViewDisclosedNotSelectedPreview", - "PollAnswerViewDisclosedSelectedPreview", - "PollAnswerViewEndedSelectedPreview", - "PollAnswerViewEndedWinnerNotSelectedPreview", - "PollAnswerViewEndedWinnerSelectedPreview", - "PollAnswerViewUndisclosedNotSelectedPreview", - "PollAnswerViewUndisclosedSelectedPreview", - "PollContentViewCreatorEditablePreview", - "PollContentViewCreatorEndedPreview", - "PollContentViewCreatorPreview", - "PollContentViewDisclosedPreview", - "PollContentViewEndedPreview", - "PollContentViewUndisclosedPreview", - "ReadReceiptBottomSheetPreview", - "RoomMemberListViewBannedPreview", - "SasEmojisPreview", - "SecureBackupSetupViewChangePreview", - "SelectedUserCannotRemovePreview", - "TextComposerAddCaptionPreview", - "TextComposerCaptionPreview", - "TextComposerEditPreview", - "TextComposerEditNotEncryptedPreview", - "TextComposerEditCaptionPreview", - "TextComposerFormattingPreview", - "TextComposerFormattingNotEncryptedPreview", - "TextComposerLinkDialogCreateLinkPreview", - "TextComposerLinkDialogCreateLinkWithoutTextPreview", - "TextComposerLinkDialogEditLinkPreview", - "TextComposerReplyPreview", - "TextComposerReplyNotEncryptedPreview", - "TextComposerSimplePreview", - "TextComposerSimpleNotEncryptedPreview", - "TextComposerVoicePreview", - "TextComposerVoiceNotEncryptedPreview", - "TextFieldDialogWithBorderPreview", - "TextFieldDialogWithErrorPreview", - "TimelineImageWithCaptionRowPreview", - "TimelineItemEventRowForDirectRoomPreview", - "TimelineItemEventRowShieldPreview", - "TimelineItemEventRowTimestampPreview", - "TimelineItemEventRowUtdPreview", - "TimelineItemEventRowWithManyReactionsPreview", - "TimelineItemEventRowWithRRPreview", - "TimelineItemEventRowWithReplyPreview", - "TimelineItemGroupedEventsRowContentCollapsePreview", - "TimelineItemGroupedEventsRowContentExpandedPreview", - "TimelineItemImageViewHideMediaContentPreview", - "TimelineItemVideoViewHideMediaContentPreview", - "TimelineItemVoiceViewUnifiedPreview", - "TimelineVideoWithCaptionRowPreview", - "TimelineViewMessageShieldPreview", - "UserAvatarColorsPreview", - "UserProfileHeaderSectionWithVerificationViolationPreview", - "VoiceItemViewPlayPreview", - ) + .withoutName(previewNameExceptions) .assertTrue( additionalMessage = "Functions for Preview should be named like this: Preview. " + "Exception can be added to the test, for multiple Previews of the same view", From 1782e6d30b2875607c2aa71f653ce83e9519c1b2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 15:03:30 +0200 Subject: [PATCH 08/69] Apply gradient to focused Event. --- .../timeline/components/TimelineItemRow.kt | 34 +++++++++++------ .../designsystem/modifiers/Gradient.kt | 37 +++++++++++-------- .../designsystem/theme/ColorAliases.kt | 5 --- .../tests/konsist/KonsistPreviewTest.kt | 1 + 4 files changed, 46 insertions(+), 31 deletions(-) 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 ffbcfee305..9628fb2bb4 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 @@ -37,11 +37,11 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent import io.element.android.features.messages.impl.timeline.protection.TimelineProtectionEvent import io.element.android.features.messages.impl.timeline.protection.TimelineProtectionState +import io.element.android.libraries.designsystem.modifiers.subtleColorStops import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.text.toPx import io.element.android.libraries.designsystem.theme.LocalBuildMeta -import io.element.android.libraries.designsystem.theme.highlightedMessageBackgroundColor import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings @@ -206,23 +206,20 @@ internal fun TimelineItemRow( @Suppress("ModifierComposable") @Composable private fun Modifier.focusedEvent( - focusedEventOffset: Dp + focusedEventOffset: Dp, + isEnterpriseBuild: Boolean = LocalBuildMeta.current.isEnterpriseBuild, ): Modifier { - val highlightedLineColor = ElementTheme.colors.textActionAccent - val gradientFirstColor = if (LocalBuildMeta.current.isEnterpriseBuild) { - ElementTheme.colors.textActionAccent.copy(alpha = 0.125f) + val highlightedLineColor = if (isEnterpriseBuild) { + ElementTheme.colors.textActionAccent } else { - ElementTheme.colors.highlightedMessageBackgroundColor + ElementTheme.colors.borderAccentSubtle } - val gradientColors = listOf( - gradientFirstColor, - ElementTheme.colors.bgCanvasDefault, - ) + val gradientColors = subtleColorStops(isEnterpriseBuild) val verticalOffset = focusedEventOffset.toPx() val verticalRatio = 0.7f return drawWithCache { val brush = Brush.verticalGradient( - colors = gradientColors, + colorStops = gradientColors, endY = size.height * verticalRatio, ) onDrawBehind { @@ -251,3 +248,18 @@ internal fun FocusedEventPreview() = ElementPreview { .focusedEvent(0.dp), ) } + +@PreviewsDayNight +@Composable +internal fun FocusedEventEnterprisePreview() = ElementPreview { + Box( + modifier = Modifier + .padding(16.dp) + .fillMaxWidth() + .height(160.dp) + .focusedEvent( + focusedEventOffset = 0.dp, + isEnterpriseBuild = true, + ), + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt index 9e1950df5f..4de9312436 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt @@ -34,26 +34,33 @@ fun Modifier.backgroundVerticalGradient( if (!isVisible) return this return background( brush = Brush.verticalGradient( - colorStops = buildList { - if (isEnterpriseBuild) { - // For enterprise builds, ensure that we are theming the gradient - add(0f to ElementTheme.colors.textActionAccent.copy(alpha = 0.5f)) - add(0.75f to ElementTheme.colors.bgCanvasDefault) - add(1f to Color.Transparent) - } else { - add(0f to ElementTheme.colors.gradientSubtleStop1) - add(1 / 5f to ElementTheme.colors.gradientSubtleStop2) - add(2 / 5f to ElementTheme.colors.gradientSubtleStop3) - add(3 / 5f to ElementTheme.colors.gradientSubtleStop4) - add(4 / 5f to ElementTheme.colors.gradientSubtleStop5) - add(1f to ElementTheme.colors.gradientSubtleStop6) - } - }.toTypedArray(), + colorStops = subtleColorStops(isEnterpriseBuild), ), alpha = 0.75f, ) } +@Composable +fun subtleColorStops( + isEnterpriseBuild: Boolean = LocalBuildMeta.current.isEnterpriseBuild, +): Array> { + return buildList { + if (isEnterpriseBuild) { + // For enterprise builds, ensure that we are theming the gradient + add(0f to ElementTheme.colors.textActionAccent.copy(alpha = 0.5f)) + add(0.75f to ElementTheme.colors.bgCanvasDefault) + add(1f to Color.Transparent) + } else { + add(0f to ElementTheme.colors.gradientSubtleStop1) + add(1 / 5f to ElementTheme.colors.gradientSubtleStop2) + add(2 / 5f to ElementTheme.colors.gradientSubtleStop3) + add(3 / 5f to ElementTheme.colors.gradientSubtleStop4) + add(4 / 5f to ElementTheme.colors.gradientSubtleStop5) + add(1f to ElementTheme.colors.gradientSubtleStop6) + } + }.toTypedArray() +} + @PreviewsDayNight @Composable internal fun BackgroundVerticalGradientPreview() = ElementPreview { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 5576a56519..10541d4a8d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -100,10 +100,6 @@ val SemanticColors.mentionPillBackground val SemanticColors.bigCheckmarkBorderColor get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 -@OptIn(CoreColorToken::class) -val SemanticColors.highlightedMessageBackgroundColor - get() = if (isLight) LightColorTokens.colorGreen300 else DarkColorTokens.colorGreen300 - // Badge colors @OptIn(CoreColorToken::class) @@ -148,7 +144,6 @@ internal fun ColorAliasesPreview() = ElementPreview { "temporaryColorBgSpecial" to ElementTheme.colors.temporaryColorBgSpecial, "iconSuccessPrimaryBackground" to ElementTheme.colors.iconSuccessPrimaryBackground, "bigCheckmarkBorderColor" to ElementTheme.colors.bigCheckmarkBorderColor, - "highlightedMessageBackgroundColor" to ElementTheme.colors.highlightedMessageBackgroundColor, ) ) } diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 4513f86189..cebbba2b01 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -64,6 +64,7 @@ class KonsistPreviewTest { "ColorAliasesPreview", "DefaultRoomListTopBarWithIndicatorPreview", "FocusedEventPreview", + "FocusedEventEnterprisePreview", "GradientFloatingActionButtonCircleShapePreview", "HeaderFooterPageScrollablePreview", "IconsCompoundPreview", From 66c419dfa363b121574da09379fc122040db7381 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 15:06:33 +0200 Subject: [PATCH 09/69] Use color from Semantics. --- .../android/libraries/designsystem/theme/ColorAliases.kt | 6 ------ .../libraries/textcomposer/components/FormattingOption.kt | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 10541d4a8d..2db7a791fe 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -52,11 +52,6 @@ val SemanticColors.messageFromOtherBackground val SemanticColors.progressIndicatorTrackColor get() = if (isLight) LightColorTokens.colorAlphaGray500 else DarkColorTokens.colorAlphaGray500 -// This color is not present in Semantic color, so put hard-coded value for now -@OptIn(CoreColorToken::class) -val SemanticColors.iconSuccessPrimaryBackground - get() = if (isLight) LightColorTokens.colorGreen300 else DarkColorTokens.colorGreen300 - // This color is not present in Semantic color, so put hard-coded value for now @OptIn(CoreColorToken::class) val SemanticColors.bgSubtleTertiary @@ -142,7 +137,6 @@ internal fun ColorAliasesPreview() = ElementPreview { "messageFromOtherBackground" to ElementTheme.colors.messageFromOtherBackground, "progressIndicatorTrackColor" to ElementTheme.colors.progressIndicatorTrackColor, "temporaryColorBgSpecial" to ElementTheme.colors.temporaryColorBgSpecial, - "iconSuccessPrimaryBackground" to ElementTheme.colors.iconSuccessPrimaryBackground, "bigCheckmarkBorderColor" to ElementTheme.colors.bigCheckmarkBorderColor, ) ) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt index 48ad19f812..ebeb02c9c2 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt @@ -30,7 +30,6 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon -import io.element.android.libraries.designsystem.theme.iconSuccessPrimaryBackground @Composable internal fun FormattingOption( @@ -42,7 +41,7 @@ internal fun FormattingOption( modifier: Modifier = Modifier, ) { val backgroundColor = when (state) { - FormattingOptionState.Selected -> ElementTheme.colors.iconSuccessPrimaryBackground + FormattingOptionState.Selected -> ElementTheme.colors.bgAccentSelected FormattingOptionState.Default, FormattingOptionState.Disabled -> Color.Transparent } From d1e04d510ff3a7132379242935d2c9801474023b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 15:13:24 +0200 Subject: [PATCH 10/69] Use color from Semantics. --- .../designsystem/theme/ColorAliases.kt | 18 ------------------ .../textcomposer/mentions/MentionSpanTheme.kt | 4 ++-- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 2db7a791fe..4a5aee2f06 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -70,27 +70,9 @@ val SemanticColors.pinDigitBg val SemanticColors.currentUserMentionPillText get() = if (isLight) LightColorTokens.colorGreen1100 else DarkColorTokens.colorGreen1100 -val SemanticColors.currentUserMentionPillBackground - get() = if (isLight) { - // We want LightDesignTokens.colorGreenAlpha400 - Color(0x3b07b661) - } else { - // We want DarkDesignTokens.colorGreenAlpha500 - Color(0xff003d29) - } - val SemanticColors.mentionPillText get() = textPrimary -val SemanticColors.mentionPillBackground - get() = if (isLight) { - // We want LightDesignTokens.colorGray400 - Color(0x1f052e61) - } else { - // We want DarkDesignTokens.colorGray500 - Color(0x26f4f7fa) - } - @OptIn(CoreColorToken::class) val SemanticColors.bigCheckmarkBorderColor get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt index edd5cfe9dd..af2cbdc25c 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt @@ -70,9 +70,9 @@ class MentionSpanTheme(val currentUserId: UserId) { @Composable fun updateStyles() { currentUserTextColor = ElementTheme.colors.currentUserMentionPillText.toArgb() - currentUserBackgroundColor = ElementTheme.colors.currentUserMentionPillBackground.toArgb() + currentUserBackgroundColor = ElementTheme.colors.bgBadgeAccent.toArgb() otherTextColor = ElementTheme.colors.mentionPillText.toArgb() - otherBackgroundColor = ElementTheme.colors.mentionPillBackground.toArgb() + otherBackgroundColor = ElementTheme.colors.bgBadgeDefault.toArgb() typeface.value = ElementTheme.typography.fontBodyLgMedium.rememberTypeface().value val density = LocalDensity.current From aaa7e976b89d8932d9ac0d9dbef8aec49ecde242 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 15:18:26 +0200 Subject: [PATCH 11/69] SuperButton --- .../components/button/SuperButton.kt | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt index a53955afc2..932158f281 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt @@ -36,10 +36,7 @@ import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp -import io.element.android.compound.annotations.CoreColorToken import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.internal.DarkColorTokens -import io.element.android.compound.tokens.generated.internal.LightColorTokens import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.LocalBuildMeta @@ -47,7 +44,6 @@ import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.lowHorizontalPaddingValue -@OptIn(CoreColorToken::class) @Composable fun SuperButton( onClick: () -> Unit, @@ -66,34 +62,26 @@ fun SuperButton( ButtonSize.Small -> PaddingValues(horizontal = 16.dp, vertical = 5.dp) } } - val isLightTheme = ElementTheme.isLightTheme val colors = if (LocalBuildMeta.current.isEnterpriseBuild) { listOf( ElementTheme.colors.textActionAccent, ElementTheme.colors.textActionAccent, ) } else { - remember(isLightTheme) { - if (isLightTheme) { - listOf( - LightColorTokens.colorBlue900, - LightColorTokens.colorGreen1100, - ) - } else { - listOf( - DarkColorTokens.colorBlue900, - DarkColorTokens.colorGreen1100, - ) - } - } + listOf( + ElementTheme.colors.gradientActionStop1, + ElementTheme.colors.gradientActionStop2, + ElementTheme.colors.gradientActionStop3, + ElementTheme.colors.gradientActionStop4, + ) } val shaderBrush = remember(colors) { object : ShaderBrush() { override fun createShader(size: Size): Shader { return LinearGradientShader( - from = Offset(0f, size.height), - to = Offset(size.width, 0f), + from = Offset(0f, 0f), + to = Offset(0f, size.height), colors = colors, ) } From 42b2b5980c838b2067b8b0246502f57747779f11 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 16:14:20 +0200 Subject: [PATCH 12/69] Use color from Semantics. --- .../atomic/atoms/MatrixBadgeAtom.kt | 18 +++++++----------- .../designsystem/theme/ColorAliases.kt | 18 ------------------ 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/MatrixBadgeAtom.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/MatrixBadgeAtom.kt index 51507064eb..227e2f27cc 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/MatrixBadgeAtom.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/atoms/MatrixBadgeAtom.kt @@ -14,10 +14,6 @@ import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.libraries.designsystem.components.Badge import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.badgeNegativeBackgroundColor -import io.element.android.libraries.designsystem.theme.badgeNegativeContentColor -import io.element.android.libraries.designsystem.theme.badgeNeutralBackgroundColor -import io.element.android.libraries.designsystem.theme.badgeNeutralContentColor object MatrixBadgeAtom { data class MatrixBadgeData( @@ -39,21 +35,21 @@ object MatrixBadgeAtom { ) { val backgroundColor = when (data.type) { Type.Positive -> ElementTheme.colors.bgBadgeAccent - Type.Neutral -> ElementTheme.colors.badgeNeutralBackgroundColor - Type.Negative -> ElementTheme.colors.badgeNegativeBackgroundColor + Type.Neutral -> ElementTheme.colors.bgBadgeDefault + Type.Negative -> ElementTheme.colors.bgCriticalSubtle Type.Info -> ElementTheme.colors.bgBadgeInfo } val textColor = when (data.type) { Type.Positive -> ElementTheme.colors.textBadgeAccent - Type.Neutral -> ElementTheme.colors.badgeNeutralContentColor - Type.Negative -> ElementTheme.colors.badgeNegativeContentColor + Type.Neutral -> ElementTheme.colors.textPrimary + Type.Negative -> ElementTheme.colors.textCriticalPrimary Type.Info -> ElementTheme.colors.textBadgeInfo } val iconColor = when (data.type) { - Type.Positive -> ElementTheme.colors.textBadgeAccent - Type.Neutral -> ElementTheme.colors.iconSecondary + Type.Positive -> ElementTheme.colors.iconAccentPrimary + Type.Neutral -> ElementTheme.colors.iconPrimary Type.Negative -> ElementTheme.colors.iconCriticalPrimary - Type.Info -> ElementTheme.colors.textBadgeInfo + Type.Info -> ElementTheme.colors.iconInfoPrimary } Badge( text = data.text, diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 4a5aee2f06..e0ec0322c4 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -77,24 +77,6 @@ val SemanticColors.mentionPillText val SemanticColors.bigCheckmarkBorderColor get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 -// Badge colors - -@OptIn(CoreColorToken::class) -val SemanticColors.badgeNeutralBackgroundColor - get() = if (isLight) LightColorTokens.colorAlphaGray300 else DarkColorTokens.colorAlphaGray300 - -@OptIn(CoreColorToken::class) -val SemanticColors.badgeNeutralContentColor - get() = if (isLight) LightColorTokens.colorGray1100 else DarkColorTokens.colorGray1100 - -@OptIn(CoreColorToken::class) -val SemanticColors.badgeNegativeBackgroundColor - get() = if (isLight) LightColorTokens.colorAlphaRed300 else DarkColorTokens.colorAlphaRed300 - -@OptIn(CoreColorToken::class) -val SemanticColors.badgeNegativeContentColor - get() = if (isLight) LightColorTokens.colorRed1100 else DarkColorTokens.colorRed1100 - @OptIn(CoreColorToken::class) val SemanticColors.pinnedMessageBannerIndicator get() = if (isLight) LightColorTokens.colorAlphaGray600 else DarkColorTokens.colorAlphaGray600 From e11f544133250db3b099e3b8014d3774cd4e3380 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 16:17:01 +0200 Subject: [PATCH 13/69] Use color from Semantics. --- .../android/libraries/designsystem/theme/ColorAliases.kt | 7 ------- .../libraries/textcomposer/mentions/MentionSpanTheme.kt | 8 ++------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index e0ec0322c4..5dd3d130bc 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -66,13 +66,6 @@ val SemanticColors.temporaryColorBgSpecial val SemanticColors.pinDigitBg get() = if (isLight) LightColorTokens.colorGray300 else DarkColorTokens.colorGray400 -@OptIn(CoreColorToken::class) -val SemanticColors.currentUserMentionPillText - get() = if (isLight) LightColorTokens.colorGreen1100 else DarkColorTokens.colorGreen1100 - -val SemanticColors.mentionPillText - get() = textPrimary - @OptIn(CoreColorToken::class) val SemanticColors.bigCheckmarkBorderColor get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt index af2cbdc25c..323c1f0a9a 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt @@ -28,10 +28,6 @@ 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.text.rememberTypeface -import io.element.android.libraries.designsystem.theme.currentUserMentionPillBackground -import io.element.android.libraries.designsystem.theme.currentUserMentionPillText -import io.element.android.libraries.designsystem.theme.mentionPillBackground -import io.element.android.libraries.designsystem.theme.mentionPillText import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.MatrixClient @@ -69,9 +65,9 @@ class MentionSpanTheme(val currentUserId: UserId) { @Suppress("ComposableNaming") @Composable fun updateStyles() { - currentUserTextColor = ElementTheme.colors.currentUserMentionPillText.toArgb() + currentUserTextColor = ElementTheme.colors.textBadgeAccent.toArgb() currentUserBackgroundColor = ElementTheme.colors.bgBadgeAccent.toArgb() - otherTextColor = ElementTheme.colors.mentionPillText.toArgb() + otherTextColor = ElementTheme.colors.textPrimary.toArgb() otherBackgroundColor = ElementTheme.colors.bgBadgeDefault.toArgb() typeface.value = ElementTheme.typography.fontBodyLgMedium.rememberTypeface().value From f7c8c6ac3b6875721a316ecaeee289be8cfa53ca Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 16:18:49 +0200 Subject: [PATCH 14/69] Use correct color. --- .../libraries/textcomposer/components/FormattingOption.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt index ebeb02c9c2..3a07dd5ee6 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/FormattingOption.kt @@ -47,7 +47,7 @@ internal fun FormattingOption( } val foregroundColor = when (state) { - FormattingOptionState.Selected -> ElementTheme.colors.iconSuccessPrimary + FormattingOptionState.Selected -> ElementTheme.colors.iconAccentPrimary FormattingOptionState.Default -> ElementTheme.colors.iconSecondary FormattingOptionState.Disabled -> ElementTheme.colors.iconDisabled } From e8a3720c2acbec7057d942bf604238b14d103169 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 16:28:33 +0200 Subject: [PATCH 15/69] Use color from Semantics. --- .../textcomposer/components/SendButton.kt | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt index 55e4350fb2..069247936f 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt @@ -18,7 +18,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawWithCache import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.LinearGradientShader import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.unit.dp @@ -62,13 +61,7 @@ internal fun SendButton( modifier = Modifier .clip(CircleShape) .size(36.dp) - .then( - if (canSendMessage) { - buttonBackgroundModifier() - } else { - Modifier - } - ) + .buttonBackgroundModifier(canSendMessage) ) { Icon( modifier = Modifier @@ -91,27 +84,35 @@ internal fun SendButton( } } -private fun buttonBackgroundModifier() = Modifier.drawWithCache { - // We have a square button, so height == width. - val height = size.height - val verticalGradientBrush = ShaderBrush( - LinearGradientShader( - from = Offset(0f, 0f), - to = Offset(0f, height), - colors = listOf( - Color(0xFF79DD98), - Color(0xFF0DBD8B), - Color(0xFF128585), - Color(0xFF24446B), +@Composable +private fun Modifier.buttonBackgroundModifier( + canSendMessage: Boolean, +) = then( + if (canSendMessage) { + val colors = listOf( + ElementTheme.colors.gradientActionStop1, + ElementTheme.colors.gradientActionStop2, + ElementTheme.colors.gradientActionStop3, + ElementTheme.colors.gradientActionStop4, + ) + Modifier.drawWithCache { + val verticalGradientBrush = ShaderBrush( + LinearGradientShader( + from = Offset(0f, 0f), + to = Offset(0f, size.height), + colors = colors, + ) ) - ) - ) - onDrawBehind { - drawRect( - brush = verticalGradientBrush, - ) + onDrawBehind { + drawRect( + brush = verticalGradientBrush, + ) + } + } + } else { + Modifier } -} +) @PreviewsDayNight @Composable From 99bfde7eec2245dcf0318a252c1831121e043d1f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 16:39:19 +0200 Subject: [PATCH 16/69] Centralize gradient color definitions --- .../libraries/designsystem/colors/Gradient.kt | 44 +++++++++++++++++++ .../components/button/SuperButton.kt | 8 +--- .../designsystem/modifiers/Gradient.kt | 11 +++-- .../textcomposer/components/SendButton.kt | 8 +--- 4 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/colors/Gradient.kt diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/colors/Gradient.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/colors/Gradient.kt new file mode 100644 index 0000000000..342377d0b8 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/colors/Gradient.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.designsystem.colors + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.ui.graphics.Color +import io.element.android.compound.theme.ElementTheme + +@Composable +@ReadOnlyComposable +fun gradientActionColors(): List = listOf( + ElementTheme.colors.gradientActionStop1, + ElementTheme.colors.gradientActionStop2, + ElementTheme.colors.gradientActionStop3, + ElementTheme.colors.gradientActionStop4, +) + +@Composable +@ReadOnlyComposable +fun gradientSubtleColors(): List = listOf( + ElementTheme.colors.gradientSubtleStop1, + ElementTheme.colors.gradientSubtleStop2, + ElementTheme.colors.gradientSubtleStop3, + ElementTheme.colors.gradientSubtleStop4, + ElementTheme.colors.gradientSubtleStop5, + ElementTheme.colors.gradientSubtleStop6, +) + +@Composable +@ReadOnlyComposable +fun gradientInfoColors(): List = listOf( + ElementTheme.colors.gradientInfoStop1, + ElementTheme.colors.gradientInfoStop2, + ElementTheme.colors.gradientInfoStop3, + ElementTheme.colors.gradientInfoStop4, + ElementTheme.colors.gradientInfoStop5, + ElementTheme.colors.gradientInfoStop6, +) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt index 932158f281..90dd64d59d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/SuperButton.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.colors.gradientActionColors import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.LocalBuildMeta @@ -68,12 +69,7 @@ fun SuperButton( ElementTheme.colors.textActionAccent, ) } else { - listOf( - ElementTheme.colors.gradientActionStop1, - ElementTheme.colors.gradientActionStop2, - ElementTheme.colors.gradientActionStop3, - ElementTheme.colors.gradientActionStop4, - ) + gradientActionColors() } val shaderBrush = remember(colors) { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt index 4de9312436..7b9ddfd447 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.colors.gradientSubtleColors import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.LocalBuildMeta @@ -51,12 +52,10 @@ fun subtleColorStops( add(0.75f to ElementTheme.colors.bgCanvasDefault) add(1f to Color.Transparent) } else { - add(0f to ElementTheme.colors.gradientSubtleStop1) - add(1 / 5f to ElementTheme.colors.gradientSubtleStop2) - add(2 / 5f to ElementTheme.colors.gradientSubtleStop3) - add(3 / 5f to ElementTheme.colors.gradientSubtleStop4) - add(4 / 5f to ElementTheme.colors.gradientSubtleStop5) - add(1f to ElementTheme.colors.gradientSubtleStop6) + val colors = gradientSubtleColors() + colors.forEachIndexed { index, color -> + add(index.toFloat() / (colors.size - 1) to color) + } } }.toTypedArray() } diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt index 069247936f..4ee00e550d 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/components/SendButton.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons +import io.element.android.libraries.designsystem.colors.gradientActionColors 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 @@ -89,12 +90,7 @@ private fun Modifier.buttonBackgroundModifier( canSendMessage: Boolean, ) = then( if (canSendMessage) { - val colors = listOf( - ElementTheme.colors.gradientActionStop1, - ElementTheme.colors.gradientActionStop2, - ElementTheme.colors.gradientActionStop3, - ElementTheme.colors.gradientActionStop4, - ) + val colors = gradientActionColors() Modifier.drawWithCache { val verticalGradientBrush = ShaderBrush( LinearGradientShader( From ef47d289abc8b63a1644a4ae3c1416774f5c3a92 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Mon, 7 Jul 2025 15:07:10 +0000 Subject: [PATCH 17/69] Update screenshots --- ...components_DefaultRoomListTopBarWithIndicator_Day_0_en.png | 4 ++-- ...mponents_DefaultRoomListTopBarWithIndicator_Night_0_en.png | 4 ++-- ...es.home.impl.components_DefaultRoomListTopBar_Day_0_en.png | 4 ++-- ....home.impl.components_DefaultRoomListTopBar_Night_0_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_0_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_10_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_11_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_13_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_14_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_1_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_2_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_3_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_4_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_5_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_6_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_7_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_8_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_9_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_0_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_10_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_11_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_13_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_14_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_1_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_2_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_3_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_4_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_5_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_6_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_7_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_8_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_9_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_10_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_11_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_12_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_16_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_1_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_2_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_3_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Day_5_en.png | 4 ++-- .../features.joinroom.impl_JoinRoomView_Night_10_en.png | 4 ++-- .../features.joinroom.impl_JoinRoomView_Night_11_en.png | 4 ++-- .../features.joinroom.impl_JoinRoomView_Night_12_en.png | 4 ++-- .../features.joinroom.impl_JoinRoomView_Night_16_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Night_1_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Night_2_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Night_3_en.png | 4 ++-- .../images/features.joinroom.impl_JoinRoomView_Night_5_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_0_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_1_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_2_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_3_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_4_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_5_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_6_en.png | 4 ++-- ...messages.impl.attachments.preview_AttachmentsView_7_en.png | 4 ++-- ...rypto.identity_MessagesViewWithIdentityChange_Day_0_en.png | 4 ++-- ...rypto.identity_MessagesViewWithIdentityChange_Day_1_en.png | 4 ++-- ...rypto.identity_MessagesViewWithIdentityChange_Day_2_en.png | 4 ++-- ...pto.identity_MessagesViewWithIdentityChange_Night_0_en.png | 4 ++-- ...pto.identity_MessagesViewWithIdentityChange_Night_1_en.png | 4 ++-- ...pto.identity_MessagesViewWithIdentityChange_Night_2_en.png | 4 ++-- ...pl.timeline.components_FocusedEventEnterprise_Day_0_en.png | 3 +++ ....timeline.components_FocusedEventEnterprise_Night_0_en.png | 3 +++ ...essages.impl.timeline.components_FocusedEvent_Day_0_en.png | 4 ++-- ...sages.impl.timeline.components_FocusedEvent_Night_0_en.png | 4 ++-- ...s_TimelineItemGroupedEventsRowContentExpanded_Day_0_en.png | 4 ++-- ...TimelineItemGroupedEventsRowContentExpanded_Night_0_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_0_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_10_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_11_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_12_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_13_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_14_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_15_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_16_en.png | 4 ++-- ...features.messages.impl.timeline_TimelineView_Day_17_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_1_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_2_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_3_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_4_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_5_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_6_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_7_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_8_en.png | 4 ++-- .../features.messages.impl.timeline_TimelineView_Day_9_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_0_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_10_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_11_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_12_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_13_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_14_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_15_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_16_en.png | 4 ++-- ...atures.messages.impl.timeline_TimelineView_Night_17_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_1_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_2_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_3_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_4_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_5_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_6_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_7_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_8_en.png | 4 ++-- ...eatures.messages.impl.timeline_TimelineView_Night_9_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_0_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_10_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_11_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_12_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_13_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_14_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_1_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_3_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_4_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_5_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_6_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_7_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_8_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Day_9_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_0_en.png | 4 ++-- .../features.messages.impl_MessagesView_Night_10_en.png | 4 ++-- .../features.messages.impl_MessagesView_Night_11_en.png | 4 ++-- .../features.messages.impl_MessagesView_Night_12_en.png | 4 ++-- .../features.messages.impl_MessagesView_Night_13_en.png | 4 ++-- .../features.messages.impl_MessagesView_Night_14_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_1_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_3_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_4_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_5_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_6_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_7_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_8_en.png | 4 ++-- .../images/features.messages.impl_MessagesView_Night_9_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_0_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_10_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_11_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_12_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_13_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_14_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_15_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_16_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_17_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_18_en.png | 4 ++-- .../features.roomdetails.impl_RoomDetailsDark_19_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_1_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_2_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_3_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_4_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_5_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_6_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_7_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_8_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetailsDark_9_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_0_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_10_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_11_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_12_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_13_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_14_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_15_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_16_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_17_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_18_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_19_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_1_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_2_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_3_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_4_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_5_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_6_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_7_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_8_en.png | 4 ++-- .../images/features.roomdetails.impl_RoomDetails_9_en.png | 4 ++-- ...s.userprofile.shared_UserProfileHeaderSection_Day_0_en.png | 4 ++-- ...userprofile.shared_UserProfileHeaderSection_Night_0_en.png | 4 ++-- .../features.userprofile.shared_UserProfileView_Day_2_en.png | 4 ++-- ...features.userprofile.shared_UserProfileView_Night_2_en.png | 4 ++-- ...designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en.png | 4 ++-- ...signsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en.png | 4 ++-- ...gnsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en.png | 4 ++-- ...system.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en.png | 4 ++-- ...ignsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en.png | 4 ++-- ...nsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en.png | 4 ++-- ...gnsystem.atomic.atoms_MatrixBadgeAtomPositive_Day_0_en.png | 4 ++-- ...system.atomic.atoms_MatrixBadgeAtomPositive_Night_0_en.png | 4 ++-- ...es.designsystem.components.button_SuperButton_Day_0_en.png | 4 ++-- ....designsystem.components.button_SuperButton_Night_0_en.png | 4 ++-- ...braries.designsystem.components_BloomInitials_Day_0_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_1_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_2_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_3_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_4_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_5_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_6_en.png | 3 --- ...braries.designsystem.components_BloomInitials_Day_7_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_0_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_1_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_2_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_3_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_4_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_5_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_6_en.png | 3 --- ...aries.designsystem.components_BloomInitials_Night_7_en.png | 3 --- .../libraries.designsystem.components_Bloom_Day_0_en.png | 3 --- .../libraries.designsystem.components_Bloom_Night_0_en.png | 3 --- ....modifiers_BackgroundVerticalGradientDisabled_Day_0_en.png | 3 +++ ...odifiers_BackgroundVerticalGradientDisabled_Night_0_en.png | 3 +++ ...odifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png | 3 +++ ...ifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png | 3 +++ ...gnsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png | 3 +++ ...system.modifiers_BackgroundVerticalGradient_Night_0_en.png | 3 +++ .../libraries.designsystem.theme_ColorAliases_Day_0_en.png | 4 ++-- .../libraries.designsystem.theme_ColorAliases_Night_0_en.png | 4 ++-- ...ries.textcomposer.components_FormattingOption_Day_0_en.png | 4 ++-- ...es.textcomposer.components_FormattingOption_Night_0_en.png | 4 ++-- .../libraries.textcomposer.components_SendButton_Day_0_en.png | 4 ++-- ...ibraries.textcomposer.components_SendButton_Night_0_en.png | 4 ++-- ...raries.textcomposer.mentions_MentionSpanTheme_Day_0_en.png | 4 ++-- ...ries.textcomposer.mentions_MentionSpanTheme_Night_0_en.png | 4 ++-- ...braries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png | 4 ++-- ...aries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png | 4 ++-- ...libraries.textcomposer_TextComposerAddCaption_Day_0_en.png | 4 ++-- ...braries.textcomposer_TextComposerAddCaption_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerCaption_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerCaption_Night_0_en.png | 4 ++-- ...ibraries.textcomposer_TextComposerEditCaption_Day_0_en.png | 4 ++-- ...raries.textcomposer_TextComposerEditCaption_Night_0_en.png | 4 ++-- ...ies.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png | 4 ++-- ...s.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerEdit_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerEdit_Night_0_en.png | 4 ++-- ...xtcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png | 4 ++-- ...composer_TextComposerFormattingNotEncrypted_Night_0_en.png | 4 ++-- ...libraries.textcomposer_TextComposerFormatting_Day_0_en.png | 4 ++-- ...braries.textcomposer_TextComposerFormatting_Night_0_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png | 4 ++-- ...s.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png | 4 ++-- ...s.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png | 4 ++-- ...es.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png | 4 ++-- ...textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png | 4 ++-- ...textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png | 4 ++-- ....textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_10_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_11_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_1_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_2_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_3_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_4_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_5_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_6_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_7_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_8_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Day_9_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_10_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_11_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_1_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_2_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_3_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_4_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_5_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_6_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_7_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_8_en.png | 4 ++-- .../libraries.textcomposer_TextComposerReply_Night_9_en.png | 4 ++-- ...s.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png | 4 ++-- ...textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerSimple_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerSimple_Night_0_en.png | 4 ++-- ...es.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png | 4 ++-- ....textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerVoice_Day_0_en.png | 4 ++-- .../libraries.textcomposer_TextComposerVoice_Night_0_en.png | 4 ++-- 290 files changed, 552 insertions(+), 582 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Day_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Night_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_1_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_2_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_3_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_4_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_5_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_6_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_7_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_1_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_2_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_3_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_4_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_5_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_6_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_7_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Day_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Night_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Day_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Night_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png index a35b0147a0..50d4b1b5f2 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62a7e346397466a3a98bdd2e3dfcad43d65471017d40aa719c00ac2032ff9509 -size 41231 +oid sha256:f2adacc3ef3537cc0b81377786d03084f4923a7da1401ab84d03c907569e52d4 +size 27010 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png index 398a201bdc..b5940109a6 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abe3d11ea9f0088529da6651526650a1bd2fe34335da31f043cfc8b1fb945597 -size 49428 +oid sha256:fb861a1c8c4188b1586384b65c78ed18ca23030066e21c0245606077f89f3c29 +size 24909 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png index f3954c778c..8c32610bf5 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d079c9142b483482b12e2e55253bb02cf9ff1f37b95d455b1887d54dbfbbb9b0 -size 40941 +oid sha256:4a449498d150466a5b3e27001228a39e935be7c637c422955375a18ea6f1fcb2 +size 26754 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png index 3bcc64f947..ca9fdb1ba3 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09c215a680812b95b07501aba343331932c53e8988d13b43e8f3296d84664f63 -size 49089 +oid sha256:c4ee431749b5f051b7345ac7f141f88ee8f998f04a2b7743960c5fa27af638e7 +size 24605 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png index b3dfe3db1d..e52651a78e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7b0dc90002ec59917ed0c64dae785088117c5aca61961c3d71dc7c05d2fa72b -size 82238 +oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 +size 67519 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png index 2bc640fe3a..c38e9d1f8e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:660e96d8c627d8f24bbfbc150a3e2b7e74f6819e7fbaa581c5872f544ed9685e -size 46034 +oid sha256:2cba6e6115836c2274ad829b149d5c85973baf560f8b11e3b7d30023282b8ca8 +size 34967 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png index 6e0088ee14..cb9c948643 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f65131302fab3b0ba710528947376b57230a74731aa6549473998c30f4e07f6e -size 40681 +oid sha256:8a6fa99ca8f18b0fef17abe4d9c8de4a9f34f8d0ae097f55bb6e860f4f7098fb +size 29681 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png index ca0f363c49..7e5204d280 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20e6d5a1c7218304ede990c1906ec628593acbe57a6496b98a2c1fe9c87d1ae3 -size 105294 +oid sha256:83807fc3cc614bfc1abb99e062df4dce72aa92626ffb5a24a3fcb357cc5e95c1 +size 90869 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png index b7e1278591..7b9cd58e5b 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6041a7693307a30183606e7f8f2b605ba4c9bfb8c7ad5d8122837749813d6e2c -size 99928 +oid sha256:6d5f42641d0566d91fbb55ea5f05d54979eb66c6e0b12c01d84aec1c90c218b8 +size 85395 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png index ca51b8eef3..ef42896b95 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:765619612593a9821c31afb6268259890d9374099f5e26ae9897aca09abf06e9 -size 82801 +oid sha256:1eca7e08ad504da3750c622b73450511030a5d0856d7ecede0d23402d39d8855 +size 68807 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png index b3dfe3db1d..e52651a78e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7b0dc90002ec59917ed0c64dae785088117c5aca61961c3d71dc7c05d2fa72b -size 82238 +oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 +size 67519 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png index f6988f9732..5216e4a4fd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51d89e7c0e8c205c230351c4a00e0d560f3f54c6b423ae3b2b801fd6d00343bf -size 83509 +oid sha256:cc132c097ec62633e72292861654fa825f1962eacf8cdcea9553aa0475e2e2fd +size 68790 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png index ec5767287f..f5e553861e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7383bea26cbd09cff981e6b4202f7e9bca788094ea482241b45eaefcbf16127 -size 34927 +oid sha256:6766c513026e13417d0371f196d69b712a900feeb1f814cda14ba34df188c73a +size 23921 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png index b3dfe3db1d..e52651a78e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7b0dc90002ec59917ed0c64dae785088117c5aca61961c3d71dc7c05d2fa72b -size 82238 +oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 +size 67519 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png index 20806bc42c..134bb55b39 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4385b380efbae924d4a8fece278a61003d40acbd795fef1aa2eab4c5fadbf367 -size 60691 +oid sha256:a195f301e7a3b41c3b485cf1e448cde6d12312d0ad06cc48ea5c3cfab2621040 +size 53715 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png index 1b34b511fb..193e1c6989 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d64fa49cfca399eb073a8efac881aebbfed38726116d3113f9a562245ac9a41 -size 60495 +oid sha256:0d26274f91876c8a79846131149b38f544171cdef0396dfaa07c8c3e482aeb61 +size 53530 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png index 13db73a34e..3d46f88a8d 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:020d732b7b3a4f43918bee7b9424ffd03fe20074c5823341811a1c700551b2f2 -size 58734 +oid sha256:63cb36a2139a260f5589d334dfe012414fa4404d297499d04fb630d206db3b9a +size 51750 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png index 114ba675ce..820b379001 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63f8198b96e49f9a29dad22ef2249503d1528aec874599d9daab3f8634d662d7 -size 99704 +oid sha256:f67ce8fdbd81b01cee6f1b8f2f1d3f735f14b9afd5c218b3890ee53129b04f39 +size 85193 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png index 92d58a36cd..d2b32c31aa 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1e0f43d447faf770ee7aa4f443f3a310f520c9437cbd5baca9ac7ce36d2aae -size 88613 +oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 +size 63310 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png index 81c7db17ae..c6ef593e68 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6be30df0d8f5ba0a57c720bcc16eefc3a5b7dacfc8115a8d47a42edab3e63e82 -size 53250 +oid sha256:8ef7257132254bc1a6092da64c643efe1e4ac9f75566f81b05b2afc768248364 +size 30605 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png index 66309e8b71..a087f75252 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c6dc3c0c72d1ea8a980f393d7cfe2c9e0392016c8fc25b901817dd077d8526c -size 47265 +oid sha256:37d62040e49a4ae81ca161b377dab60491984ae1784ed79123658ff4a2df6e18 +size 24939 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png index 19375d3ec5..bb19ad8a48 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c93289bc30c3b590360f916a55a86a5cc98028bd2201cb410f329de85ed615c -size 111059 +oid sha256:8600a1be8fd98cf8776e6887b51f5948a28d3f90ade2a189a52a1c1f90655afe +size 85983 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png index 6cafa75e88..d2ed731655 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7563629f9df4012d7cc35b2805e1ac381ccdb171935b35cad0d1ea60186e3e7d -size 105496 +oid sha256:af5dd69eda38ecc5b461e0f11d2ee1556e8f85b5d26ea28dc90bef41d97f6c9d +size 80498 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png index f7edb97045..1ccf486316 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7f9c804e0f2b75c84a99081d33d12c46ef2aed62aaf044ec1f957f728f586b1 -size 88564 +oid sha256:53552b4c4ebcdfee0da6a64138f7f07080f2d2a0e7db195b327466854b9484b8 +size 64494 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png index 92d58a36cd..d2b32c31aa 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1e0f43d447faf770ee7aa4f443f3a310f520c9437cbd5baca9ac7ce36d2aae -size 88613 +oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 +size 63310 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png index 1c65bb2ce7..f51729e646 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3962f724784add8dc33c7327dd866cab76eff0d53abb781b94e974ae68212e0b -size 90485 +oid sha256:3dde30b95371e46ad6d36dfd7c95e2a1e6968517d75b11d16512d5ac53337bb0 +size 65102 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png index 9b2a3650ed..35f9e77b2a 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4850c3002637166016ac75129c0fd4081c540848969b40eb84c4f60a4366c111 -size 43857 +oid sha256:6d6454d10e26c7c1ffb14931c38af49ce025a5c0853930c1cddf1f7b2b5e1967 +size 21562 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png index 92d58a36cd..d2b32c31aa 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1e0f43d447faf770ee7aa4f443f3a310f520c9437cbd5baca9ac7ce36d2aae -size 88613 +oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 +size 63310 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png index 611da1630c..40db68f180 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acde7691ec0ebe690bcb29478963107e2dc0fe6fa54892b3600f50e0cf1db2a3 -size 69463 +oid sha256:44c89fe4f267ae04e0ed8f8076e97a90d4a1c55aea47349a16abe8985925677e +size 51064 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png index 642eca994d..c7599fa29e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38e55635243d77c084053c4feea03dcedabd549aa556f4a622ec2d629bb4f426 -size 69240 +oid sha256:146044e82709dfd8262082b31789eed72e9bebc100a7a8f15a7b8d41f5a95ad1 +size 50833 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png index 0604b0bc73..d93ea44633 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fc45bd4279456b75cadcb8381451f9e6a0e1fadaf4a8f22274c94aa89c7c348 -size 67496 +oid sha256:b516e9ad28282895de6671c152aa57e4d8e74345b3745d8b909b39d81e29ebb7 +size 49075 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png index 48835abda6..dcaa2361ae 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d9f42109a12e450a13d1166f7d7790913e1dd847cd44f00a2c881d825cad9b4 -size 105496 +oid sha256:93e35351228d382dd6c890441f09536915b1cd10f2a6592a6f90f52783dc3e46 +size 80482 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png index 21150eb154..b6db4cbb4b 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9163c7aaae605af5470506d99eed7ecd19374fa7e719f8b0318e55f1319702a2 -size 43406 +oid sha256:c7944e3a428379cd240ef04f81ce82b67f1f42cc4c35c1e986ee37af35b8fcf8 +size 38434 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png index 1b43985f3f..9576894cbd 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:634df4b9fab9797663e11293e5894de9854e918184d227e73e47be047bcb9623 -size 50335 +oid sha256:c6ac5f05e753028ee09aaaaf6564113199aff3dada0b42ec534d826ef0aaa96d +size 45309 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png index 210a02addf..ec39668d32 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a971216d0cfc58f65b3589479420c02f2a04010ac27d79ea2434075dcd6b4f7c -size 51283 +oid sha256:3feefaf49170429ce228284a10fc27e3396965a89913ae075fe48ca752029f8d +size 46343 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png index 6b0197002f..f158645299 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8dcb5fb864d2692e62de1161e3420a3c9e9d7a338110b5e3b7791753e7995b7a -size 45863 +oid sha256:9b47188101c77d3422756c3a904e2c2a567a18cc6b551b77d98cdb465133357d +size 40870 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png index 91315f0056..afeb729431 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ee424d3f53556823f1bc19a1bf0d742918dff295962f4dda371459c8607fc15 -size 34990 +oid sha256:ae8c3144d1b7e5eb19bf708a48ee4d112d8f95cb9113a2f724e36c63a94bd458 +size 30060 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png index 0e31405365..3997590259 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f19a41fa98afa02f2d913c02cfd8cca6e53d6af164ab1c81d98cc75ae877bbc -size 36305 +oid sha256:d3de02fbfc362822fc901339e1c17f832be36dc68a51521e6ceda95b78ab3c05 +size 31380 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png index 33f9384163..e83fab7580 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e527cea5e937b1ab89fcbc0388ab5d81008ceef8e85b25af227f4c8465df268 -size 31504 +oid sha256:c863e3132eb572e402067d1c9076b8d91925ce44e50a01975275201f9d1dea5c +size 26625 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png index 51e9f08da5..dbcafc5018 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2604ac285ee6334a46fe348313fe2abe655860bd9b54f237fc92d0f99e38a7be -size 29162 +oid sha256:706915d5e1b6867b044400aa5c11a2da9b69db257343e3fb0c307eb673e60bcd +size 27743 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png index b2f1860543..92e5734cf2 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e01e9453b8c72e9a1a55bbb4f14e88836f93d1d9b28af10557aec81eae847d74 -size 43374 +oid sha256:22324bf8af409876b3bc6706332761ad66301418f51e05169884b9a6aeda0d2d +size 38252 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png index 95227bd819..aae1f34a7d 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90b00f22d1d2d1b22f6260c95ea3fe39851682d258df7012b89c68db2af01601 -size 50133 +oid sha256:c1703ac3e99ffa2fd8ea915399bc508a5fc2df66917ae0898986419d731f968a +size 44984 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png index 4d7d868c64..e2f578135a 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18d2e25e32b0dc63b72a2c8c32213d2c7d9d499bf568b88addf24709e433ce34 -size 50997 +oid sha256:3faabcb1ca9d3cc47f446203ca4037fdf5af2072992c55cd8b20a989393a1990 +size 45894 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png index b220116942..7744686c4c 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bed222380fcd708584b52aa098622487025598c870ac3ed68694dcf7e900038 -size 45755 +oid sha256:d16cf478ee1c7873706ee1056685b9b7feb0b1a8fdb5dbd31a272bc8536b671e +size 40624 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png index c9777afe5d..a6abedbf31 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:445c343404fba0ed533ffe07a138ddf74686f67e3e163626963be4e5db17fd7f -size 34479 +oid sha256:4350a822cb6444db068314bd4add32cef9798ff11bd42c3f4e018f11cbe84a1c +size 29371 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png index 846b7643c0..3ef258c81e 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e2489ed1cbbd10709456b0a910b8bbb6607732bbf40c4ea30114306875fe999 -size 36282 +oid sha256:4d05fb7926b5e09e638a2777e97d51069c993320575a6df41a389a0a362d5c9d +size 31210 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png index e02296766b..ce4244abda 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b7b89d817b0d1847828b214a1340fc041e85a44d43fc89dae64e6c56324ac41 -size 31806 +oid sha256:ae27e9cae53436ce7b24c2650fafd0c521de8f69efadba4470e4a0474824e2a5 +size 26793 diff --git a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png index 8c700b0e52..202a4ed8cf 100644 --- a/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.joinroom.impl_JoinRoomView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ce6e3a17d5b092b4f292659cea45834207b4956e273b7cecc69c7a07daa8d51 -size 27255 +oid sha256:3f2800add49143a4ff174f1d873ba89d9e54376d6474248f49a31cedfbd691fe +size 26139 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_0_en.png index c36a7bc54e..0be9c85fe2 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649 -size 395064 +oid sha256:724df787c6c033c40967bfc62de74e71613ef8221bfc18a9859fcc0b5fb9a8ca +size 394854 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_1_en.png index 80ba8d6f67..3d03bc54a2 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:503e64a8acb9630e3a6cece0028283407bd54fda2f8ca7bd41c09d12491b48d1 -size 394757 +oid sha256:a4b9d7cfa35310566401bc031a2554e49ea71820b3050abc449f91fad3ad892a +size 394573 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_2_en.png index 333a4833e9..9f1be8d864 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ce509e6357edda6b8206eea46a7818386423c96abaddae8ae8e886244a93784 -size 51168 +oid sha256:3ccf51958e5757064087f6a589032b7bb25b30827ecfc7864f157a6da689a67c +size 51024 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_3_en.png index c36a7bc54e..0be9c85fe2 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649 -size 395064 +oid sha256:724df787c6c033c40967bfc62de74e71613ef8221bfc18a9859fcc0b5fb9a8ca +size 394854 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_4_en.png index 5bb1d1133a..ae6fd4011c 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:089a84e094a191836ae654f3214b1b3a590a1b13e0d1972c8ef2ac82813b47eb -size 51139 +oid sha256:15782147de5dc2fda9d77f75694bba22d9998db5c245969baa192e87543387cf +size 50991 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_5_en.png index 1e37e5322c..859bfb59c5 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21a0d4fabf74730d3aff1ec23502c18d84cb53899d8cacfefede48ae8fde19e1 -size 89266 +oid sha256:9476e888ecf6ac7d374d146a8aa5bfa3ed66b0c4b722d46052b56d177a543733 +size 89112 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_6_en.png index 2ddab5fe37..0366e59529 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7af7dedec8de4ac367fc870d2c235060b3a57d27b2bb879dc784a3cef3c2a370 -size 390628 +oid sha256:36aa7ce68da79c229612156d1870c904a87482b64bc9eb262d2c52c1e813d31d +size 390438 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_7_en.png index c36a7bc54e..0be9c85fe2 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.attachments.preview_AttachmentsView_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb50ba951a464a7bae750e779f25e2deeda0355a3220fdaf19f60c7c7ed73649 -size 395064 +oid sha256:724df787c6c033c40967bfc62de74e71613ef8221bfc18a9859fcc0b5fb9a8ca +size 394854 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en.png index be11872339..26cc9156db 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19066a9752af1dbd27a3403dbc0a85d3b7dfa6b794cfcc314934a91c3e680283 -size 54925 +oid sha256:0420404d363d85a0a1215ac8d11f474e148294d6b4818acb65ab6196536c61f9 +size 55243 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png index 00ddfcc0a1..23ec952c31 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ead97d45b6ff18a36c589af87a07a3f7e415a1308b7b5cd327de76631063f71 -size 63435 +oid sha256:9fced59a8634cae33f42a73cfa1eb2f89ffbec5317622eaf0b1f777ac7eb271b +size 63693 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en.png index 00f6ddbf2c..b00dbcfad9 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed176e71df15c6da072badc6db227580ab5b4a4ef41932754fd21c9816c6b16b -size 63857 +oid sha256:e31c7c892a67cf0f36ad2ba20cc87771d59e8165bdfb1bd3fb0adfc53dd79509 +size 64042 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en.png index 7fc98b879e..9e80004b76 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70e6b6c940f935d585e210ffa10fa2926f074e4d1ee255e8607345379d2a52f0 -size 55326 +oid sha256:2ba3d44f3ab519ae5e2b85a6b93f14c7c38e8ea8cc52baba03e9efef1bcb1145 +size 54197 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png index 794cff0c98..4b12c797b8 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b37969501cdec9c6cbd3604058c420fc95ca239743dcf8f6e88903d3c76c563b -size 67268 +oid sha256:38f24750122c90c71d78000c749a6fae6d440bd3c6b3031cae638c5826f627e9 +size 66323 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en.png index 51acf2f8d0..bc0653ed4b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.crypto.identity_MessagesViewWithIdentityChange_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f61cc2b5b7f836d898ef9fa850230ada79303d4caa0f56005a0cb78bc526c184 -size 66888 +oid sha256:136f087952cc1f7ef024dfcc84668107e76c2adf8984715ef3c42ebeea68686f +size 65837 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Day_0_en.png new file mode 100644 index 0000000000..ca19013d12 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53cd6b98e2f553049f5146e9c73598cd12e7b2199f414473b4258dd37714ce30 +size 9376 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Night_0_en.png new file mode 100644 index 0000000000..ebd69e6f9d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEventEnterprise_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f978eab0f072af32d574493c0cd89bf8b77749371a64b2dedc0a4f8f4cc29c42 +size 9069 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Day_0_en.png index 8384f46c27..72b3ae1364 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2ea87ef947697fc3ea21c8953149db1c729be5391a4fd65f63b7b04aaf0e8cf -size 10465 +oid sha256:2cd45bad53eed3d47521819d8f8ea750c2bcd7eeccc263a262d7f25093809207 +size 10658 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Night_0_en.png index 5f1e275830..ab4a2bc7a8 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_FocusedEvent_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ce07ba72b4542584273ee4004365fe50da4747e4aa06c46ea0d6b192647a1ac -size 10204 +oid sha256:b2c4de97ea960abc79d73ba7ed7eb41202581ab779ad3ce506b9467269bf7e35 +size 8477 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en.png index 1c611df6f1..ff1a4174a1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf32ecc91206e24bca38616066b94d6d451f69b1d274dff63e30b73f9b0b5fe2 -size 16822 +oid sha256:2e72c1cecdd62de867d300206d4d524f51d8445ed345364d999ec117bea2e0a3 +size 16926 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en.png index 74699799d5..c67a36ae00 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_TimelineItemGroupedEventsRowContentExpanded_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d791d1c3a79e409a43fc5fa3aa368ead2c8aa7167f86e50d477aca6341482f6 -size 16877 +oid sha256:4856a029136e5dcc86f21ac66a615d6fd991cbce182e25015ad355b8e0e94fef +size 15915 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_0_en.png index bf71b7fb25..26b930d189 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf3f23066d6466f799677dd139d92ff26aeccdc7ce20d1ea4a1fa2eddbc28ecc -size 50157 +oid sha256:baea5001524ac109a9b74ca933b28b596706263aef7a5702f0c014343ad98ce6 +size 50370 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_10_en.png index c00b560a88..64631daa91 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a78bdd930bc853c4adde525d48f8477e3731cb3e76fc6802ada6350f73e209ce -size 331247 +oid sha256:1f6b9808cd09f5be5c2468bbed0a51a49933b9dd6151b6326b1845e8e4a046c1 +size 331804 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_11_en.png index e73f8c4cce..639ecf5d05 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6eeeacf0a4282d7fd5bc8ef3b67680d72d254c51a8ebd009c9c197180a9a6f0b -size 85092 +oid sha256:5836fb3172f8628993031751a8cebc840167d157776cee7821ac22c84a0db558 +size 85427 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_12_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_12_en.png index 6a52101412..0c657aab3d 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c242b43c5674dfbe72ad5399ec2a1094fb5d9c8d2ff5d627e49c6f51010fbdf2 -size 51631 +oid sha256:a5fed03c9b5212a5b654ae872af03171923c8944ac9fb69ed233e608603439ed +size 51806 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_13_en.png index 276b7c713e..4cc8858d4a 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9aef1a43f5478f4a8e2715211695d0dffbfdd823d8642244c4411eef06794bee -size 63393 +oid sha256:4bb8a5c67177e2f246e07947d242d0395049409992a108f6cde27fa88ac5d2d9 +size 63465 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_14_en.png index 643f3ab3b6..52e77964a7 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:117ffd9be0ee1c2ce742c1725f935662ddbbf060bf02a3d121f3b331f577eb03 -size 48007 +oid sha256:ca73884d2ce866368e6f4a99de05730bac5994e93e8bfcb933d23784407b801a +size 48178 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_15_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_15_en.png index d5247e1d68..399523b0d4 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:986daeac63a5185195c9972fb6d6d64cccc1eec53855c755b88d8e4c364acceb -size 64484 +oid sha256:fcde38afea018df257c1ee6f6d17ea969b225ff2acd12f5ed9bcb0414134bcd1 +size 64571 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_16_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_16_en.png index c8788f93d5..1d6706e5ba 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b9bfd23b94519ee37e26e5a6c99e7ec2ac1513cae6cfa8465c71856d1e8afce -size 55197 +oid sha256:cbf93914e100be8c32f20c32067d0b3660f728a46ba8e43e54cbbb3173ead4f0 +size 55352 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_17_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_17_en.png index ba6aee9606..13fe72ec55 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17fa1c2967b460d47e33dbbbc1f10085941d2861a619c9c4e09d0ad62a6a0e5c -size 64217 +oid sha256:16937747975115844bcaf9fdb0d94ba04059389704066973664b9f3b0baa0587 +size 64449 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_1_en.png index fa42cdf361..5539212fd0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30ea27e644a6ad86506cebaef9ba6d3558b30945ed57e80ddcbf6cd22896d408 -size 71126 +oid sha256:e58cfe72872014d51678373b5500b41201728304c301e6ebd855b2241185e453 +size 71228 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_2_en.png index 1bd497adfd..98dcc8ce3e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8fc7a5830027eb95476df6e378269c1ff37d57c75aac50e3353647d4e84249a -size 492060 +oid sha256:dd648155ac39ce346b8ebd24657bafcaf3668020798b3d50e814e54addc28bdf +size 493522 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_3_en.png index 0a12d7dbb6..1cff108025 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:949ea4bca530c513ff4e67f4b3b67a69215931ab1fe9bc42b02ed347f02a9bf6 -size 487167 +oid sha256:cf409a30502ffe99c991fc5315b34a1f2cb9ef27ffaaa230512752bd80b32d2f +size 488703 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_4_en.png index b8116a6486..7c65560105 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8479ff3816b6d08e1b61f9326f525f55f40b6a542baedbfa5f5acbb5c766150e -size 70264 +oid sha256:3bd60ebe776788f2c31f6b3e4e9b2ba9e814a559b78554175648b31e04c19247 +size 70305 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_5_en.png index 8181ec17f1..19395fe493 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d9a77ed75ee8797ff6e76b19d8e873fdcb55b2c361094c875874403887803c1 -size 85027 +oid sha256:ea3d7407d2b6f544606c72d2e6dc2b93e3bac1b05a5676b7527dc1a8dff37f7d +size 85260 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_6_en.png index 312b715249..f6be876df9 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4767b56c7df7009caa31e905cfa473edfce505b9171214987a0c2be8f76f0558 -size 73338 +oid sha256:8877cec4c29fab0b4dff35ab963907c6ba05e222581ecd6b81375c6f13ca55b5 +size 73416 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_7_en.png index 60aeb3f330..764e6823e0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bccefb7d0464ec26c54333804962362923da1cffb834a31b35ccf0460a6420ef -size 103533 +oid sha256:54f9c6207d148648bb231e3956faeacb2f6a29af9532a4a8fe74e4db91875a52 +size 103802 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_8_en.png index 26a4061020..634e179c3c 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:039d1a97453e7c74cc8e2c04ecad719b3dffa1cc023b611e8f6e909fc9d51090 -size 53106 +oid sha256:18c3c814f0decaac5608be87344c0fe03509ade2072fca88d774e3858424ff38 +size 53443 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_9_en.png index 746b23606a..99b46c8576 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d49b09108150b2c53d6a54c8c2e8f417d6454099ad37ce0c95a23685825533fe -size 374231 +oid sha256:1d44e1adc1822f18540039d86d3f70feb2e28313f6ec0a200c039210a59a042b +size 374608 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_0_en.png index ac89f3d57b..ca75b7ffc0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec0671a85557e44cd629bc2c426601ac3cb25a0cb095ff2034d73ad0878b1344 -size 49225 +oid sha256:ff353610a0d865141fe4446850b9808aedc4fc5a77cd969c36ece16d56db043e +size 48793 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_10_en.png index 74e21a4625..db1284d64d 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b62bf46257ee066163663c8c86a717d320146f50be88a3957e747fa512cb025e -size 148673 +oid sha256:d324b6bba80d90b3d0130ce9991c24db94293db567c59eb60c3b21fad2a836c9 +size 147491 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_11_en.png index c0fd6ef9db..bab14aaa95 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09b245abbbc0164df2f2d6e88e5e02c66267ba50dfa20134241cb4df6d7c770e -size 86341 +oid sha256:59b946ba879346a5aafe0e676153a18210c21795e522777402fe3e0f84492010 +size 83873 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_12_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_12_en.png index 849cc3a077..c3912c8d99 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:349b482857cbe0a6b2d7787e177205d1d5d3f564b2b4a9f2f2e81c57b90c0e74 -size 50875 +oid sha256:4578006b80dc375ec02a92c0492fedda5abec8d6a7c52177abe93845173f412e +size 50440 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_13_en.png index 2bb32b2a83..c1a7cd8a0f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8221d98791f152488a3f53dc654157b006d465a7c9770c1f72884d0d82df723 -size 61878 +oid sha256:66d86dea77a4e465d10a00a376cbc29bf19149c201668e62ba5024fecf141f85 +size 61258 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_14_en.png index 3d0bea0389..695d268064 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b754901c4b62950ae48537523aeabf734d49425eb13211075c424c4a54f28a5 -size 47162 +oid sha256:369b0e7b00cb45e6b070fe1186b4cd9f9812d0abad644044ffa30577daf9ad44 +size 46739 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_15_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_15_en.png index 3f5a9b1922..febd5cd9f1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e57025ec733a1513ec594e217519546e363b07df1cab7547d89aecd19f8c55f9 -size 62874 +oid sha256:6475ef61b62b2eba410a91ae2b6feba1cafae929a74dc3708292c571de9d70ce +size 62298 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_16_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_16_en.png index eb7205c572..fc36fb2d4e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:871ca03e59cecb80a0f587ae1b8de0e015e094d032bc0e09dd3bae135dde1b7a -size 53936 +oid sha256:a1187dc1be99b01d5b85a880ccccfc964975541522c1da1f743380e5bcf696f5 +size 53511 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_17_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_17_en.png index 30d3526c3b..09e856b4cc 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d380a9ad7b10dadc52f7b485f999ecd0b2b121494815eef6cb7dc6090273e76 -size 64309 +oid sha256:3dad5e6ca53369039ef201ee81e12e38a9b424b761ef6186abd524115a967bc6 +size 63747 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_1_en.png index b8373406d2..88f47c09a0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2039e099ff7fa3cc0fff14efaeac2049d5bf44196d95f652852030278d84d788 -size 69310 +oid sha256:b49442fb577f028b77660c0da14513c83f0d9b9e6099161f8a9dec130cc0f1bb +size 68768 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_2_en.png index a8aa36e1b8..accba88a8e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78ad98cc2dbd846a72b6f481677d0964689ac7f165be662f8b218d6546921dc6 -size 489004 +oid sha256:1536c17c73741153a9451f1e2561391836a82c03074e27e0101c6a356f6e2d54 +size 486001 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_3_en.png index 7d0e54cd42..0a3724ca54 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3aa03a48407e9c8c5214fcc8392e74c2323a73fba8418d7a088575c6756612ad -size 484132 +oid sha256:c226f25adae0f2f00cd5fa7e0cdc0d19ed6dcd4bfdfa5a69aa59f30e08d93b6c +size 481234 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_4_en.png index 3b61862e82..e8c527f3c6 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41616d976daeb5528d013e20d6aff81f5ad8d505f9561fa02ac6395b6c03fb0d -size 68754 +oid sha256:186dc944f9636338b0659a44ef4808721dccaa8c81ec8edca218648a6a1abba4 +size 68100 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_5_en.png index 470080efac..22bf02c8a1 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a33a913e668ca5e9cbf32cfd5ca6ce3b250e4de468763ca8cc52852f147574f -size 82873 +oid sha256:d7f3e1da54bb359ea68ea710b76c1a88f75fd8cfa563e691be22b8a99b30acba +size 82374 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_6_en.png index 4d813dbb31..45dd41a9da 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0959fb663ba273bb318671502767da57a1005a3123cb0383a4ff8879d6af5d3 -size 72120 +oid sha256:52369d421be039973c3f6bf57877475209c6f28b81765527a5b9fbdf9dc07cdb +size 71512 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_7_en.png index 663f92bf7e..982123952f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:410399234cd0a90f1371fbee9b7041607bef515643450945462b2f4e7f899a83 -size 101174 +oid sha256:8af8e7bf6451974bfa903b31f26631d13aa7df35484bc4abf55d2fd9e8e8d1bc +size 100674 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_8_en.png index 9682b0ee92..698c9976f4 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1255723686d5fde13b2c93f8d2a61ba8a42d92d41c50a5ff39b3fc1fd4edbb9 -size 52725 +oid sha256:15c6568b6c7a34fe1c7abf6fcd22946a5575d85171f7d726c1ee71d8e2d6f281 +size 52113 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_9_en.png index e7f2974ae0..71a220c992 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline_TimelineView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08770904e7962ceeb239a3f01965879be825fb03e91b1f64d04c05da82f09005 -size 153199 +oid sha256:3557321130ce8c8d7e780686751a85aeae782a160c97f2fc9c9738d97d119b80 +size 152271 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png index 33bbf7d3d5..727209dea2 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:119a16be61f48adf4be664e2ac086006edca82c12b5955827a29b87088085e0e -size 57422 +oid sha256:280f410b6fc24f81eb4a1ba25af7ac534b6cca01241bdebdd12ad887a2bb58bd +size 57628 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_10_en.png index 80f277717b..ad96af8a7b 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a099b2a5bf006c24489835aae46724637c7d2c3b08d1f47904bc0e0ed93b187b -size 57445 +oid sha256:cd640f32ee4c7e7ae81e8f5f150d14272f2ff2adc8f7f0e74a0f7bb5293dc9c9 +size 57656 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_11_en.png index 83ec1b08f4..977c2eaf2e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d03bfc50eb1d3624f1dcd14b9d1cb515fde906f1f3688501239330c91fe2aac -size 60516 +oid sha256:6076da963a6bd51349723658661b6fa0da3124ee1aab34b7f140341b6f1c4e38 +size 60710 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_12_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_12_en.png index ef98edf77b..e49200527f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ade5d45c72d66bc1ede4ddd84976981d7cfc59b90bd17c97fcfdf6ed44fdde9 -size 59753 +oid sha256:0d9b6672ce36d35dff5c0ac1e59597ce54757ccb070f2a896869fa791d866136 +size 59952 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_13_en.png index 59cded1222..96d1c4392c 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66ad9872af4087c25611715b1d369893daa948aa2e1e4b8bc6fbff6067c3295e -size 59685 +oid sha256:fbf1d21f6d76005b033425442a058c02f601a2a0b8d11213a9c185bbd59d5ce9 +size 59883 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png index d0882a2b9b..0a38f5d703 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9894c3227570abf19ab6ce261a2ddaebea2477edc6fb4a4b23d12938e78c376 -size 62982 +oid sha256:2ceca7f0e0e894991270ef35e7526b117ceae74be6798b7b478e5508168ed510 +size 63147 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_1_en.png index 852403d760..596c976041 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0555ba9f6b8f9110ab81ef0e94264ac6b2c43fbe15c9e196ece63f25f6021d47 -size 56581 +oid sha256:d77a375dd43cf770949c1e4894894e4a2d9a4242f9b51eaacfe614904f65a195 +size 56800 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png index cb85490a19..be54ce6485 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:388823a879ca9d7d7794bdb8fd03da91e4c47c03073e38e18039467832c99c5a -size 59831 +oid sha256:8577205bd9bce0d751f7cf86fa694bf74a0215ffa81c632f8e8e55178d195816 +size 60001 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_4_en.png index 9c67fa0694..b0e1694aa0 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:516a010d56f5cfd205b46de49b49d730ad2012fe574e08eb1e6746adf07ca373 -size 55224 +oid sha256:ddf70411abf990585c19da1d389cb16f8dc0b56e3dcb66fdc66a17370a570b6d +size 56214 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png index 5b6906e54a..35016e8190 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4493799d889522a540435c10f0bf3642a438c38d6b219491afff4a72a169ce1c -size 58416 +oid sha256:8d50f2de558a9fc01af21ee132c415c31606e9ca44ad428ed617c35557a07132 +size 58614 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png index ff037f124d..cace9cf614 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61f05b07526302ad051a8df2234a15438f8b2b2889767acb7697f3caecb68aa0 -size 54189 +oid sha256:62be8977acddff717054374ca18943880f91476e1cd31c7e717d7055425e09df +size 54505 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png index e70c83ec54..35d7977228 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c053c3df134ed9ee672bba25db0e730aad83a47454ba9e74981e8178e6cfb59e -size 58361 +oid sha256:f5333cf51f88d67d95c2956824497e761aa7045031b597c32d21d62548e63409 +size 59276 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_8_en.png index 13e75e4e89..e7cd501d12 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d5db5c87b3b1a8f22a41a64ea39262e2469d805cf7b7fcc6d73622d1f8b052a -size 58999 +oid sha256:08eb3ca4b9ddd1c956c4217b31689199c605fd361d84476e36ce1d551ce6b2b4 +size 59196 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png index fb7b1a6405..0f0e52ef59 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91526175f646a959c58ea84a0479bb7ae7bf821684ae329201d8c1d5ec772e58 -size 48887 +oid sha256:b90e55d3d75db005b30236f9d0afc0492a0f6d637f411cb386222a2759f73242 +size 49892 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png index 57388f1df1..5af66b847e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10ae9ff40ba2df95b741d516f31994bb1160df5c2b1407daa78aaa882e0db5c5 -size 57036 +oid sha256:8efafb26e149e6079bb7b772caeb1b8cb5729490cf220bf3720469539350d775 +size 55759 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_10_en.png index ca4e901e9f..308a458cda 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cafaaeba38646ef92103d3ddfd7c3c26ffed1e2bf1586569d2194a3aabf4c183 -size 57088 +oid sha256:dc7f55508d4b053d6ff8229bb442403a72da7dd5430fd58b33b0c35b4b08e319 +size 55806 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_11_en.png index 480716e90c..bc2fcc4aaf 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cec8142f1f293d3e684ff7eb2002d05dca6ea959cb95dce327e8a4f5a78cf462 -size 59797 +oid sha256:3f5cbe33e605517300be39990d316116af488e528ac638745ef6c3cdf7119194 +size 58531 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_12_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_12_en.png index 7732b265fb..34ac467b9f 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7567339acb87356f182961883bfde348cbfdf406eedefc2ecb54fba9cd26e2f2 -size 59291 +oid sha256:49a8590b84aed8153da35c6e9af7bccd3995060d9f33932780fa18b51439629d +size 58021 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_13_en.png index 9ee85846e4..90cefabd52 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:668c3e76f40df6ee3d64d595b840d81d62ec3f52474cd2fc261109aedbf46a69 -size 59291 +oid sha256:802eeffd5f121223aaec8c93c4eacf43e79441007fe4acb44c7dcb6efb7a2e03 +size 58023 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png index 81f5cff0d3..c039ab8b42 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a065f9ba8b1429468d4f4d704d124338ded9661fb1eaa66ca4bcb00f02fa5516 -size 65287 +oid sha256:738f7265ebb40363edacfcbf5bc540d87620d9b5c863387cffaec772661a0d8a +size 64282 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_1_en.png index e149b92acd..e0fabe9a5e 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6c0840f6795a3b3e612c0848e2b54cbc977408fb5432074e7b5771d1bcf030e -size 55906 +oid sha256:29e662d582c8076b439d7f508f0694bca2a8563c30436d51e487c5285511cde2 +size 54638 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png index fd57712fe5..41f5628fa9 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88d3b3855bd73c340619cc2ca14a19cacca304a3bd442a4c681f5dbfe248aa34 -size 58950 +oid sha256:79d46f9fe16f91e58a1660d8f970a499e34c81edc84ce1d2d4e904969a7e8538 +size 58078 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_4_en.png index 29014feb9f..a4cf64c03c 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4182c26a99a119fbf450bee488d92be31e291f259fb6d21f84f05d77324a1840 -size 51270 +oid sha256:db214cb159a8c614bb7e883af30e644b750ae70abc755eeccb495266167d08a0 +size 50888 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png index e58339319e..1d86858b16 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b44213fdccb6b194466d3daa7474b77378f96ab9b35559c0ba392dde49ecf175 -size 58055 +oid sha256:887e5a8e76f89ee38b1a48c0e4e165045954108ac5e5a9e776f25fe6e4d2d59b +size 56784 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png index bbccfbac19..5379692c75 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:629506ad32c56d94906a71a4d779290f1328030d79fd05db3754e4113531587e -size 53656 +oid sha256:90662f1f386b4d9af7b9f5920d43af38cb44970741aa935a4e1611ca4a4ec4bb +size 52507 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png index 2f0466a60f..4319ae5a39 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30bd082aee7c78292c602c5320ade7738c0909038717cd5f8004b08243a2b3e -size 54172 +oid sha256:ba888edb2f1ef856074a17e1afed3d908a24d4aab7c763057b35edd2e65d0b63 +size 53876 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_8_en.png index 7ace45e8e1..f0f96d5930 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c435641bf1e5f862499fc34247227200a28d47907e273c5f18331631d36fbd60 -size 58520 +oid sha256:6b69d0089def0886b238cbe3b37585d3aa6192b8405c6c80bd1d6ac364172d10 +size 57251 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png index 1f1a7f3ba8..11de94caf6 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl_MessagesView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f87ac09baa02003c48bfd4b8c946e650afbd6a42347a1a85a205bce40cf094a -size 44783 +oid sha256:d78c04a6cf24dab10d20e06f50957e646e596d3208a1c83d6ae27dd8e9c58d74 +size 44375 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png index 40b2f015f3..7c27035fe3 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43dd94d40380a5a667aee02d3ee002c137a68a7d10ba9d3ffe09015b505a6d44 -size 42594 +oid sha256:cb68bc3937183f353a87f193a34847676977cb2a366cc03fcede0e059e6f8f4f +size 42658 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png index 4c47f3d623..dc9e553655 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11af1897c0ebc05108efb6d79156af7a549788141afabe60e6b3a721e73462b8 -size 41450 +oid sha256:1d702533f7838e0d4310589174ff526332614a3f14192077b8c22b7c3ca80b13 +size 41514 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png index 5d0e028c03..dda165d3be 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44575c8ffe72df361eab4e6e7775b150cf901b309e7be59d0ceeddc27f9800b1 -size 40360 +oid sha256:966c32f35635614cc36912ddae4c4cc0ab12fe2bb48cedb58f198db668b778c2 +size 40388 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png index 6d90061fd0..bb7456eacc 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:022987a206a0277729d65129a6efad6dfb0cdc8f06dc6e811f90307cba9f78be -size 43596 +oid sha256:75c0b09e37e92cd5892184e657e058cf9616442c754548d0929330f80c55b4d9 +size 43659 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png index a2551c3c09..341d224726 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbf72b0000c25d5a8bc46e187b410b5e1d4dcdf49672b7e238221fd22af014ce -size 41705 +oid sha256:07109a07478479eae73c0a5ba0bac10ad2c15f0fda94af982a2147594a15de15 +size 41767 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png index 6cbc436046..02d3026a57 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32b57de3b1128a3a17ddc1cff7c96d708f4ac4ef9efa6a6d3978b9cfda4b6a0b -size 42301 +oid sha256:2b4cb0e83e6e48d650350be4338a99eb9f82fede2829a8dc5d71d8f8cc2ecd66 +size 42366 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png index d21d1e40f0..138d29c5be 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f40ee24252a856c4680dc0b62865e71108d54b326c81b651dcf9031c8d7ae95 -size 42835 +oid sha256:9ae7d069e06840e6bec12843536544c6adf9cd1859abde76266cc3579ecddfc0 +size 42899 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png index 1f0daa85dc..167170220a 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e610606229c8843fecfc699d798e530277ca7fbfb870198809a95417053fd594 -size 42018 +oid sha256:c82b2aa214b281eec00ef4f95b5183d2e89e9746387580e3aad877eed9779258 +size 42082 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png index d3792f6a0a..eff61e8acc 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3cc4924fbbb2fea5937bf481b1322da14e1d2c8ea2cf4351fd6d0d222357738 -size 41304 +oid sha256:d81bdb773765b5d5f42dd137e4d9dea506f8d03ad4770776bd19d99a6d6fef4d +size 41362 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png index 4e7871b133..fbfb4d1992 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_18_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60571dc08867db9ad2f6528e95cc65df0eb57b9840bf8e96e6e1fbd802ad3a26 -size 38778 +oid sha256:5ba55e0d3271f81d8bcbd6f0a956f50c8e4ed082b23f565357c0c732f2bd7395 +size 38805 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png index fcb6f77177..f15bd024a4 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_19_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69d9aaf46305802861df8be0341abd73068376893bfd7aef43d7b8f3251350dd -size 38735 +oid sha256:659e2f942ff1ba3aee9e63ec329aac2386e755c04324c3865dae892f67f5ade5 +size 38762 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png index 42c26d9648..21678bf25e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adaa2dedb41e4717fab78875fa5e11572ff768cebe3a8ca94a1871acc634d319 -size 37705 +oid sha256:691f6e4b60e5e32fe8c0d3e3582c5debf0913e68e04ac93324d51ef8b7a1015c +size 37774 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png index 7a25cb4dce..76d6cd69af 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cbbcbeb51688c957181c186319c8ae3843368ea5e684f407bec67ec16f90371 -size 36219 +oid sha256:4732e614b9705548af0eab11137f79e8d240d79ef34a1d4df1bc01767888f118 +size 36274 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png index a80e7db43c..658130edf5 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f7ff91e97c256c96e261048d2f5c1fe50e7c1b6b752ec830ad63fe51cac44f5 -size 41939 +oid sha256:52e9b8634d6dc145b6f0184411a8436d04bce84057a57031be3d3d00350809a5 +size 42023 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png index 6941fb2722..041f9dae06 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed84b2185eeecdcaf5d846b386f8d3b37f6ae6892d099950d8ec2c988aaf7ae8 -size 41111 +oid sha256:3afcde08fe3bc53290ce21419198e6313257a630e495d04c2c4fe5b2eb6184f5 +size 41164 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png index 1130fa23f4..726667ed5b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c823d58a58b9adbd3894c4d53754439da3533d72639f7181764ac1bad449bf5 -size 38417 +oid sha256:f1a69af9c184578a355345037ec34016c4b4ab26a2719bfaffafa1027365a678 +size 38453 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png index adf133ac79..18bd760421 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3444349d7e07f7da2db5cd71b7334447a5d218445d626fdf8793ef224d07b731 -size 41821 +oid sha256:9e9ebe7fe8e19809489798a996f888642159200486b129cd34aa333685e0ef56 +size 41854 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png index 0746cb3861..a23484c9f7 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf0c4686f5c3b8dc33a65eda243bab68a01fce9e5bb747957a421028f67c2f51 -size 42783 +oid sha256:ade57773b331cd394fd3198e377234aecd7ae740dea6df48bdb8e225d2f80897 +size 42860 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png index 440eb609ec..748f26ac8e 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1c43dcb8fa94250922a5c55da1480295c843881f5f325583061c3a4efcc1c8d -size 41721 +oid sha256:60fdb979a956c98edc81d1b17465d1967b24af5bfd11eb0ab3b9480272382180 +size 41785 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png index 33d3574fd3..56e0eb2668 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetailsDark_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a19942e696011410011085fdb05573d5a9924c26a7cd5eb14d8ef47357520228 -size 41771 +oid sha256:1f7dbdee908cf267b3848417113eeb5c07aea424e86dde758c4fc5aa6255a252 +size 41833 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png index 8008eab180..24ec736f13 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5054000865a6eeed597c898c75cfdbf5dc1d0c8b49d301fac9dcd636e17f16b2 -size 43450 +oid sha256:b7b8b61cdbe5ec0657f4f1852d8e371a5ab4db49e30574ef701165cd52a654fa +size 43511 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png index dd60c1ceac..d6fc9cde69 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2989b72b62c6454e2770c24f488be188db70743fc98ec382f96f67a506fda909 -size 42207 +oid sha256:8d0a10d1cffe8af7c41b7261b013b6a2823cc7f45ce96678b5d45979ba82a935 +size 42257 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png index a6b369d6d3..3b61224bc4 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:941447581bdae57977bc6021e586618765756b88fdfc0d5ce5f52aaefa7f6e71 -size 41209 +oid sha256:c03907d8a26f59ceb541e0c219cf660b3e8b432996a2cf6f3128f1811dbc58e7 +size 41224 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png index 63bf4ceab4..f9b4a897d4 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_12_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42795ec59657adcab57a18c989be8a84434561448c5b242e655ea2568c3f536a -size 44046 +oid sha256:18fcec84437312e87cdce47572c0068dd54f5f187f39701c5a423ab3bc8db68b +size 44104 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png index a348a4ffb7..b7d329feea 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:713573ab48dc25c11ae0e5bfbe1e9909af6a1ba1115ffcfc37394171669c73f3 -size 42535 +oid sha256:b3b18caa0ebbbb7014400320ec19b5f2bbb86ae930c48c9a7c7a5a0a15324abb +size 42600 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png index 6a5be52a90..ec56f8f188 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b67e13e498cc4b0709d74faa02f78692e717f3274c2f28ba77450819c2ddebb1 -size 43140 +oid sha256:304074b1f15761b9a0fc2529d61ca56505e5c59d9a74ea3cea6db6dd5416783f +size 43205 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png index 181ad2bfa3..70b89260c6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_15_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2925c650f266a5b39ec77489e2658a70761e8332cc759e418cf733b86572914 -size 43755 +oid sha256:2dad2ff77ed440ab76deb90b2aa1287767f7078b4f0fd9b721d78661b891786e +size 43813 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png index 184d471cc7..e4b40a0fa6 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_16_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1e43739e24423815b90dc6e5249400fd1049985811763422e9fc2aa9a74e610 -size 42875 +oid sha256:49103b202ed374a02c6de0309e80603901da4181a6118d6a41f93938c3c2394a +size 42940 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png index c9734faef5..3d097545c3 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_17_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63c75fdca8960f015caaa11bbb970c6e7621e87afbe7761d23db875664c55cd1 -size 42360 +oid sha256:91d724c5b24b2c82a0b731fbf20a218437996ac237b5e7c0ffebf7174fd32159 +size 42418 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png index e60ef55c42..1d721d5c87 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_18_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cabfc7c5bf6f9b612e933cad211b8261b236cd981488cfa081e0226940626339 -size 39499 +oid sha256:a67e601d851d95f73fe7f6165b91703e87f6c1f71fc6c1d9c614d46ee35623ee +size 39515 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png index 2e3298b2ff..552e6b96c8 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_19_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf96db08ac0382185c34863b38603fe55eb3aab691fa3c42b6d73e4167ce8f82 -size 39383 +oid sha256:533db6c347770157ef484b53218885a04f12f732775a94da8b915d700d356256 +size 39399 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png index 43582278ef..40adf56006 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49f36e08fb97b0530ef46c557d04d49fe8e8df9afdabcedec823fa6727bf15a4 -size 38670 +oid sha256:e422a041cb31c3b03e6f595bc18a883367145e2823503edb056eca87bd8b23c8 +size 38711 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png index d703fd166b..2938518daa 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d1f4f05037d4ad192067d189dc9fddc860d55dceed95a98ae70b57ef3b74a48 -size 37097 +oid sha256:8771269adcd3bb95deca3026487c0c04f33cb1c86b46314b47942f75a33f8640 +size 37148 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png index 483f10f66f..a2b1e3155c 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b63477c6dcd324babb989a5bfdccdec99dde345a134e267c13127869748accc -size 42670 +oid sha256:c9c33dfb51beafd72bc8b5e2040fef68cec4ea4f6929de72395641f87a148a17 +size 42753 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png index d661dc86fd..ed13bcaa80 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:596e2613127ccb7ae3f2362727082a473ba617e8ad05a61fece2ada05b0b8c14 -size 42006 +oid sha256:aba2ac483dbf67a2cc0c1269e2b1137e67aad1f6fbaad9dc211cc7f87396c036 +size 42055 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png index 1bdd63796d..a51874b64b 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d254f940a7ef821c2a3a731e60fd23bccb61827bd00859d97139b9f93a5c8c3b -size 39075 +oid sha256:e99e06f6281be006fb12e0a56e7523c8144256562464474cb2aa918f6576d636 +size 39091 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png index ef1dcb04b0..47301b8b4f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4277e9d618880a9d3be5d672ba7b7081af99f36f34f4678bb160b98cac9fefcf -size 42630 +oid sha256:89b759add6d46fed97f7acae8f8366bb247632090b9520e50b6dde9f8fd64921 +size 42681 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png index bd8f4f8830..8d4fde9903 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aceffc8c16afc95f26a0aabb861aaba630ea0a9365ca1da3ad7a483ab6451282 -size 43740 +oid sha256:ae05c464d02eeace4a7dde2f5d38c8063fbe4972da5085f34c5cdb9177f60c43 +size 43798 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png index c26265b201..1c72bca490 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:011c18ce9dd7bc99bc9f09ce4f296aafc619d83ddc4f94f1465b49925591705a -size 42625 +oid sha256:b5852f7498674247848915acbbeed936d1ed221524b57577a5949c3208541efd +size 42692 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png index 0b06aa53b8..06d56ace86 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetails.impl_RoomDetails_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3971573f164e80b6e59bca91e32fdb1b5336086561e69148c22b1e7bb396935 -size 42601 +oid sha256:6f462001cc5f5dced0bd06ba9c23f1f0120ef26c85795b3e878138162aea2008 +size 42670 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png index 0912c0fa57..9d2dfee0e8 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4fdb9a9167e7088c7568b067ba2e02c5d5d953c5868f864c0c83c1bed485138 -size 15184 +oid sha256:ab8f38a4b9b0be906a39296f253286aeb03b6976d9918c0bc5867d5cb2b64f7d +size 15253 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png index ed871cda83..dcec11f43b 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileHeaderSection_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28bb644a494d60947b4d66b859ce0cc678f31f93fee4f88aa28cb8e8d17dafd1 -size 15231 +oid sha256:586a299c444ceefb9d84336d8520fa083cbfb23c6c535425455deb780d6e454f +size 15277 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png index a78a122bd4..9145f70274 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:204a2f11595cbd3fe467d6ced7d1999139d87f88bafe0fe80becba7deafcab3c -size 24127 +oid sha256:b89fd42f16b90496e182f78e25254ebcd963b1eff706d3e821b869277fd5a51c +size 24189 diff --git a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png index c4fe92d160..c19cd50098 100644 --- a/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.userprofile.shared_UserProfileView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f0dbe3e9ded805f3cd4356abb5ce4c892a57cfdeff35a450607c493294f9080 -size 23261 +oid sha256:064b9d499901d7780672159784a84c8674e4cac8562c26e3b883bf504fb57102 +size 23295 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en.png index 66519c4bf9..616e4d902c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19afe8458f9146aa4256e3ede12fc673e8605782db5522760ede31f1f81ddd9f -size 6969 +oid sha256:b75d304c696b92209bfe9c3564165833dd74b13ad78a33ab5d875aee94b1ed0f +size 7044 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en.png index 876f53004f..faac7f9106 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomInfo_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38a0beda65338d6486ab5e6c8afeea1b8871bce396d900a184769d9a2da495cd -size 7026 +oid sha256:85aabf48fd622093cf07a3810b8267ddc373a6f002a225d1f7a0e785566ece51 +size 7054 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en.png index af747bd8ca..1943045bc3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60d8a652022f45141e8c1f0e0c93f6b748c863300947af218475010daba1c4ff -size 6413 +oid sha256:486b012337ac8d4249391ab4d400b381379f7ebfc8524b090c0e3b3f275ee0e8 +size 6181 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en.png index fd2c53c422..8b673f0db1 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNegative_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e35828ef24ee2aa6aea5446026dd933ff130c2a2fa03d20dea30306f9a22a688 -size 6474 +oid sha256:0853c602b878783777e77bd70017aff17b6f94df65926bb459cd3b72ae0437fa +size 6299 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en.png index 663b853291..8103d83d50 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d00a43e53ca9720e51aa6571249669e1fd27f84ae8b8d0d8ba5b08a894952698 -size 6476 +oid sha256:45b8c746f9e044cf8ae3a25059338086b46c3cd64f32f426ddf436ee950d3f3b +size 6511 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en.png index 36393d3de0..0d146efd53 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomNeutral_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:285b12c0c5695dbb6477564d60afa099300e35e32f29abbb3fa33c03e7c9e60a -size 6431 +oid sha256:f568506c2e277474a8b1f36bd88aff10ad9dca036c4cce7b8f928d81155dfaaf +size 6526 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Day_0_en.png index fa5bc467ae..768278c042 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6df8ee3c6c8303c0b4626af59578ad9c3e432162c8adee963b15deffd2d8223e -size 6035 +oid sha256:a022f780c01ca2c2f7ce2b9990c7347c336c9f5cd40bfe1e8afb597c571f6948 +size 6081 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Night_0_en.png index 331f7b3066..6e7f0f12f4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.atomic.atoms_MatrixBadgeAtomPositive_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2e9aca91645e401a475e5eddc64f958cd24964cb2d87dd820c299646d5457c4 -size 5847 +oid sha256:a4c2a60758bb05c4c152adc7a88027bc636aef0dfbd1731b7643b1aa81cf2d8b +size 5885 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Day_0_en.png index c8ec08b001..2fab3df255 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fd8d40302816ede944263e87ee105ce3bb33bcf1f3861dc59bb0ff4f31c1d1b -size 72118 +oid sha256:9ac54ade5af35baacadee2de06e8acc9b0a3504d5c36dd7b46a82ebebec55262 +size 58302 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Night_0_en.png index d6019ca1c8..f9f8e3c759 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components.button_SuperButton_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fea1bfdd8845b09539436449ee9920dab20228eac688bf1e8f7af0fd01ad004e -size 73745 +oid sha256:39635d041d1254c5ebbd2b4af0977c10af44bf02593ea71dcde78a7964c36940 +size 57019 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_0_en.png deleted file mode 100644 index 9156a34b58..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80bf6191173bab26d196e66d022255c7cf8c031061d44522165199ce5c3abbd0 -size 50190 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_1_en.png deleted file mode 100644 index 6ef1d23577..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_1_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:684650531ea641f8c3dc0739b202ec4d7f9f717f1c23bde44f63f5ecd47e0b53 -size 46931 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_2_en.png deleted file mode 100644 index 13960e52e6..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_2_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ab203c47f8660819913927831c6e114eeb100b1160fde5cc6a0fa81bb4d4148 -size 44419 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_3_en.png deleted file mode 100644 index 6f2246db2d..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_3_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c71c953c89ff64e19cc336a50c57a946d4a0ef7a4a60eb46621fede8bcca727b -size 43784 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_4_en.png deleted file mode 100644 index 0a46fdb082..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_4_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6cdd667ba35aaab7cbbdc4a5fc0c17b48f88417bb104ad028bdcd89bdb19f18 -size 45296 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_5_en.png deleted file mode 100644 index dc42839479..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_5_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cfa36ce4014b840be707e2538c83e4aac23c46f83aa6a17aff82be704e854c9 -size 47278 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_6_en.png deleted file mode 100644 index 9156a34b58..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_6_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80bf6191173bab26d196e66d022255c7cf8c031061d44522165199ce5c3abbd0 -size 50190 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_7_en.png deleted file mode 100644 index 6ef1d23577..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Day_7_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:684650531ea641f8c3dc0739b202ec4d7f9f717f1c23bde44f63f5ecd47e0b53 -size 46931 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_0_en.png deleted file mode 100644 index 37db78fa24..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d7d294df16cb6799de0ca458d978053fd4f3153248eb76fb30b85609fdcfc515 -size 50440 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_1_en.png deleted file mode 100644 index 3cad434683..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_1_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:026bcdf832067c64c48616cd7ae21e21a5d75bf6311c50700b65a15fb6b541d1 -size 56483 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_2_en.png deleted file mode 100644 index 2e08e18b6c..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_2_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f9a535c7136ffec44a9c9bbfeb9c0b8c7f70d5202a211ad74ea65a7e9867d17 -size 60299 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_3_en.png deleted file mode 100644 index afa6555bd6..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_3_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acb92c81859fc9eb995a090915dd7fee41825e773dfd17e44302659a9158eb2f -size 61954 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_4_en.png deleted file mode 100644 index 4751eb13d9..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_4_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9290fdf854e6ea6201564ac40e9563800a8738c5e70d8d6a460466aaee5ffc6 -size 59825 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_5_en.png deleted file mode 100644 index 55fc946d67..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_5_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:873e4837f4791cf153651104ee8686bdc3127f357bba74f1c48e820b6c816dfc -size 55643 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_6_en.png deleted file mode 100644 index 37db78fa24..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_6_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d7d294df16cb6799de0ca458d978053fd4f3153248eb76fb30b85609fdcfc515 -size 50440 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_7_en.png deleted file mode 100644 index 3cad434683..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BloomInitials_Night_7_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:026bcdf832067c64c48616cd7ae21e21a5d75bf6311c50700b65a15fb6b541d1 -size 56483 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Day_0_en.png deleted file mode 100644 index cc57e03bb9..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Day_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9d91be86dc5a346ccc9a9dcefbfd04fd229c5ae8367c8d94e6b99c7e4c48a34d -size 47007 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Night_0_en.png deleted file mode 100644 index 3c5397e73e..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_Bloom_Night_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d409e87405152caf5d2f277a513aa3535d5aa22d5308fe21ee3749ecc77579b6 -size 50933 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Day_0_en.png new file mode 100644 index 0000000000..1b6fb4bab8 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96a867cb12498cbdc97957bee07855dfaa13602baddaf933aff2b666ef4c7650 +size 3642 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Night_0_en.png new file mode 100644 index 0000000000..d6fd8eeb70 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientDisabled_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bb36ccd718f3fec5b04f1bc812dc7718b5ea7fa4619c8b031466297a8d016fd +size 3659 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png new file mode 100644 index 0000000000..e7be559588 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9428e3d034f8041bd3e35ae1de7d8155c16ebf80ba1144d214844e6a4332c8b +size 8834 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png new file mode 100644 index 0000000000..1e328199c5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e62e6a3857d1f9cd87600e1858b83dda9f6eedd8e3d7aeae6e0be61813d56d3 +size 8432 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png new file mode 100644 index 0000000000..4023a13e55 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7a47d7bbdbfccaf1cf60b7e42d8b3bd1495fbcf91a3acf9786e8d6fb087758d +size 9667 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png new file mode 100644 index 0000000000..9bc2e6b969 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:151a797c3bea19a74fb118d4e4aa3ee9424a6a8943533dfba62dbbd7b9505669 +size 7786 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png index cc6f5a43d0..9b2b57419c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72289fdd1b1d31fa44ef90220be7196243e848edadf23544dc72aa70d212798f -size 66415 +oid sha256:447a51a65a22b90ddbc568cf031e0d83282cb0062a42aba274c592faf9148e70 +size 56876 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png index 73f665c052..7bc0ae6966 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eaf36257945e77a17ce3412e5d52a45eff114fb0b53e8158186ba2192aef5f71 -size 66325 +oid sha256:74f903d6fbe6a635dede1492ffc8a571b71a9645adfa59a648553c6d1716a1c0 +size 56228 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Day_0_en.png index 1a330b0484..bbda0ad269 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:995c805c496e4acfd98f28971b17fdc13374a5beb9669bff745311cd739b054c -size 5169 +oid sha256:23cc4e9ae578463a4a5e6b27a0c4b0c86404e57c0914bea1f3c00438a4df3062 +size 5174 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Night_0_en.png index 3ca8dd84f4..fbed58a499 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_FormattingOption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f11d84c6abb51261bc8d2763f52901605ed72cb336b9d42a265e11eaa85fc8f -size 5111 +oid sha256:3ad47326bb56df4fcf855bf570a6d0002606154b3236dd092c1dc53a3b9b962b +size 5108 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Day_0_en.png index 7d6e57a4c9..022d1525d3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6642e9af74b4b404e89d08e68ace09cbbfe91b21173989c8c7921a033ff53c4d -size 8671 +oid sha256:cf7ac495a31b4cd4991a0b4abaae2ef1742e6b144eb3d31c971d53701f1a186b +size 8473 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Night_0_en.png index 5118946d2f..f04b160432 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.components_SendButton_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66393493e210dd6726b31ff4d32cf5ee4a54b24a268f2105e49ea10bad35d689 -size 8464 +oid sha256:470a09c3aff122d60faceb1511ce181625884e95c21799b542e25654d9d57011 +size 8286 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Day_0_en.png index 78aa5cff8d..4c9c3a0b2c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73a225eeb9c217ada941b5add96dd2f832fb33b702f86eae5e1f5ecbee5a4bb2 -size 51625 +oid sha256:bbe0183311dc52d916fdb6e37dbd534a5ff12500ba1fd15709323911ae217acc +size 51296 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Night_0_en.png index 20eb03d5d4..8bfc9c6551 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanTheme_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab365d585b76ab0723c9998cc13f755640b7f086b99b55804a38e103b8d42416 -size 49440 +oid sha256:3740cabf3e956c76428924323a88d06cc2e6b94187156fa6932ab0042c15780b +size 49815 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png index a533d93146..976f716bdf 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f9279dc01e9fdec69ee0819e2b4b7e0f00dec7e1b62c353052530b6bb66d4f0 -size 52621 +oid sha256:75bc80f448aaf73366341e4d022c6f538ab35383a113cfe54b16e9fb79cf24cf +size 52445 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png index ca9dd3997a..8efd2cae84 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_MarkdownTextComposerEdit_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c3d263dfa02c775db1f370ac6ada2d3b31f3ce252f605e05f7121367b609bc0 -size 50915 +oid sha256:8f1bae4b8d8090e3ba88263735e289ca5e80853659cab1a7fcde1b253db09ecc +size 50680 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png index 5ee6bdd710..dc9cbcceb5 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72c662eb1b7c5d85c65d1f7cc25bf484964f0ce31f414406fe8fbf90f2e9173f -size 53784 +oid sha256:c4d05c807978d42deb00637bdda36f113f039f01d8da2a58e7bd2b21f8f371d1 +size 53640 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png index 6f8df5e1e7..192a3442c2 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerAddCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6bef68b39ff88a4020f30c0ef8313eccbe2d360723894414cdabd9b89ee9c84 -size 51768 +oid sha256:57e4229e09b30c6a2eebb9967516d5ef3b645f5b00ba838c6b16d8580802e419 +size 51572 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png index 07d884cde4..8c64c73630 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a28794895dd4d6a6389aa2c23e756861e6f07ff13b60c67f273fdf027dd8eb09 -size 47515 +oid sha256:6148ff20750c6fd73891e951ec6118a89aabb46c72716aff7bbe64518699a1ce +size 47205 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png index 4033cabff3..24b18684bd 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d4214277841ebc15eda9dae5367cec2d1127eadecc7b2fa97ad9d845888cd2d -size 46042 +oid sha256:12f3d00b3ffb118795cdfa97d90ac20648f2f8b3454ae3c7d237a341e4c54076 +size 45583 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png index f8f15e94f6..40e2e33165 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fca1c7a63f89d4ae3c63b473a7352f83abda12bde4ef7698fb4d80218ba0cc8 -size 52411 +oid sha256:830a2c7f84193159ad497830dee259dee4638534ea6af0ece94fdde298b32c07 +size 52273 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png index 1c797b94a2..6f1b1559ea 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditCaption_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bf7e9b141aef2236b935503a409eae7dc06f824d09a83fb97370450920f6d54 -size 50841 +oid sha256:2b2e72e12f25e6a7c64aeaaba4c370fe39a1bb7b902a4c70f3fc9e9fd03d3ea8 +size 50644 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png index 9d16559ee8..7988b6e81c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f1643e255457fcf5511d807235137a5afcf457740a02ad9632e26b06b224f89 -size 63488 +oid sha256:562797e485e028ec68241d697f9ae251042ee6e60db461411f4fbe91471f4c82 +size 63375 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png index c7be9c1635..8329925026 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEditNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a01bfddaadf8d165d638980d05ebf02076c9ddeb0160e7dff40171fc433d3c05 -size 61161 +oid sha256:260a856980d57a67d1ea54d09a275fd73b433bfda7cba521c0e427f145f9f61a +size 60773 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png index a533d93146..976f716bdf 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f9279dc01e9fdec69ee0819e2b4b7e0f00dec7e1b62c353052530b6bb66d4f0 -size 52621 +oid sha256:75bc80f448aaf73366341e4d022c6f538ab35383a113cfe54b16e9fb79cf24cf +size 52445 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png index ca9dd3997a..8efd2cae84 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerEdit_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c3d263dfa02c775db1f370ac6ada2d3b31f3ce252f605e05f7121367b609bc0 -size 50915 +oid sha256:8f1bae4b8d8090e3ba88263735e289ca5e80853659cab1a7fcde1b253db09ecc +size 50680 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png index 2fec8ddfe9..e065ccdcd4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a596e77c10b67cd0295b0676c051d712205839b52bf46f831ecaa24d275dbec -size 64470 +oid sha256:6e9ea8c406f19bf831907bd837985a6c3bbb9269a67d6b80fd370b2d77991a81 +size 64172 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png index a74efac0ff..4c447e1aa4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormattingNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a8686422da867abcd6dc0d33e021ecd59499509d85ff8d722ea2a53facc6ccd -size 61934 +oid sha256:35933703c46537e8b38abab0a1921336ba632a920a254e6be3e575a992576918 +size 61463 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png index d65c236047..cdc66da89a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d552bcec8eb096ae396e545744af9018bcae277597a1098e0477e87e4620e30c -size 53806 +oid sha256:14c1f260a7fe141294740fb84faa21e7461ea873563081ca1f28d39efd9d4096 +size 53643 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png index 838cd73d50..008bd43b1b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerFormatting_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54b501a2dc902ba27a701fc8539fa2d2eb64511d2f058b4ff189365df63d5665 -size 51093 +oid sha256:bfc7016fbf8e80decae37c976fbf27e68621e33c44598ae8b585ff08fec5dca0 +size 50966 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png index e9d269d47f..fc3528e89b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfcb5206ea0fc6b89d6ac460d0d78bd8b70cc3e960d4ab0397bd6470e7dd23b8 -size 73608 +oid sha256:06c8fa4baafd95722ef3ebb32bf81d727d2fc4afa101de1b3227ba0e3f5e667a +size 73565 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png index 5f86ec269b..f37d342a2d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdf8092eb79caa45a8f911589af848756218fc7ca8e3c32c11b7b650a4b9564a -size 60143 +oid sha256:448e2ab7b6cecd9aa087556d4a3ee3426240ed9bf801d0d19991d30b3a1add2c +size 60095 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png index c4715f2010..a6c013da6d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dd4dbbaef196264c23e4188b34c617d2e72bacaa9f206a18fe2a73ba17adf63 -size 73006 +oid sha256:b9c5fada3cd02d0452a54f9ac6eb0037963f33688bac0f5988fb3fbc7b9df67c +size 72964 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png index c4da3da864..b0d7aadf76 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c8920e6be0d01f0038d315a6421fe051b9f205477bb313e8ae8afada023fea1 -size 81122 +oid sha256:d43d379c55200a409192cdf7f6db047aec62e031b84b336994d367b98508aabd +size 81097 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png index c7f1a6c619..2289b8955c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3e2cfa763cf8f73872d108e3c749ced3dc730b9ba2902b1050d2fdddb036c56 -size 62658 +oid sha256:313595354ec9c627b96531faa05d7355f77161574efdf6fa2d08c87d025b897b +size 62600 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png index 419029e254..2a0111e7b4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8b3b3fbdc951585ace8942e9307581cb7793ffaa4c8fe56a52b6063bd5db271 -size 61540 +oid sha256:c08a0d32c0d6871327935dfc1f8305957911b212c44315157944d21ae98c7812 +size 61501 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png index 71c7b2817b..50afdb3ee9 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68bdae9e2b82ba19d7d7de98fc682ffe7eb96777ba86b7fa99f2acc0eb33f7a5 -size 68023 +oid sha256:abbf39ded613c35bacc656e40803e9eff15fff24003d5fa4f325974e5dad7e81 +size 67955 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png index e5c3663080..83a7328390 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d799e7c48c310dd2a9e42bf8765016da88ee69f51555992d2f80f467e8f07be0 -size 90598 +oid sha256:f7a368d85ce1860549cd151ab3e0ebd1847deb7bf165e41c692d251fd853ff8c +size 90532 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png index dfefb57abd..dabe4ce16b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed11b4abb6a6a1a790248026fd9b322d1d00f3988957a9a549573d859dd6fa92 -size 61017 +oid sha256:3f51a2dfc2b0c14aad745f32d289642772b25219098ea6de21623b87d1113162 +size 60968 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png index 837f7d577d..245d904222 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:851fe33ec8cac57d5ade446cec96dc5ec5790c8ce28d8bb47b111b46b9e30abd -size 62175 +oid sha256:aea5921d74aa401445a771e5f67548c9a600de1931ef58f3f1fcb04fd47c6c7a +size 62122 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png index d5dc1d06c0..ac85ba35be 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1838d95b241ebe2b83e732569efe344f1bde77b2cff068d0bb40412306c1f2c3 -size 68840 +oid sha256:d498ae31c4117f142ffca548d7a8e7de2b55581e90a36c11c5088c6c79cc05ec +size 68788 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png index 5d956beeeb..c97a21d9f4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ab214a116f303ef96e58d29edb757ccd4a36100d701c230a5f60d5850ebf0ce -size 60562 +oid sha256:2e935a133562362970ccd486b6a80c9c7c5248c09a2d2689f9ae03f2d6dee1f8 +size 60516 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png index ae795c68bf..2158de1e9d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b38a8b5fd2c82843b4da6d0c4c11400f569d8e38a8c4dcde03056c5e81a53c0f -size 71405 +oid sha256:8458709e23967525dd4491ab14010744945f87e83018dac1be540885fe5f9037 +size 71420 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png index 58444fb956..47827bf522 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:996e5014e75e88bded0ef2742733b60f55b003486e3b2a418298e39dfc595add -size 58295 +oid sha256:361e8955318a70083f3f0d1e91e11da844e65ee73d4df5bcf505190b36845608 +size 58348 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png index 7f86914fce..34a6022274 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab616b950daa6169f06930d411e1ed75ef1cc2f425d692abb8fb479c658d9bc -size 70819 +oid sha256:df6185c9a3e37355bf56c6f058caea4094b0ee789e955f45a6f8de51f59f4793 +size 70865 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png index 1778478c3b..1d640e83e8 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61b85adda6a18eebcccd149318e6c0da23c791cf4df8405f41e31891bfa9febc -size 78647 +oid sha256:95096bce8d1b904cfc371fd73ee0245a6bb7de98ca7351705b55d2fb03e05fbb +size 78694 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png index 201a5202f2..7240bfb85f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:950da1e8c251d711c7ec460234981ac52f6e6bf7528fc904518b93fb0ce35b09 -size 60708 +oid sha256:61596e5a0be110ac02407225c4265158a50f37841a4fe841882c191a87473448 +size 60773 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png index d397948301..2505e18317 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d4756b79b40777acad34655ab49ff9811f20b5196c6f2cbe31207e876290906 -size 59737 +oid sha256:c5cea6a12ea6301391c3eb71a6923273c41d218bb588ab0872fb89045861877c +size 59795 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png index abf0911da5..9d9c13725d 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c7e798594d983cc0e544e3eb70ea1654a78a866a7bc64ef620ac6a823b8a691 -size 66011 +oid sha256:88d251702cb14354d8cd231d731298416a64bc56bc5bf2459e6b0adf8f963061 +size 66078 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png index 3fd4cb75c1..e5ce7fcc7f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f65f939395ba3c0736d59d9cdfcd55f1a9f7f9c0e1fcec8ff5da441277313a0e -size 87547 +oid sha256:4318a47ebc213d862401c30dd77153cc2bd85501e81a275b9a6c2297dc2419e3 +size 87492 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png index 829941d6c5..d8e9ac1019 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a4fee3963b352bfc49d8ef7e18c0179f304064758daafc8324cdc650458b522 -size 59171 +oid sha256:73ecd77bb23b818e02b38956f90efcbb793b1147ec0bbcf4c6d99aa0389ec139 +size 59223 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png index 2d3b89b31e..8fce5b89a8 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b075203bb02a9a68b70e24d4aa3b7975c50bbbc2087026f28910427f431ec62 -size 60251 +oid sha256:b3e6382b83b80e53720e42138998690f53dd1eb5c64a997b8d98c4ddfde6178b +size 60315 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png index 5e2596ff57..167be6292e 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3bc27af141adfea18c39b86bcdf046392e765e7411453b6143958d5ede017411 -size 66622 +oid sha256:82df5896860044170cab330c10e6f149bcbd0a13a95e7ff1165266690d3f14be +size 66664 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png index 102acf57ed..58e42326a2 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReplyNotEncrypted_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03291891705787b0211dfd7375d755dc1abc985eb88d48bd978555032bea7a4e -size 58782 +oid sha256:63f20f5ffb512d84010293605faa937d8e65450ada5873a41079a5e103f73228 +size 58843 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png index 3d64aa3d29..7344038895 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb24ef3a0c22045fc9e9ec390dd1785779924f5bd2a10f9bbc88d1a70b106191 -size 76305 +oid sha256:3086a269508662c790291a6824badcf00c9491a2445a4fe8137d93434740afd0 +size 75897 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png index 372645812d..d1ba410916 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1974abd76e0a3f8cdf1beefe26209d2bffb5212520f9a4e2655b80925337d1e7 -size 59835 +oid sha256:dcecd3f616517fe41ff9768d0f7b2726b37568bc2693c8050f0062ca54c23b5c +size 59583 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png index 4ebd5027f7..bdef7e1596 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2aaf080dad05b68af3ed2ea9a4d6cd2f2e9bb991da02683a2e195cb01002cb18 -size 74482 +oid sha256:c6db7478f809517ada24141427c90fcba50254a08ead038e96bde850edd5beac +size 74097 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png index 9f5cdd792c..98a1ca625a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1185e1fe56eb661dac60465841979a542055436aa5064663641164cef3a6dfd -size 85660 +oid sha256:99be32fcefa1b5cd46f9247d402fda2fb910d0d7c0335013e5660faa8a8cfdab +size 85304 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png index c122a69c83..fb4694a754 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec74265bb93b5699a79918986ac601c3c2b2eb04b8aac0c72e50e57432ff9c27 -size 62992 +oid sha256:7888d98181954105f4823294b1e732387bdcac56db5a5acd6cb52ef0bceb3c36 +size 62724 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png index 3c8023bc83..468cdc5ba4 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54d61d2749c5bf4194658359c580616412da386454cf7d06cd7546b6555f52ad -size 62033 +oid sha256:6bf33186f507170dd778a42966bb0fb5b78a2989bbc942107e6eaa11b4e46fed +size 61766 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png index c6c0b542f2..121086cdc6 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a23bf0e7a2a2874121ba56dd144316df816432f1989fa8b9d05278e067175b75 -size 69928 +oid sha256:1f63bd888f3c8b1e5edb4e6fafb0c53a443c8fd45e8a2dae568f814bf16735d9 +size 69657 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png index cecb90d4c8..fc24cfd91a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2958634d33600d8e1b2b49cd264e0dd3bc54ba4a4fa5d34b2fef5d195a0d30f1 -size 104699 +oid sha256:a8e8b2957c50820058cc0f05a3df772d2f93d414672379caacc9b9a72a980afd +size 104366 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png index aef349c929..1fd3c0c2d5 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0834f567e0de98e55bc7607f5361637c00131c15f249594fd265ca4dafb4966c -size 61049 +oid sha256:79265ae46f915beababc340f74a040536570f2fc7f992aca87f85ef5c4611678 +size 60771 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png index b1da52d68a..a02082c713 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbf214dfd61e9da88625243ebbca73c68718d15dbb96a11ff6765e8135ceac72 -size 63119 +oid sha256:dc316ad328bff1ab5aa5bf90777c310d101014289026c27e6b850fafaf35f391 +size 62839 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png index e175b2e143..f5c8bfd7fe 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a34b3acb890a44a29b58d27e91851e6329d2ef4cadbef5beebcbd21f0444e93e -size 70432 +oid sha256:ad38a300d68e3254b5effb4af05958d38f61c82ac4933f31ad31e6d4198441ab +size 70168 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png index 7ef00f0247..86b58c1c8c 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbcdc99699e06603d7e2e285d8eec6103b68dc829f45d29f5c781e932a375552 -size 60550 +oid sha256:3234bb7bc685de4b64fc7a53b37e72b5df6f4886e8a6ae210636317d71de1e58 +size 60273 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png index 48e0faa0fb..498fc9bfec 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa08671396751f9562ea6ee83bc353276bfe72524809ec44f666804c7c164413 -size 73614 +oid sha256:759fc41d1d645611525af8d02d3662e85e7586e41b6adbf812b155165eecb8de +size 73206 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png index bcc13c4039..281ff3be90 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b82f3f8fe10b89962c5d3dedd593eee2f11b2c133e863b2bd1d540f83d07dd4f -size 57893 +oid sha256:aeef3d5456ffaced3bf85f0816b951db65bb66bed0472bf4e37fd4b7817f0dcd +size 57471 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png index 5ed1dc9981..0e15149cfd 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de1b9014a911c3a7154cad9c52f1d2e60d73efad6e626e10623c59652cff763c -size 71905 +oid sha256:1abbc860ec9569af1094f4bd3b4bafcff55197118c6544977e633237065eaa40 +size 71497 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png index 159c59edc0..df2f0688e7 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63a8eb5a1cc04455f270fce24811a389e7d274691e5b20a7df8595549ccbef87 -size 82985 +oid sha256:e48bc2c7cc98cd7702baa02d1bf507146addaf752251ee83e850bfe38084d399 +size 82577 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png index e652ef65db..b626a0d5c7 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8648126878bcaf3bb0e05a26c052710627e00ece4e2567977b8b52497a940cd -size 61057 +oid sha256:38a3ac2dc686c9d6c430e183c6369f4bf0da1c7ea4e4664c051bcdabf192fc30 +size 60641 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png index 32c4e328b6..fa43b0bb6b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ff99ca0e81db14b574c734ea5ba5d94c8a059b63b07502aa090113a776f6b22 -size 60195 +oid sha256:643003092eee0fb9ec41df51607bbfac07245878d09b3993264d0e1697fb1d21 +size 59776 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png index 7f5038f397..07e6b3f795 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b14c0f2ecd79fbed4a6c3a6b3459fe204cae344f42210987fb52eb9de836df6f -size 67953 +oid sha256:52b10473dcfd28adf8b0783e53e55512f3008623d1f18143b734e046d2c0a08d +size 67535 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png index 7a1cd7f522..64237e47bb 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:841cbfe819f61338f25484e63916e50d07aa258782b50c6108a71fa10a792fea -size 101688 +oid sha256:ca307ee843fe4452effb91529c89752a0dd88a1ffc589e57b0fed4dc9fcd2ce1 +size 101371 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png index e1e4aad0f8..6a9f5548db 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e009d6cc28b8d98ae9c72e70a81af22d62b4428fae5dd7b10589d7aa46f1bf4 -size 59075 +oid sha256:8eabfa0216062417fb82560d4099983847b2110fcabd2ef367cc8396a39cb6e1 +size 58678 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png index 9079286c36..6b09868df1 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74398889e5df4d87fd34196bccd07b0a9d8dd6c545613fb1a7a0c1aee26f37a4 -size 61167 +oid sha256:e33e14bf047c3a5a1c0c6b9410885d876e8bd5ecc63825f7da9a2b634bb90097 +size 60740 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png index d8c49bb94a..57c5ad7128 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a89fecb881a6ae6ce48e23abe2e3f3ed35e29f7a0b231c0c467b6dff022ad77b -size 68284 +oid sha256:bc8eb361695dc76f949647ed7e8b40b9cff8a8044b7cac24457d3020e12336ca +size 67879 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png index 5a8a7b6faa..9d695f103f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerReply_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16e4ac5820b57fe720e3c3b1d8383661b9d90ea230be19955f525ac7df346741 -size 58689 +oid sha256:887f918cd9fed30d47cb9b2cb24847c9e865a62b46a1f1dcc3f576d04fad55dd +size 58301 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png index ad27b617df..6beebb5505 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:899158f6f0ece99609f76ed9d3ee23489043b0bfdf4daa0264bef52814b8af15 -size 56923 +oid sha256:86960a566324cd6da7669f69174610d589fdc8a79723a14e288abbedc356ce83 +size 56629 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png index 34951203a5..02a5471caa 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimpleNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8b9c61ee214c3d222eda082120ae681ef5b1e4359c65d34d6d08106403aeef6 -size 54539 +oid sha256:58fe14ac945803ad506a07ef6feabdea90f8d98a3ea140c4b49fcfb33c493936 +size 54030 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png index 2c582cdea1..c4d1d580c6 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5e4def8107b07a630a8991b20f541768bf8090e0cd964bb3c5b524955f12318 -size 46869 +oid sha256:4ef9f2a20071442332033fd7cc3e29ed533b746507f5855adba0f8e5fb8b6077 +size 46657 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png index 52d5770cf9..647275be1b 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerSimple_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11633c6e4562ab6a3144d80ff630574bc800a880a2804edf986c1fc8aeeff6b7 -size 44873 +oid sha256:f12c489c4a2497afd7fa275c8c05aad4f0ae91743a784f7439236544df76743c +size 44487 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png index 395292f84e..145e83619a 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7cd1be9d2376be6970c2612514c342346b18779fd3b3eace3b33221fccb1a7d9 -size 37552 +oid sha256:f99ccb2821686d4f63665b35aa6efa9c6770e5489214230c7263238a77fc86f8 +size 37406 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png index 5754e839e1..20ea356ec1 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoiceNotEncrypted_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98a7981891ddddcc24340b37c8d35602deab9374184f37b102886637f1e7d4ff -size 35741 +oid sha256:926aadb497f7e386f01ba118ed45469523a63016dceba5dd56927e3962c05fdf +size 35402 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png index 97965f22c3..9e7b6804ee 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acde66c5c538f2f3170d9908ebcad7a3f3938e1a4904268b8c35236886c979b0 -size 26501 +oid sha256:e1b95ff9d3c48da130033b55b8e78813daa04e902cc3aba980d676e2901b28d9 +size 26303 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png index 709965cc42..9085375c46 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer_TextComposerVoice_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f7890a2ee68ed75e1a14f125e53b101e52f6b4738efd828d9099661b44f4f8c -size 25606 +oid sha256:52fdfefa71d5dbaaab5259f627fe805b6a06c3f8de82b97ba55b8000c1edcfb1 +size 25293 From 4688b15c06764dd94c5db93c6bfc53164011571e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 17:24:58 +0200 Subject: [PATCH 18/69] Fix issue after rebase. --- .../io/element/android/tests/konsist/KonsistPreviewTest.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index cebbba2b01..5b0454040c 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -60,11 +60,10 @@ class KonsistPreviewTest { "BackgroundVerticalGradientDisabledPreview", "BackgroundVerticalGradientEnterprisePreview", "BackgroundVerticalGradientPreview", - "CallScreenPipViewPreview", "ColorAliasesPreview", "DefaultRoomListTopBarWithIndicatorPreview", - "FocusedEventPreview", "FocusedEventEnterprisePreview", + "FocusedEventPreview", "GradientFloatingActionButtonCircleShapePreview", "HeaderFooterPageScrollablePreview", "IconsCompoundPreview", From 4b109205072c028b02f3cb5d630279b78525165b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:56:51 +0200 Subject: [PATCH 19/69] Update dependency org.matrix.rustcomponents:sdk-android to v25.7.7 (#4989) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure we distinguish between notification events that were filtered out and those that couldn't be resolved. --- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jorge Martín --- gradle/libs.versions.toml | 2 +- .../NotificationResolverException.kt | 28 ++++ .../api/notification/NotificationData.kt | 1 - .../api/notification/NotificationService.kt | 15 +- .../notification/RustNotificationService.kt | 74 ++++++---- .../fixtures/factories/NotificationItem.kt | 7 + .../fakes/FakeFfiNotificationClient.kt | 6 +- .../RustNotificationServiceTest.kt | 13 +- .../notification/FakeNotificationService.kt | 6 +- .../CallNotificationEventResolver.kt | 11 +- .../DefaultNotifiableEventResolver.kt | 80 +++++----- .../DefaultOnMissedCallNotificationHandler.kt | 1 + .../FallbackNotificationFactory.kt | 38 +++++ .../impl/notifications/ResolvingException.kt | 10 -- .../push/impl/push/DefaultPushHandler.kt | 66 ++++++--- .../DefaultNotifiableEventResolverTest.kt | 138 +++++++++--------- ...aultOnMissedCallNotificationHandlerTest.kt | 2 +- .../push/impl/push/DefaultPushHandlerTest.kt | 15 +- 18 files changed, 313 insertions(+), 200 deletions(-) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/NotificationResolverException.kt create mode 100644 libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt delete mode 100644 libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ResolvingException.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 77e212c2ec..e882f11531 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -173,7 +173,7 @@ jsoup = "org.jsoup:jsoup:1.21.1" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.1.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.3" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.7" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/NotificationResolverException.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/NotificationResolverException.kt new file mode 100644 index 0000000000..ab251f19d8 --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/NotificationResolverException.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.matrix.api.exception + +/** + * Exceptions that can occur while resolving the events associated to push notifications. + */ +sealed class NotificationResolverException : Exception() { + /** + * The event was not found by the notification service. + */ + data object EventNotFound : NotificationResolverException() + + /** + * The event was found but it was filtered out by the notification service. + */ + data object EventFilteredOut : NotificationResolverException() + + /** + * An unexpected error occurred while trying to resolve the event. + */ + data class UnknownError(override val message: String) : NotificationResolverException() +} diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt index f90b70171e..338193ed44 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt @@ -68,7 +68,6 @@ sealed interface NotificationContent { ) : MessageLike data object RoomEncrypted : MessageLike - data object UnableToResolve : MessageLike data class RoomMessage( val senderId: UserId, val messageType: MessageType diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt index 1e1c8b7fb7..ddec326cef 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt @@ -10,6 +10,19 @@ package io.element.android.libraries.matrix.api.notification import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId +/** + * Represents the resolution state of an attempt to retrieve notification data for a set of event ids. + * The outer [Result] indicates the success or failure of the setup to retrieve notifications. + * The inner [Result] for each [EventId] in the map indicates whether the notification data was successfully retrieved or if there was an error. + */ +typealias GetNotificationDataResult = Result>> + +/** + * Service to retrieve notifications for a given set of event ids in specific rooms. + */ interface NotificationService { - suspend fun getNotifications(ids: Map>): Result> + /** + * Fetch notifications for the specified event ids in the given rooms. + */ + suspend fun getNotifications(ids: Map>): GetNotificationDataResult } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt index b88b53454a..4b4693c73b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt @@ -12,26 +12,29 @@ import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.core.EventId 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.notification.NotificationContent -import io.element.android.libraries.matrix.api.notification.NotificationData +import io.element.android.libraries.matrix.api.exception.NotificationResolverException +import io.element.android.libraries.matrix.api.notification.GetNotificationDataResult import io.element.android.libraries.matrix.api.notification.NotificationService import io.element.android.services.toolbox.api.systemclock.SystemClock import kotlinx.coroutines.withContext +import org.matrix.rustcomponents.sdk.BatchNotificationResult import org.matrix.rustcomponents.sdk.NotificationClient import org.matrix.rustcomponents.sdk.NotificationItemsRequest +import org.matrix.rustcomponents.sdk.NotificationStatus +import org.matrix.rustcomponents.sdk.use import timber.log.Timber class RustNotificationService( private val sessionId: SessionId, private val notificationClient: NotificationClient, private val dispatchers: CoroutineDispatchers, - private val clock: SystemClock, + clock: SystemClock, ) : NotificationService { private val notificationMapper: NotificationMapper = NotificationMapper(clock) override suspend fun getNotifications( ids: Map> - ): Result> = withContext(dispatchers.io) { + ): GetNotificationDataResult = withContext(dispatchers.io) { runCatchingExceptions { val requests = ids.map { (roomId, eventIds) -> NotificationItemsRequest( @@ -42,34 +45,41 @@ class RustNotificationService( val items = notificationClient.getNotifications(requests) buildMap { val eventIds = requests.flatMap { it.eventIds } - for (eventId in eventIds) { - val item = items[eventId] - val roomId = RoomId(requests.find { it.eventIds.contains(eventId) }?.roomId!!) - if (item != null) { - put(EventId(eventId), notificationMapper.map(sessionId, EventId(eventId), roomId, item)) - } else { - Timber.e("Could not retrieve event for notification with $eventId") - put( - EventId(eventId), - NotificationData( - sessionId = sessionId, - eventId = EventId(eventId), - threadId = null, - roomId = roomId, - senderAvatarUrl = null, - senderDisplayName = null, - senderIsNameAmbiguous = false, - roomAvatarUrl = null, - roomDisplayName = null, - isDirect = false, - isDm = false, - isEncrypted = false, - isNoisy = false, - timestamp = clock.epochMillis(), - content = NotificationContent.MessageLike.UnableToResolve, - hasMention = false - ) - ) + for (rawEventId in eventIds) { + val roomId = RoomId(requests.find { it.eventIds.contains(rawEventId) }?.roomId!!) + val eventId = EventId(rawEventId) + items[rawEventId].use { result -> + when (result) { + is BatchNotificationResult.Ok -> { + when (val status = result.status) { + is NotificationStatus.Event -> { + put(eventId, Result.success(notificationMapper.map(sessionId, eventId, roomId, status.item))) + } + is NotificationStatus.EventNotFound -> { + Timber.e("Could not retrieve event for notification with $eventId - event not found") + put(eventId, Result.failure(NotificationResolverException.EventNotFound)) + } + is NotificationStatus.EventFilteredOut -> { + Timber.d("Could not retrieve event for notification with $eventId - event filtered out") + put(eventId, Result.failure(NotificationResolverException.EventFilteredOut)) + } + } + } + is BatchNotificationResult.Error -> { + Timber.e("Error while retrieving notification with $rawEventId - ${result.message}") + put( + eventId, + Result.failure(NotificationResolverException.UnknownError(result.message)) + ) + } + null -> { + Timber.e("The notification data for $rawEventId was not in the retrieved results. This is unexpected.") + put( + eventId, + Result.failure(NotificationResolverException.UnknownError("Notification data not found")) + ) + } + } } } } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt index b13e48e669..ee5e3ac4e2 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt @@ -16,6 +16,7 @@ import org.matrix.rustcomponents.sdk.NotificationEvent import org.matrix.rustcomponents.sdk.NotificationItem import org.matrix.rustcomponents.sdk.NotificationRoomInfo import org.matrix.rustcomponents.sdk.NotificationSenderInfo +import org.matrix.rustcomponents.sdk.NotificationStatus import org.matrix.rustcomponents.sdk.TimelineEvent fun aRustNotificationItem( @@ -34,6 +35,12 @@ fun aRustNotificationItem( threadId = threadId?.value, ) +fun aRustBatchNotificationResult( + notificationStatus: NotificationStatus = NotificationStatus.Event(aRustNotificationItem()), +) = org.matrix.rustcomponents.sdk.BatchNotificationResult.Ok( + status = notificationStatus, +) + fun aRustNotificationSenderInfo( displayName: String? = A_USER_NAME, avatarUrl: String? = null, diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiNotificationClient.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiNotificationClient.kt index 180da9cc89..d17f4f949c 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiNotificationClient.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiNotificationClient.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes +import org.matrix.rustcomponents.sdk.BatchNotificationResult import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NotificationClient -import org.matrix.rustcomponents.sdk.NotificationItem import org.matrix.rustcomponents.sdk.NotificationItemsRequest class FakeFfiNotificationClient( - var notificationItemResult: Map = emptyMap(), + var notificationItemResult: Map = emptyMap(), val closeResult: () -> Unit = { } ) : NotificationClient(NoPointer) { - override suspend fun getNotifications(requests: List): Map { + override suspend fun getNotifications(requests: List): Map { return notificationItemResult } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt index 3166acc891..117d164ab9 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt @@ -8,9 +8,10 @@ package io.element.android.libraries.matrix.impl.notification import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType -import io.element.android.libraries.matrix.impl.fixtures.factories.aRustNotificationItem +import io.element.android.libraries.matrix.impl.fixtures.factories.aRustBatchNotificationResult import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeFfiNotificationClient import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.A_MESSAGE @@ -30,12 +31,12 @@ class RustNotificationServiceTest { @Test fun test() = runTest { val notificationClient = FakeFfiNotificationClient( - notificationItemResult = mapOf(AN_EVENT_ID.value to aRustNotificationItem()), + notificationItemResult = mapOf(AN_EVENT_ID.value to aRustBatchNotificationResult()), ) val sut = createRustNotificationService( notificationClient = notificationClient, ) - val result = sut.getNotifications(mapOf(A_ROOM_ID to listOf(AN_EVENT_ID))).getOrThrow()[AN_EVENT_ID]!! + val result = sut.getNotifications(mapOf(A_ROOM_ID to listOf(AN_EVENT_ID))).getOrThrow()[AN_EVENT_ID]!!.getOrThrow() assertThat(result.isEncrypted).isTrue() assertThat(result.content).isEqualTo( NotificationContent.MessageLike.RoomMessage( @@ -56,10 +57,8 @@ class RustNotificationServiceTest { val sut = createRustNotificationService( notificationClient = notificationClient, ) - val result = sut.getNotifications(mapOf(A_ROOM_ID to listOf(AN_EVENT_ID))).getOrThrow()[AN_EVENT_ID]!! - assertThat(result.content).isEqualTo( - NotificationContent.MessageLike.UnableToResolve - ) + val exception = sut.getNotifications(mapOf(A_ROOM_ID to listOf(AN_EVENT_ID))).getOrThrow()[AN_EVENT_ID]!!.exceptionOrNull() + assertThat(exception).isInstanceOf(NotificationResolverException::class.java) } @Test diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt index 4a9671f677..4e17265f7a 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt @@ -13,13 +13,13 @@ import io.element.android.libraries.matrix.api.notification.NotificationData import io.element.android.libraries.matrix.api.notification.NotificationService class FakeNotificationService : NotificationService { - private var getNotificationsResult: Result> = Result.success(emptyMap()) + private var getNotificationsResult: Result>> = Result.success(emptyMap()) - fun givenGetNotificationsResult(result: Result>) { + fun givenGetNotificationsResult(result: Result>>) { getNotificationsResult = result } - override suspend fun getNotifications(ids: Map>): Result> { + override suspend fun getNotifications(ids: Map>): Result>> { return getNotificationsResult } } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt index 119eda3423..4dcb2debc0 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt @@ -12,6 +12,7 @@ import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.matrix.api.notification.CallNotifyType import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.notification.NotificationData @@ -57,7 +58,7 @@ class DefaultCallNotificationEventResolver @Inject constructor( forceNotify: Boolean ): Result = runCatchingExceptions { val content = notificationData.content as? NotificationContent.MessageLike.CallNotify - ?: throw ResolvingException("content is not a call notify") + ?: throw NotificationResolverException.UnknownError("content is not a call notify") val previousRingingCallStatus = appForegroundStateService.hasRingingCall.value // We need the sync service working to get the updated room info @@ -65,8 +66,12 @@ class DefaultCallNotificationEventResolver @Inject constructor( if (content.type == CallNotifyType.RING) { appForegroundStateService.updateHasRingingCall(true) - val client = clientProvider.getOrRestore(sessionId).getOrNull() ?: throw ResolvingException("Session $sessionId not found") - val room = client.getRoom(notificationData.roomId) ?: throw ResolvingException("Room ${notificationData.roomId} not found") + val client = clientProvider.getOrRestore( + sessionId + ).getOrNull() ?: throw NotificationResolverException.UnknownError("Session $sessionId not found") + val room = client.getRoom( + notificationData.roomId + ) ?: throw NotificationResolverException.UnknownError("Room ${notificationData.roomId} not found") // Give a few seconds for the room info flow to catch up with the sync, if needed - this is usually instant val isActive = withTimeoutOrNull(3.seconds) { room.roomInfoFlow.firstOrNull { it.hasRoomCall } }?.hasRoomCall ?: false 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 7e7dbe3fb4..c0fca17d81 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 @@ -11,7 +11,7 @@ import android.content.Context import android.net.Uri import androidx.core.content.FileProvider import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.core.extensions.mapCatchingExceptions +import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.di.AppScope @@ -24,6 +24,7 @@ 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.core.ThreadId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.matrix.api.media.MediaPreviewValue import io.element.android.libraries.matrix.api.media.getMediaPreviewValue import io.element.android.libraries.matrix.api.notification.NotificationContent @@ -43,18 +44,24 @@ import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageT import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.push.impl.R -import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEvent import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import io.element.android.services.toolbox.api.systemclock.SystemClock import timber.log.Timber import javax.inject.Inject private val loggerTag = LoggerTag("DefaultNotifiableEventResolver", LoggerTag.NotificationLoggerTag) +/** + * Result of resolving a batch of push events. + * The outermost [Result] indicates whether the setup to resolve the events was successful. + * The results for each push notification will be a map of [NotificationEventRequest] to [Result] of [ResolvedPushEvent]. + * If the resolution of a specific event fails, the innermost [Result] will contain an exception. + */ +typealias ResolvePushEventsResult = Result>> + /** * The notifiable event resolver is able to create a NotifiableEvent (view model for notifications) from an sdk Event. * It is used as a bridge between the Event Thread and the NotificationDrawerManager. @@ -65,24 +72,24 @@ interface NotifiableEventResolver { suspend fun resolveEvents( sessionId: SessionId, notificationEventRequests: List - ): Result>> + ): ResolvePushEventsResult } @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) class DefaultNotifiableEventResolver @Inject constructor( private val stringProvider: StringProvider, - private val clock: SystemClock, private val matrixClientProvider: MatrixClientProvider, private val notificationMediaRepoFactory: NotificationMediaRepo.Factory, @ApplicationContext private val context: Context, private val permalinkParser: PermalinkParser, private val callNotificationEventResolver: CallNotificationEventResolver, + private val fallbackNotificationFactory: FallbackNotificationFactory, ) : NotifiableEventResolver { override suspend fun resolveEvents( sessionId: SessionId, notificationEventRequests: List - ): Result>> { + ): ResolvePushEventsResult { Timber.d("Queueing notifications: $notificationEventRequests") val client = matrixClientProvider.getOrRestore(sessionId).getOrElse { return Result.failure(IllegalStateException("Couldn't get or restore client for session $sessionId")) @@ -90,20 +97,28 @@ class DefaultNotifiableEventResolver @Inject constructor( val ids = notificationEventRequests.groupBy { it.roomId }.mapValues { (_, value) -> value.map { it.eventId } } // TODO this notificationData is not always valid at the moment, sometimes the Rust SDK can't fetch the matching event - val notifications = client.notificationService().getNotifications(ids).mapCatchingExceptions { map -> - map.mapValues { (_, notificationData) -> - notificationData.asNotifiableEvent(client, sessionId) + val notificationsResult = client.notificationService().getNotifications(ids) + + if (notificationsResult.isFailure) { + val exception = notificationsResult.exceptionOrNull() + Timber.tag(loggerTag.value).e(exception, "Failed to get notifications for $ids") + return Result.failure(exception ?: NotificationResolverException.UnknownError("Unknown error while fetching notifications")) + } + + // The null check is done above + val notificationDataMap = notificationsResult.getOrNull()!!.mapValues { (_, notificationData) -> + notificationData.flatMap { data -> + data.asNotifiableEvent(client, sessionId) } } return Result.success( - notificationEventRequests.associate { - val notificationData = notifications.getOrNull()?.get(it.eventId) - if (notificationData != null) { - it to notificationData + notificationEventRequests.associate { request -> + val notificationDataResult = notificationDataMap[request.eventId] + if (notificationDataResult == null) { + request to Result.failure(NotificationResolverException.UnknownError("No notification data for ${request.roomId} - ${request.eventId}")) } else { - // TODO once the SDK can actually return what went wrong, we should return it here instead of this generic error - it to Result.failure(ResolvingException("No notification data for ${it.roomId} - ${it.eventId}")) + request to notificationDataResult } } ) @@ -164,7 +179,7 @@ class DefaultNotifiableEventResolver @Inject constructor( NotificationContent.MessageLike.CallCandidates, NotificationContent.MessageLike.CallHangup -> { Timber.tag(loggerTag.value).d("Ignoring notification for call ${content.javaClass.simpleName}") - throw ResolvingException("Ignoring notification for call ${content.javaClass.simpleName}") + throw NotificationResolverException.EventFilteredOut } is NotificationContent.MessageLike.CallInvite -> { val notifiableMessageEvent = buildNotifiableMessageEvent( @@ -195,7 +210,7 @@ class DefaultNotifiableEventResolver @Inject constructor( NotificationContent.MessageLike.KeyVerificationReady, NotificationContent.MessageLike.KeyVerificationStart -> { Timber.tag(loggerTag.value).d("Ignoring notification for verification ${content.javaClass.simpleName}") - throw ResolvingException("Ignoring notification for verification ${content.javaClass.simpleName}") + throw NotificationResolverException.EventFilteredOut } is NotificationContent.MessageLike.Poll -> { val notifiableEventMessage = buildNotifiableMessageEvent( @@ -217,16 +232,11 @@ class DefaultNotifiableEventResolver @Inject constructor( } is NotificationContent.MessageLike.ReactionContent -> { Timber.tag(loggerTag.value).d("Ignoring notification for reaction") - throw ResolvingException("Ignoring notification for reaction") + throw NotificationResolverException.EventFilteredOut } NotificationContent.MessageLike.RoomEncrypted -> { Timber.tag(loggerTag.value).w("Notification with encrypted content -> fallback") - val fallbackNotifiableEvent = fallbackNotifiableEvent(userId, roomId, eventId) - ResolvedPushEvent.Event(fallbackNotifiableEvent) - } - NotificationContent.MessageLike.UnableToResolve -> { - Timber.tag(loggerTag.value).w("Unable to resolve notification -> fallback") - val fallbackNotifiableEvent = fallbackNotifiableEvent(userId, roomId, eventId) + val fallbackNotifiableEvent = fallbackNotificationFactory.create(userId, roomId, eventId) ResolvedPushEvent.Event(fallbackNotifiableEvent) } is NotificationContent.MessageLike.RoomRedaction -> { @@ -234,7 +244,7 @@ class DefaultNotifiableEventResolver @Inject constructor( val redactedEventId = content.redactedEventId if (redactedEventId == null) { Timber.tag(loggerTag.value).d("redactedEventId is null.") - throw ResolvingException("redactedEventId is null") + throw NotificationResolverException.UnknownError("redactedEventId is null") } else { ResolvedPushEvent.Redaction( sessionId = userId, @@ -246,7 +256,7 @@ class DefaultNotifiableEventResolver @Inject constructor( } NotificationContent.MessageLike.Sticker -> { Timber.tag(loggerTag.value).d("Ignoring notification for sticker") - throw ResolvingException("Ignoring notification for reaction") + throw NotificationResolverException.EventFilteredOut } is NotificationContent.StateEvent.RoomMemberContent, NotificationContent.StateEvent.PolicyRuleRoom, @@ -270,27 +280,11 @@ class DefaultNotifiableEventResolver @Inject constructor( NotificationContent.StateEvent.SpaceChild, NotificationContent.StateEvent.SpaceParent -> { Timber.tag(loggerTag.value).d("Ignoring notification for state event ${content.javaClass.simpleName}") - throw ResolvingException("Ignoring notification for state event ${content.javaClass.simpleName}") + throw NotificationResolverException.EventFilteredOut } } } - private fun fallbackNotifiableEvent( - userId: SessionId, - roomId: RoomId, - eventId: EventId - ) = FallbackNotifiableEvent( - sessionId = userId, - roomId = roomId, - eventId = eventId, - editedEventId = null, - canBeReplaced = true, - isRedacted = false, - isUpdated = false, - timestamp = clock.epochMillis(), - description = stringProvider.getString(R.string.notification_fallback_content), - ) - private fun descriptionFromMessageContent( content: NotificationContent.MessageLike.RoomMessage, senderDisambiguatedDisplayName: String, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt index 1efe57ce06..d65df65693 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt @@ -33,6 +33,7 @@ class DefaultOnMissedCallNotificationHandler @Inject constructor( ?.getNotifications(mapOf(roomId to listOf(eventId))) ?.getOrNull() ?.get(eventId) + ?.getOrNull() ?: return val notifiableEvent = callNotificationEventResolver.resolveEvent( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt new file mode 100644 index 0000000000..947e62bf75 --- /dev/null +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.push.impl.notifications + +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.push.impl.R +import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent +import io.element.android.services.toolbox.api.strings.StringProvider +import io.element.android.services.toolbox.api.systemclock.SystemClock +import javax.inject.Inject + +class FallbackNotificationFactory @Inject constructor( + private val clock: SystemClock, + private val stringProvider: StringProvider, +) { + fun create( + sessionId: SessionId, + roomId: RoomId, + eventId: EventId, + ): FallbackNotifiableEvent = FallbackNotifiableEvent( + sessionId = sessionId, + roomId = roomId, + eventId = eventId, + editedEventId = null, + canBeReplaced = true, + isRedacted = false, + isUpdated = false, + timestamp = clock.epochMillis(), + description = stringProvider.getString(R.string.notification_fallback_content), + ) +} diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ResolvingException.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ResolvingException.kt deleted file mode 100644 index 11c655ec1c..0000000000 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ResolvingException.kt +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2025 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.push.impl.notifications - -class ResolvingException(message: String) : Exception(message) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt index 4d9e390690..dc2e7bab0a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt @@ -16,16 +16,17 @@ import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.push.impl.history.PushHistoryService import io.element.android.libraries.push.impl.history.onDiagnosticPush import io.element.android.libraries.push.impl.history.onInvalidPushReceived import io.element.android.libraries.push.impl.history.onSuccess import io.element.android.libraries.push.impl.history.onUnableToResolveEvent import io.element.android.libraries.push.impl.history.onUnableToRetrieveSession +import io.element.android.libraries.push.impl.notifications.FallbackNotificationFactory import io.element.android.libraries.push.impl.notifications.NotificationEventRequest import io.element.android.libraries.push.impl.notifications.NotificationResolverQueue import io.element.android.libraries.push.impl.notifications.channels.NotificationChannels -import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEvent @@ -63,6 +64,7 @@ class DefaultPushHandler @Inject constructor( private val resolverQueue: NotificationResolverQueue, @AppCoroutineScope private val appCoroutineScope: CoroutineScope, + private val fallbackNotificationFactory: FallbackNotificationFactory, ) : PushHandler { init { processPushEventResults() @@ -88,34 +90,37 @@ class DefaultPushHandler @Inject constructor( } else { result.fold( onSuccess = { - if (it is ResolvedPushEvent.Event && it.notifiableEvent is FallbackNotifiableEvent) { - pushHistoryService.onUnableToResolveEvent( - providerInfo = request.providerInfo, - eventId = request.eventId, - roomId = request.roomId, - sessionId = request.sessionId, - reason = "Showing fallback notification", - ) - mutableBatteryOptimizationStore.showBatteryOptimizationBanner() - } else { + pushHistoryService.onSuccess( + providerInfo = request.providerInfo, + eventId = request.eventId, + roomId = request.roomId, + sessionId = request.sessionId, + comment = "Push handled successfully", + ) + }, + onFailure = { exception -> + if (exception is NotificationResolverException.EventFilteredOut) { pushHistoryService.onSuccess( providerInfo = request.providerInfo, eventId = request.eventId, roomId = request.roomId, sessionId = request.sessionId, - comment = "Push handled successfully", + comment = "Push handled successfully but notification was filtered out", ) + } else { + val reason = when (exception) { + is NotificationResolverException.EventNotFound -> "Event not found" + else -> "Unknown error: ${exception.message}" + } + pushHistoryService.onUnableToResolveEvent( + providerInfo = request.providerInfo, + eventId = request.eventId, + roomId = request.roomId, + sessionId = request.sessionId, + reason = "$reason - Showing fallback notification", + ) + mutableBatteryOptimizationStore.showBatteryOptimizationBanner() } - }, - onFailure = { exception -> - pushHistoryService.onUnableToResolveEvent( - providerInfo = request.providerInfo, - eventId = request.eventId, - roomId = request.roomId, - sessionId = request.sessionId, - reason = exception.message ?: exception.javaClass.simpleName, - ) - mutableBatteryOptimizationStore.showBatteryOptimizationBanner() } ) } @@ -125,8 +130,21 @@ class DefaultPushHandler @Inject constructor( val redactions = mutableListOf() @Suppress("LoopWithTooManyJumpStatements") - for (result in resolvedEvents.values) { - val event = result.getOrNull() ?: continue + for ((request, result) in resolvedEvents) { + val event = result.recover { exception -> + // If the event could not be resolved, we create a fallback notification + when (exception) { + is NotificationResolverException.EventFilteredOut -> { + // Do nothing, we don't want to show a notification for filtered out events + null + } + else -> { + Timber.tag(loggerTag.value).e(exception, "Failed to resolve push event") + ResolvedPushEvent.Event(fallbackNotificationFactory.create(request.sessionId, request.roomId, request.eventId)) + } + } + }.getOrNull() ?: continue + val userPushStore = userPushStoreFactory.getOrCreate(event.sessionId) val areNotificationsEnabled = userPushStore.getNotificationEnabledForDevice().first() // If notifications are disabled for this session and device, we don't want to show the notification 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 3c609f184e..a6e443b403 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 @@ -10,6 +10,7 @@ package io.element.android.libraries.push.impl.notifications import android.content.Context import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.notification.CallNotifyType import io.element.android.libraries.matrix.api.notification.NotificationContent @@ -51,6 +52,7 @@ import io.element.android.libraries.push.impl.notifications.model.NotifiableMess import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEvent import io.element.android.libraries.push.test.notifications.FakeCallNotificationEventResolver import io.element.android.services.toolbox.impl.strings.AndroidStringProvider +import io.element.android.services.toolbox.test.strings.FakeStringProvider import io.element.android.services.toolbox.test.systemclock.A_FAKE_TIMESTAMP import io.element.android.services.toolbox.test.systemclock.FakeSystemClock import kotlinx.coroutines.test.runTest @@ -71,12 +73,22 @@ class DefaultNotifiableEventResolverTest { } @Test - fun `resolve event failure`() = runTest { + fun `resolve fetching failure`() = runTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.failure(AN_EXCEPTION) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") val result = sut.resolveEvents(A_SESSION_ID, listOf(request)) + assertThat(result.isFailure).isTrue() + } + + @Test + fun `resolve event failure`() = runTest { + val sut = createDefaultNotifiableEventResolver( + notificationResult = Result.success(mapOf(AN_EVENT_ID to Result.failure(AN_EXCEPTION))) + ) + val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") + val result = sut.resolveEvents(A_SESSION_ID, listOf(request)) assertThat(result.getEvent(request)?.isFailure).isTrue() } @@ -85,12 +97,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = TextMessageType(body = "Hello world", formatted = null) ), - ) + )) ) ) ) @@ -108,13 +120,13 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = TextMessageType(body = "Hello world", formatted = null) ), hasMention = true, - ) + )) ) ) ) @@ -131,7 +143,7 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = TextMessageType( @@ -142,7 +154,7 @@ class DefaultNotifiableEventResolverTest { ) ) ), - ) + )) ) ) ) @@ -159,7 +171,7 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = TextMessageType( @@ -170,7 +182,7 @@ class DefaultNotifiableEventResolverTest { ) ) ), - ) + )) ) ) ) @@ -187,12 +199,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = AudioMessageType("Audio", null, null, MediaSource("url"), null) ), - ) + )) ) ) ) @@ -209,12 +221,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = VideoMessageType("Video", null, null, MediaSource("url"), null) ), - ) + )) ) ) ) @@ -231,12 +243,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = VoiceMessageType("Voice", null, null, MediaSource("url"), null, null) ), - ) + )) ) ) ) @@ -253,12 +265,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = ImageMessageType("Image", null, null, MediaSource("url"), null), ), - ) + )) ) ) ) @@ -275,12 +287,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = StickerMessageType("Sticker", null, null, MediaSource("url"), null), ), - ) + )) ) ) ) @@ -297,12 +309,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = FileMessageType("File", null, null, MediaSource("url"), null), ), - ) + )) ) ) ) @@ -319,12 +331,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = LocationMessageType("Location", "geo:1,2", null), ), - ) + )) ) ) ) @@ -341,12 +353,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = NoticeMessageType("Notice", null), ), - ) + )) ) ) ) @@ -363,12 +375,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomMessage( senderId = A_USER_ID_2, messageType = EmoteMessageType("is happy", null), ), - ) + )) ) ) ) @@ -385,12 +397,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.Poll( senderId = A_USER_ID_2, question = "A question" ), - ) + )) ) ) ) @@ -407,13 +419,13 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.StateEvent.RoomMemberContent( userId = A_USER_ID_2, membershipState = RoomMembershipState.INVITE ), isDirect = false, - ) + )) ) ) ) @@ -427,12 +439,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.Invite( senderId = A_USER_ID_2, ), isDirect = false, - ) + )) ) ) ) @@ -464,12 +476,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.Invite( senderId = A_USER_ID_2, ), isDirect = true, - ) + )) ) ) ) @@ -501,13 +513,13 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.Invite( senderId = A_USER_ID_2, ), isDirect = true, senderDisplayName = null, - ) + )) ) ) ) @@ -539,7 +551,8 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success( + aNotificationData( content = NotificationContent.Invite( senderId = A_USER_ID_2, ), @@ -547,6 +560,7 @@ class DefaultNotifiableEventResolverTest { senderIsNameAmbiguous = true, ) ) + ) ) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") @@ -577,12 +591,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.StateEvent.RoomMemberContent( userId = A_USER_ID_2, membershipState = RoomMembershipState.JOIN ) - ) + )) ) ) ) @@ -595,7 +609,7 @@ class DefaultNotifiableEventResolverTest { fun `resolve RoomEncrypted`() = runTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( - mapOf(AN_EVENT_ID to aNotificationData(content = NotificationContent.MessageLike.RoomEncrypted)) + mapOf(AN_EVENT_ID to Result.success(aNotificationData(content = NotificationContent.MessageLike.RoomEncrypted))) ) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") @@ -620,25 +634,12 @@ class DefaultNotifiableEventResolverTest { fun `resolve UnableToResolve`() = runTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( - mapOf(AN_EVENT_ID to aNotificationData(content = NotificationContent.MessageLike.UnableToResolve)) + mapOf(AN_EVENT_ID to Result.failure(NotificationResolverException.EventNotFound)) ) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") val result = sut.resolveEvents(A_SESSION_ID, listOf(request)) - val expectedResult = ResolvedPushEvent.Event( - FallbackNotifiableEvent( - sessionId = A_SESSION_ID, - roomId = A_ROOM_ID, - eventId = AN_EVENT_ID, - editedEventId = null, - description = "You have new messages.", - canBeReplaced = true, - isRedacted = false, - isUpdated = false, - timestamp = A_FAKE_TIMESTAMP, - ) - ) - assertThat(result.getEvent(request)).isEqualTo(Result.success(expectedResult)) + assertThat(result.getEvent(request)).isEqualTo(Result.failure(NotificationResolverException.EventNotFound)) } @Test @@ -646,10 +647,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success( + aNotificationData( content = NotificationContent.MessageLike.CallInvite(A_USER_ID_2), ) ) + ) ) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") @@ -688,12 +691,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.CallNotify( A_USER_ID_2, CallNotifyType.NOTIFY ), - ) + )) ) ), callNotificationEventResolver = callNotificationEventResolver, @@ -729,12 +732,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomRedaction( AN_EVENT_ID_2, A_REDACTION_REASON, ) - ) + )) ) ) ) @@ -754,12 +757,12 @@ class DefaultNotifiableEventResolverTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( mapOf( - AN_EVENT_ID to aNotificationData( + AN_EVENT_ID to Result.success(aNotificationData( content = NotificationContent.MessageLike.RoomRedaction( null, A_REDACTION_REASON, ) - ) + )) ) ) ) @@ -807,7 +810,7 @@ class DefaultNotifiableEventResolverTest { private fun testNoResults(content: NotificationContent) = runTest { val sut = createDefaultNotifiableEventResolver( notificationResult = Result.success( - mapOf(AN_EVENT_ID to aNotificationData(content = content)) + mapOf(AN_EVENT_ID to Result.success(aNotificationData(content = content))) ) ) val request = NotificationEventRequest(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID, "firebase") @@ -823,7 +826,7 @@ class DefaultNotifiableEventResolverTest { private fun createDefaultNotifiableEventResolver( notificationService: FakeNotificationService? = FakeNotificationService(), - notificationResult: Result> = Result.success(emptyMap()), + notificationResult: Result>> = Result.success(emptyMap()), callNotificationEventResolver: FakeCallNotificationEventResolver = FakeCallNotificationEventResolver(), ): DefaultNotifiableEventResolver { val context = RuntimeEnvironment.getApplication() as Context @@ -840,12 +843,15 @@ class DefaultNotifiableEventResolverTest { } return DefaultNotifiableEventResolver( stringProvider = AndroidStringProvider(context.resources), - clock = FakeSystemClock(), matrixClientProvider = matrixClientProvider, notificationMediaRepoFactory = notificationMediaRepoFactory, context = context, permalinkParser = FakePermalinkParser(), callNotificationEventResolver = callNotificationEventResolver, + fallbackNotificationFactory = FallbackNotificationFactory( + clock = FakeSystemClock(), + stringProvider = FakeStringProvider(defaultResult = "You have new messages.") + ) ) } } diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt index 1dc21a7ebe..25e00f7977 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt @@ -43,7 +43,7 @@ class DefaultOnMissedCallNotificationHandlerTest { val matrixClientProvider = FakeMatrixClientProvider(getClient = { val notificationService = FakeNotificationService().apply { givenGetNotificationsResult( - Result.success(mapOf(AN_EVENT_ID to aNotificationData(senderDisplayName = A_USER_NAME, senderIsNameAmbiguous = false))) + Result.success(mapOf(AN_EVENT_ID to Result.success(aNotificationData(senderDisplayName = A_USER_NAME, senderIsNameAmbiguous = false)))) ) } Result.success(FakeMatrixClient(notificationService = notificationService)) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt index 64a3b87aa7..6ec5accd02 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt @@ -18,6 +18,7 @@ import io.element.android.libraries.matrix.api.core.EventId 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.core.UserId +import io.element.android.libraries.matrix.api.exception.NotificationResolverException import io.element.android.libraries.matrix.api.notification.CallNotifyType import io.element.android.libraries.matrix.api.timeline.item.event.EventType import io.element.android.libraries.matrix.test.AN_EVENT_ID @@ -31,9 +32,9 @@ import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.push.impl.history.FakePushHistoryService import io.element.android.libraries.push.impl.history.PushHistoryService import io.element.android.libraries.push.impl.notifications.FakeNotifiableEventResolver +import io.element.android.libraries.push.impl.notifications.FallbackNotificationFactory import io.element.android.libraries.push.impl.notifications.NotificationEventRequest import io.element.android.libraries.push.impl.notifications.NotificationResolverQueue -import io.element.android.libraries.push.impl.notifications.ResolvingException import io.element.android.libraries.push.impl.notifications.channels.FakeNotificationChannels import io.element.android.libraries.push.impl.notifications.fixtures.aNotifiableCallEvent import io.element.android.libraries.push.impl.notifications.fixtures.aNotifiableMessageEvent @@ -47,6 +48,8 @@ import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret 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.FakePushClientSecret +import io.element.android.services.toolbox.test.strings.FakeStringProvider +import io.element.android.services.toolbox.test.systemclock.FakeSystemClock import io.element.android.tests.testutils.lambda.any import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaRecorder @@ -271,7 +274,7 @@ class DefaultPushHandlerTest { fun `when classical PushData is received, but a failure occurs (session not found), nothing happen`() { `test notification resolver failure`( notificationResolveResult = { _ -> - Result.failure(ResolvingException("Unable to restore session")) + Result.failure(NotificationResolverException.UnknownError("Unable to restore session")) }, shouldSetOptimizationBatteryBanner = false, ) @@ -282,7 +285,7 @@ class DefaultPushHandlerTest { `test notification resolver failure`( notificationResolveResult = { requests: List -> Result.success( - requests.associateWith { Result.failure(ResolvingException("Unable to resolve event")) } + requests.associateWith { Result.failure(NotificationResolverException.UnknownError("Unable to resolve event")) } ) }, shouldSetOptimizationBatteryBanner = true, @@ -336,8 +339,6 @@ class DefaultPushHandlerTest { notifiableEventResult.assertions() .isCalledOnce() .with(value(A_USER_ID), any()) - onNotifiableEventsReceived.assertions() - .isNeverCalled() onPushReceivedResult.assertions() .isCalledOnce() .with(any(), value(AN_EVENT_ID), value(A_ROOM_ID), value(A_USER_ID), value(false), value(true), any()) @@ -662,6 +663,10 @@ class DefaultPushHandlerTest { pushHistoryService = pushHistoryService, resolverQueue = NotificationResolverQueue(notifiableEventResolver = FakeNotifiableEventResolver(notifiableEventsResult), backgroundScope), appCoroutineScope = backgroundScope, + fallbackNotificationFactory = FallbackNotificationFactory( + clock = FakeSystemClock(), + stringProvider = FakeStringProvider(), + ) ) } } From bc25bc48cdd3b9f558741506c6baeaa981e0ec2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 19:07:36 +0000 Subject: [PATCH 20/69] Update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.7.1-0.6.x-compat --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e882f11531..69511aeb03 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,7 +33,7 @@ accompanist = "0.37.3" test_core = "1.6.1" # Jetbrain -datetime = "0.7.0" +datetime = "0.7.1-0.6.x-compat" serialization_json = "1.9.0" #other From be04736406a3be2120659c329a2b697c84b33cd1 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 7 Jul 2025 21:29:13 +0200 Subject: [PATCH 21/69] fix ( room list) : rebuild with filteredSummaries to avoid bad state in the room list --- .../android/features/home/impl/datasource/RoomListDataSource.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt index dcda64ca9c..3ed7c383ba 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt @@ -119,7 +119,7 @@ class RoomListDataSource @Inject constructor( private suspend fun rebuildAllRoomSummaries() { lock.withLock { - roomListService.allRooms.summaries.replayCache.firstOrNull()?.let { roomSummaries -> + roomListService.allRooms.filteredSummaries.replayCache.firstOrNull()?.let { roomSummaries -> buildAndEmitAllRooms(roomSummaries, useCache = false) } } From 02d2b5fb16543b788203ed9bd6f9436de2fd589f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 10:13:26 +0200 Subject: [PATCH 22/69] No need for the compat version. --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 69511aeb03..8885c5f4e3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,7 +33,7 @@ accompanist = "0.37.3" test_core = "1.6.1" # Jetbrain -datetime = "0.7.1-0.6.x-compat" +datetime = "0.7.1" serialization_json = "1.9.0" #other From d27031ddb98e3c06620d2ddc2c08b4ced2530232 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 10:15:56 +0200 Subject: [PATCH 23/69] Update plugin ktlint to v13 (#4992) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e882f11531..46aa79de4c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -238,7 +238,7 @@ kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } anvil = { id = "dev.zacsweers.anvil", version.ref = "anvil" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } -ktlint = "org.jlleitschuh.gradle.ktlint:12.3.0" +ktlint = "org.jlleitschuh.gradle.ktlint:13.0.0" dependencygraph = "com.savvasdalkitsis.module-dependency-graph:0.12" dependencycheck = "org.owasp.dependencycheck:12.1.3" dependencyanalysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyAnalysis" } From 36ad2432e11b49061f3c6bcfffdfe46576b788ae Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Jul 2025 13:39:03 +0200 Subject: [PATCH 24/69] Use icon for Spaces and update label and navigation bar design and behavior. --- .../features/home/impl/HomeNavigationBarItem.kt | 14 +++++++------- .../element/android/features/home/impl/HomeView.kt | 14 +++++++++----- .../home/impl/src/main/res/values/localazy.xml | 2 ++ tools/localazy/config.json | 1 + 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeNavigationBarItem.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeNavigationBarItem.kt index 5254648f24..328661c834 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeNavigationBarItem.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeNavigationBarItem.kt @@ -16,18 +16,18 @@ enum class HomeNavigationBarItem( val labelRes: Int, ) { Chats( - labelRes = R.string.screen_roomlist_main_space_title + labelRes = R.string.screen_home_tab_chats ), Spaces( - // TODO Create a new entry in Localazy - labelRes = R.string.screen_roomlist_main_space_title + labelRes = R.string.screen_home_tab_spaces ); @Composable - fun icon() = when (this) { - Chats -> CompoundIcons.ChatSolid() - // TODO Spaces -> CompoundIcons.Workspace() - Spaces -> CompoundIcons.Code() + fun icon( + isSelected: Boolean, + ) = when (this) { + Chats -> if (isSelected) CompoundIcons.ChatSolid() else CompoundIcons.Chat() + Spaces -> if (isSelected) CompoundIcons.WorkspaceSolid() else CompoundIcons.Workspace() } companion object { diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt index fb5b9c9ae3..f80ee381c3 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt @@ -56,7 +56,9 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.NavigationBar +import io.element.android.libraries.designsystem.theme.components.NavigationBarIcon import io.element.android.libraries.designsystem.theme.components.NavigationBarItem +import io.element.android.libraries.designsystem.theme.components.NavigationBarText import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost @@ -192,19 +194,21 @@ private fun HomeScaffold( ) ) { HomeNavigationBarItem.entries.forEach { item -> + val isSelected = state.currentHomeNavigationBarItem == item NavigationBarItem( - selected = state.currentHomeNavigationBarItem == item, + selected = isSelected, onClick = { state.eventSink(HomeEvents.SelectHomeNavigationBarItem(item)) }, icon = { - Icon( - imageVector = item.icon(), - contentDescription = null + NavigationBarIcon( + imageVector = item.icon(isSelected), ) }, label = { - Text(stringResource(item.labelRes)) + NavigationBarText( + text = stringResource(item.labelRes), + ) } ) } diff --git a/features/home/impl/src/main/res/values/localazy.xml b/features/home/impl/src/main/res/values/localazy.xml index 58afb06591..f2d2e9c441 100644 --- a/features/home/impl/src/main/res/values/localazy.xml +++ b/features/home/impl/src/main/res/values/localazy.xml @@ -12,6 +12,8 @@ "Your key storage is out of sync" "To ensure you never miss an important call, please change your settings to allow full-screen notifications when your phone is locked." "Enhance your call experience" + "Chats" + "Spaces" "Are you sure you want to decline the invitation to join %1$s?" "Decline invite" "Are you sure you want to decline this private chat with %1$s?" diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 9d8d1f09b7..9044372ff0 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -164,6 +164,7 @@ { "name" : ":features:home:impl", "includeRegex" : [ + "screen\\.home\\..*", "screen_roomlist_.*", "screen\\.roomlist\\..*", "session_verification_banner_.*", From 782f24425743034ce18769e0901fadc9fcff5196 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Tue, 8 Jul 2025 08:41:16 +0000 Subject: [PATCH 25/69] Update screenshots --- .../snapshots/images/features.home.impl_HomeView_Day_3_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_4_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_3_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_4_en.png | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png index 5216e4a4fd..cccc8ba9dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc132c097ec62633e72292861654fa825f1962eacf8cdcea9553aa0475e2e2fd -size 68790 +oid sha256:cd2c43ded5f2b8ee72e56476a6f84105675b19cd35d0338ec316012b2e732e45 +size 69332 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png index f5e553861e..509ca1c24c 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6766c513026e13417d0371f196d69b712a900feeb1f814cda14ba34df188c73a -size 23921 +oid sha256:b42d23bee432b2713fbfebb00ccf5272625a0f57e4f74be2cedb6f1ee009fd4a +size 25675 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png index f51729e646..2598472959 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dde30b95371e46ad6d36dfd7c95e2a1e6968517d75b11d16512d5ac53337bb0 -size 65102 +oid sha256:d6e25cc2f51622fadf6b837a85aa6c929b49bf3f34900d739bc14c599627a280 +size 65604 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png index 35f9e77b2a..3292130289 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d6454d10e26c7c1ffb14931c38af49ce025a5c0853930c1cddf1f7b2b5e1967 -size 21562 +oid sha256:f4e5b98d04c66b0da10de45528cb4d953e778734a7de3d5b5e53985c4f496d74 +size 23429 From 2ebc0d44824b780dfb2128f281631bca5843a9b2 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 8 Jul 2025 11:38:09 +0200 Subject: [PATCH 26/69] misc (a11y) : mark MainActionButton icon as decorative --- .../designsystem/components/button/MainActionButton.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt index 537c1f639f..56a0a756c9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/button/MainActionButton.kt @@ -42,7 +42,6 @@ fun MainActionButton( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - contentDescription: String = title, ) { val ripple = ripple(bounded = false) val interactionSource = remember { MutableInteractionSource() } @@ -58,8 +57,8 @@ fun MainActionButton( horizontalAlignment = Alignment.CenterHorizontally, ) { Icon( + contentDescription = null, imageVector = imageVector, - contentDescription = contentDescription, tint = if (enabled) LocalContentColor.current else ElementTheme.colors.iconDisabled, ) Spacer(modifier = Modifier.height(14.dp)) From d5f267f698495ed866040b0591db093984a91771 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Jul 2025 16:01:07 +0000 Subject: [PATCH 27/69] Update dependency com.squareup.okhttp3:okhttp-bom to v5 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f8f166eca..b900e9ab99 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -131,7 +131,7 @@ accompanist_permission = { module = "com.google.accompanist:accompanist-permissi squareup_seismic = "com.squareup:seismic:1.0.3" # network -network_okhttp_bom = "com.squareup.okhttp3:okhttp-bom:4.12.0" +network_okhttp_bom = "com.squareup.okhttp3:okhttp-bom:5.0.0" network_okhttp_logging = { module = "com.squareup.okhttp3:logging-interceptor" } network_okhttp_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_okhttp = { module = "com.squareup.okhttp3:okhttp" } From a234f010a01b9addf068a29e701cc977d87cccdc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 4 Jul 2025 16:40:15 +0200 Subject: [PATCH 28/69] Fix compilation issue. --- .../rageshake/impl/reporter/BugReporterMultipartBody.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java b/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java index da198e431a..25b857aa9d 100755 --- a/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java +++ b/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java @@ -15,7 +15,6 @@ import java.util.UUID; import okhttp3.Headers; import okhttp3.MediaType; import okhttp3.RequestBody; -import okhttp3.internal.Util; import okio.Buffer; import okio.BufferedSink; import okio.ByteString; @@ -56,7 +55,7 @@ public class BugReporterMultipartBody extends RequestBody { private BugReporterMultipartBody(ByteString boundary, List parts) { mBoundary = boundary; mContentType = MediaType.parse(FORM + "; boundary=" + boundary.utf8()); - mParts = Util.toImmutableList(parts); + mParts = parts; } @Override From a448b417f746c4ef15d8d6b94278ff6cf28f4b9b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 11:10:45 +0200 Subject: [PATCH 29/69] Ensure big log does not crash the application --- .../libraries/network/interceptors/FormattedJsonHttpLogger.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/FormattedJsonHttpLogger.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/FormattedJsonHttpLogger.kt index 936662fb54..e2fad575f4 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/FormattedJsonHttpLogger.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/FormattedJsonHttpLogger.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.network.interceptors +import io.element.android.libraries.core.extensions.ellipsize import okhttp3.logging.HttpLoggingInterceptor import org.json.JSONArray import org.json.JSONException @@ -28,7 +29,7 @@ internal class FormattedJsonHttpLogger( */ @Synchronized override fun log(message: String) { - Timber.v(message) + Timber.v(message.ellipsize(200_000)) // Try to log formatted Json only if there is a chance that [message] contains Json. // It can be only the case if we log the bodies of Http requests. From 27381bf2e071d442336a936934649abf403396f2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 10:45:17 +0200 Subject: [PATCH 30/69] Convert BugReporterMultipartBody to Kotlin, and update using latest version of okhttp3.MultipartBody. Adapt to Element code --- .../reporter/BugReporterMultipartBody.java | 289 ------------ .../impl/reporter/BugReporterMultipartBody.kt | 420 ++++++++++++++++++ .../BugReporterMultipartBodyListener.kt | 18 + 3 files changed, 438 insertions(+), 289 deletions(-) delete mode 100755 features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java create mode 100755 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt create mode 100644 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBodyListener.kt diff --git a/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java b/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java deleted file mode 100755 index 25b857aa9d..0000000000 --- a/features/rageshake/impl/src/main/java/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.features.rageshake.impl.reporter; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import okhttp3.Headers; -import okhttp3.MediaType; -import okhttp3.RequestBody; -import okio.Buffer; -import okio.BufferedSink; -import okio.ByteString; - -// simplified version of MultipartBody (OkHttp 3.6.0) -public class BugReporterMultipartBody extends RequestBody { - - /** - * Listener - */ - public interface WriteListener { - /** - * Upload listener - * - * @param totalWritten total written bytes - * @param contentLength content length - */ - void onWrite(long totalWritten, long contentLength); - } - - private static final MediaType FORM = MediaType.parse("multipart/form-data"); - - private static final byte[] COLONSPACE = {':', ' '}; - private static final byte[] CRLF = {'\r', '\n'}; - private static final byte[] DASHDASH = {'-', '-'}; - - private final ByteString mBoundary; - private final MediaType mContentType; - private final List mParts; - private long mContentLength = -1L; - - // listener - private WriteListener mWriteListener; - - // - private List mContentLengthSize = null; - - private BugReporterMultipartBody(ByteString boundary, List parts) { - mBoundary = boundary; - mContentType = MediaType.parse(FORM + "; boundary=" + boundary.utf8()); - mParts = parts; - } - - @Override - public MediaType contentType() { - return mContentType; - } - - @Override - public long contentLength() throws IOException { - long result = mContentLength; - if (result != -1L) return result; - return mContentLength = writeOrCountBytes(null, true); - } - - @Override - public void writeTo(BufferedSink sink) throws IOException { - writeOrCountBytes(sink, false); - } - - /** - * Set the listener - * - * @param listener the - */ - public void setWriteListener(WriteListener listener) { - mWriteListener = listener; - } - - /** - * Warn the listener that some bytes have been written - * - * @param totalWrittenBytes the total written bytes - */ - private void onWrite(long totalWrittenBytes) { - if ((null != mWriteListener) && (mContentLength > 0)) { - mWriteListener.onWrite(totalWrittenBytes, mContentLength); - } - } - - /** - * Either writes this request to {@code sink} or measures its content length. We have one method - * do double-duty to make sure the counting and content are consistent, particularly when it comes - * to awkward operations like measuring the encoded length of header strings, or the - * length-in-digits of an encoded integer. - */ - private long writeOrCountBytes(BufferedSink sink, boolean countBytes) throws IOException { - long byteCount = 0L; - - Buffer byteCountBuffer = null; - if (countBytes) { - sink = byteCountBuffer = new Buffer(); - mContentLengthSize = new ArrayList<>(); - } - - for (int p = 0, partCount = mParts.size(); p < partCount; p++) { - Part part = mParts.get(p); - Headers headers = part.headers; - RequestBody body = part.body; - - sink.write(DASHDASH); - sink.write(mBoundary); - sink.write(CRLF); - - if (headers != null) { - for (int h = 0, headerCount = headers.size(); h < headerCount; h++) { - sink.writeUtf8(headers.name(h)) - .write(COLONSPACE) - .writeUtf8(headers.value(h)) - .write(CRLF); - } - } - - MediaType contentType = body.contentType(); - if (contentType != null) { - sink.writeUtf8("Content-Type: ") - .writeUtf8(contentType.toString()) - .write(CRLF); - } - - int contentLength = (int) body.contentLength(); - if (contentLength != -1) { - sink.writeUtf8("Content-Length: ") - .writeUtf8(contentLength + "") - .write(CRLF); - } else if (countBytes) { - // We can't measure the body's size without the sizes of its components. - byteCountBuffer.clear(); - return -1L; - } - - sink.write(CRLF); - - if (countBytes) { - byteCount += contentLength; - mContentLengthSize.add(byteCount); - } else { - body.writeTo(sink); - - // warn the listener of upload progress - // sink.buffer().size() does not give the right value - // assume that some data are popped - if ((null != mContentLengthSize) && (p < mContentLengthSize.size())) { - onWrite(mContentLengthSize.get(p)); - } - } - sink.write(CRLF); - } - - sink.write(DASHDASH); - sink.write(mBoundary); - sink.write(DASHDASH); - sink.write(CRLF); - - if (countBytes) { - byteCount += byteCountBuffer.size(); - byteCountBuffer.clear(); - } - - return byteCount; - } - - private static void appendQuotedString(StringBuilder target, String key) { - target.append('"'); - for (int i = 0, len = key.length(); i < len; i++) { - char ch = key.charAt(i); - switch (ch) { - case '\n': - target.append("%0A"); - break; - case '\r': - target.append("%0D"); - break; - case '"': - target.append("%22"); - break; - default: - target.append(ch); - break; - } - } - target.append('"'); - } - - public static final class Part { - public static Part create(Headers headers, RequestBody body) { - if (body == null) { - throw new NullPointerException("body == null"); - } - if (headers != null && headers.get("Content-Type") != null) { - throw new IllegalArgumentException("Unexpected header: Content-Type"); - } - if (headers != null && headers.get("Content-Length") != null) { - throw new IllegalArgumentException("Unexpected header: Content-Length"); - } - return new Part(headers, body); - } - - public static Part createFormData(String name, String value) { - return createFormData(name, null, RequestBody.create(value, null)); - } - - public static Part createFormData(String name, String filename, RequestBody body) { - if (name == null) { - throw new NullPointerException("name == null"); - } - StringBuilder disposition = new StringBuilder("form-data; name="); - appendQuotedString(disposition, name); - - if (filename != null) { - disposition.append("; filename="); - appendQuotedString(disposition, filename); - } - - return create(Headers.of("Content-Disposition", disposition.toString()), body); - } - - final Headers headers; - final RequestBody body; - - private Part(Headers headers, RequestBody body) { - this.headers = headers; - this.body = body; - } - } - - public static final class Builder { - private final ByteString boundary; - private final List parts = new ArrayList<>(); - - public Builder() { - this(UUID.randomUUID().toString()); - } - - public Builder(String boundary) { - this.boundary = ByteString.encodeUtf8(boundary); - } - - /** - * Add a form data part to the body. - */ - public Builder addFormDataPart(String name, String value) { - return addPart(Part.createFormData(name, value)); - } - - /** - * Add a form data part to the body. - */ - public Builder addFormDataPart(String name, String filename, RequestBody body) { - return addPart(Part.createFormData(name, filename, body)); - } - - /** - * Add a part to the body. - */ - public Builder addPart(Part part) { - if (part == null) throw new NullPointerException("part == null"); - parts.add(part); - return this; - } - - /** - * Assemble the specified parts into a request body. - */ - public BugReporterMultipartBody build() { - if (parts.isEmpty()) { - throw new IllegalStateException("Multipart body must have at least one part."); - } - return new BugReporterMultipartBody(boundary, parts); - } - } -} diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt new file mode 100755 index 0000000000..29a8e4bb27 --- /dev/null +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt @@ -0,0 +1,420 @@ +/* + * Copyright (C) 2014 Square, Inc. + * Copyright 2023, 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ +@file:Suppress( + "unused", + "KDocUnresolvedReference", + "SpellCheckingInspection", +) + +package io.element.android.features.rageshake.impl.reporter + +import kotlinx.collections.immutable.toImmutableList +import okhttp3.Headers +import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.RequestBody +import okio.Buffer +import okio.BufferedSink +import okio.ByteString +import okio.ByteString.Companion.encodeUtf8 +import java.io.IOException +import java.util.UUID + +/** + * Copy of [okhttp3.MultipartBody] with addition of a listener to track progress (Last imported from OkHttp 5.0.0). + * Patches are surrounded by ELEMENT-START and ELEMENT-END + */ + +/** + * An [RFC 2387][rfc_2387]-compliant request body. + * + * [rfc_2387]: http://www.ietf.org/rfc/rfc2387.txt + */ +@Suppress("NAME_SHADOWING") +class BugReporterMultipartBody internal constructor( + private val boundaryByteString: ByteString, + @get:JvmName("type") val type: MediaType, + @get:JvmName("parts") val parts: List, +) : RequestBody() { + // ELEMENT-START + private var listener: BugReporterMultipartBodyListener? = null + + private fun onWrite(totalWrittenBytes: Long) { + listener + ?.takeIf { contentLength > 0 } + ?.onWrite(totalWrittenBytes, contentLength) + } + + private val contentLengthSize = mutableListOf() + + fun setWriteListener(listener: BugReporterMultipartBodyListener?) { + this.listener = listener + } + // ELEMENT-END + + private val contentType: MediaType = "$type; boundary=$boundary".toMediaType() + private var contentLength = -1L + + @get:JvmName("boundary") + val boundary: String + get() = boundaryByteString.utf8() + + /** The number of parts in this multipart body. */ + @get:JvmName("size") + val size: Int + get() = parts.size + + fun part(index: Int): Part = parts[index] + + override fun isOneShot(): Boolean = parts.any { it.body.isOneShot() } + + /** A combination of [type] and [boundaryByteString]. */ + override fun contentType(): MediaType = contentType + + @JvmName("-deprecated_type") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "type"), + level = DeprecationLevel.ERROR, + ) + fun type(): MediaType = type + + @JvmName("-deprecated_boundary") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "boundary"), + level = DeprecationLevel.ERROR, + ) + fun boundary(): String = boundary + + @JvmName("-deprecated_size") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "size"), + level = DeprecationLevel.ERROR, + ) + fun size(): Int = size + + @JvmName("-deprecated_parts") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "parts"), + level = DeprecationLevel.ERROR, + ) + fun parts(): List = parts + + @Throws(IOException::class) + override fun contentLength(): Long { + var result = contentLength + if (result == -1L) { + result = writeOrCountBytes(null, true) + contentLength = result + } + return result + } + + @Throws(IOException::class) + override fun writeTo(sink: BufferedSink) { + writeOrCountBytes(sink, false) + } + + /** + * Either writes this request to [sink] or measures its content length. We have one method do + * double-duty to make sure the counting and content are consistent, particularly when it comes + * to awkward operations like measuring the encoded length of header strings, or the + * length-in-digits of an encoded integer. + */ + @Throws(IOException::class) + private fun writeOrCountBytes( + sink: BufferedSink?, + countBytes: Boolean, + ): Long { + var sink = sink + var byteCount = 0L + + var byteCountBuffer: Buffer? = null + if (countBytes) { + byteCountBuffer = Buffer() + sink = byteCountBuffer + // ELEMENT-START + contentLengthSize.clear() + // ELEMENT-END + } + + for (p in 0 until parts.size) { + val part = parts[p] + val headers = part.headers + val body = part.body + + sink!!.write(DASHDASH) + sink.write(boundaryByteString) + sink.write(CRLF) + + if (headers != null) { + for (h in 0 until headers.size) { + sink + .writeUtf8(headers.name(h)) + .write(COLONSPACE) + .writeUtf8(headers.value(h)) + .write(CRLF) + } + } + + val contentType = body.contentType() + if (contentType != null) { + sink + .writeUtf8("Content-Type: ") + .writeUtf8(contentType.toString()) + .write(CRLF) + } + + // We can't measure the body's size without the sizes of its components. + val contentLength = body.contentLength() + if (contentLength == -1L && countBytes) { + byteCountBuffer!!.clear() + return -1L + } + + sink.write(CRLF) + + if (countBytes) { + byteCount += contentLength + // ELEMENT-START + contentLengthSize.add(byteCount) + // ELEMENT-END + } else { + body.writeTo(sink) + // ELEMENT-START + // warn the listener of upload progress + // sink.buffer().size() does not give the right value + // assume that some data are popped + contentLengthSize.getOrNull(p)?.let { writtenByte -> + onWrite(writtenByte) + } + // ELEMENT-END + } + + sink.write(CRLF) + } + + sink!!.write(DASHDASH) + sink.write(boundaryByteString) + sink.write(DASHDASH) + sink.write(CRLF) + + if (countBytes) { + byteCount += byteCountBuffer!!.size + byteCountBuffer.clear() + } + + return byteCount + } + + class Part private constructor( + @get:JvmName("headers") val headers: Headers?, + @get:JvmName("body") val body: RequestBody, + ) { + @JvmName("-deprecated_headers") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "headers"), + level = DeprecationLevel.ERROR, + ) + fun headers(): Headers? = headers + + @JvmName("-deprecated_body") + @Deprecated( + message = "moved to val", + replaceWith = ReplaceWith(expression = "body"), + level = DeprecationLevel.ERROR, + ) + fun body(): RequestBody = body + + companion object { + @JvmStatic + fun create(body: RequestBody): Part = create(null, body) + + @JvmStatic + fun create( + headers: Headers?, + body: RequestBody, + ): Part { + require(headers?.get("Content-Type") == null) { "Unexpected header: Content-Type" } + require(headers?.get("Content-Length") == null) { "Unexpected header: Content-Length" } + return Part(headers, body) + } + + @JvmStatic + fun createFormData( + name: String, + value: String, + ): Part = createFormData(name, null, value.toRequestBody()) + + @JvmStatic + fun createFormData( + name: String, + filename: String?, + body: RequestBody, + ): Part { + val disposition = + buildString { + append("form-data; name=") + appendQuotedString(name) + + if (filename != null) { + append("; filename=") + appendQuotedString(filename) + } + } + + val headers = + Headers + .Builder() + .addUnsafeNonAscii("Content-Disposition", disposition) + .build() + + return create(headers, body) + } + } + } + + class Builder + @JvmOverloads + constructor( + boundary: String = UUID.randomUUID().toString(), + ) { + private val boundary: ByteString = boundary.encodeUtf8() + + // ELEMENT-START + // Element: use FORM as default type + private var type = FORM + // ELEMENT-END + private val parts = mutableListOf() + + /** + * Set the MIME type. Expected values for `type` are [MIXED] (the default), [ALTERNATIVE], + * [DIGEST], [PARALLEL] and [FORM]. + */ + fun setType(type: MediaType) = + apply { + require(type.type == "multipart") { "multipart != $type" } + this.type = type + } + + /** Add a part to the body. */ + fun addPart(body: RequestBody) = + apply { + addPart(Part.create(body)) + } + + /** Add a part to the body. */ + fun addPart( + headers: Headers?, + body: RequestBody, + ) = apply { + addPart(Part.create(headers, body)) + } + + /** Add a form data part to the body. */ + fun addFormDataPart( + name: String, + value: String, + ) = apply { + addPart(Part.createFormData(name, value)) + } + + /** Add a form data part to the body. */ + fun addFormDataPart( + name: String, + filename: String?, + body: RequestBody, + ) = apply { + addPart(Part.createFormData(name, filename, body)) + } + + /** Add a part to the body. */ + fun addPart(part: Part) = + apply { + parts += part + } + + /** Assemble the specified parts into a request body. */ + fun build(): BugReporterMultipartBody { + check(parts.isNotEmpty()) { "Multipart body must have at least one part." } + return BugReporterMultipartBody(boundary, type, parts.toImmutableList()) + } + } + + companion object { + /** + * The "mixed" subtype of "multipart" is intended for use when the body parts are independent + * and need to be bundled in a particular order. Any "multipart" subtypes that an implementation + * does not recognize must be treated as being of subtype "mixed". + */ + @JvmField + val MIXED = "multipart/mixed".toMediaType() + + /** + * The "multipart/alternative" type is syntactically identical to "multipart/mixed", but the + * semantics are different. In particular, each of the body parts is an "alternative" version of + * the same information. + */ + @JvmField + val ALTERNATIVE = "multipart/alternative".toMediaType() + + /** + * This type is syntactically identical to "multipart/mixed", but the semantics are different. + * In particular, in a digest, the default `Content-Type` value for a body part is changed from + * "text/plain" to "message/rfc822". + */ + @JvmField + val DIGEST = "multipart/digest".toMediaType() + + /** + * This type is syntactically identical to "multipart/mixed", but the semantics are different. + * In particular, in a parallel entity, the order of body parts is not significant. + */ + @JvmField + val PARALLEL = "multipart/parallel".toMediaType() + + /** + * The media-type multipart/form-data follows the rules of all multipart MIME data streams as + * outlined in RFC 2046. In forms, there are a series of fields to be supplied by the user who + * fills out the form. Each field has a name. Within a given form, the names are unique. + */ + @JvmField + val FORM = "multipart/form-data".toMediaType() + + private val COLONSPACE = byteArrayOf(':'.code.toByte(), ' '.code.toByte()) + private val CRLF = byteArrayOf('\r'.code.toByte(), '\n'.code.toByte()) + private val DASHDASH = byteArrayOf('-'.code.toByte(), '-'.code.toByte()) + + /** + * Appends a quoted-string to a StringBuilder. + * + * RFC 2388 is rather vague about how one should escape special characters in form-data + * parameters, and as it turns out Firefox and Chrome actually do rather different things, and + * both say in their comments that they're not really sure what the right approach is. We go + * with Chrome's behavior (which also experimentally seems to match what IE does), but if you + * actually want to have a good chance of things working, please avoid double-quotes, newlines, + * percent signs, and the like in your field names. + */ + internal fun StringBuilder.appendQuotedString(key: String) { + append('"') + for (i in 0 until key.length) { + when (val ch = key[i]) { + '\n' -> append("%0A") + '\r' -> append("%0D") + '"' -> append("%22") + else -> append(ch) + } + } + append('"') + } + } +} diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBodyListener.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBodyListener.kt new file mode 100644 index 0000000000..f6fe406666 --- /dev/null +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBodyListener.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.features.rageshake.impl.reporter + +fun interface BugReporterMultipartBodyListener { + /** + * Upload listener. + * + * @param totalWritten total written bytes + * @param contentLength content length + */ + fun onWrite(totalWritten: Long, contentLength: Long) +} From d560e898a3628ce92704529302b340fb1aa64590 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 12:41:45 +0200 Subject: [PATCH 31/69] Fix quality issue. --- .../rageshake/impl/reporter/BugReporterMultipartBody.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt index 29a8e4bb27..0fe0bfdc86 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReporterMultipartBody.kt @@ -28,9 +28,7 @@ import java.util.UUID /** * Copy of [okhttp3.MultipartBody] with addition of a listener to track progress (Last imported from OkHttp 5.0.0). * Patches are surrounded by ELEMENT-START and ELEMENT-END - */ - -/** + * * An [RFC 2387][rfc_2387]-compliant request body. * * [rfc_2387]: http://www.ietf.org/rfc/rfc2387.txt @@ -294,6 +292,7 @@ class BugReporterMultipartBody internal constructor( // Element: use FORM as default type private var type = FORM // ELEMENT-END + private val parts = mutableListOf() /** From 0201575f3ec077b181f8c7584a45779c24c7bcfa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:19:02 +0000 Subject: [PATCH 32/69] Update dependency io.sentry:sentry-android to v8.17.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b900e9ab99..96914bccd3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -197,7 +197,7 @@ haze_materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = # Analytics posthog = "com.posthog:posthog-android:3.19.0" -sentry = "io.sentry:sentry-android:8.16.0" +sentry = "io.sentry:sentry-android:8.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" From f09995965bca684170f3c398533a9988dc1c1826 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:13:54 +0200 Subject: [PATCH 33/69] Update dependency com.squareup.okhttp3:okhttp-bom to v5.1.0 (#4997) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 96914bccd3..a61b6472bc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -131,7 +131,7 @@ accompanist_permission = { module = "com.google.accompanist:accompanist-permissi squareup_seismic = "com.squareup:seismic:1.0.3" # network -network_okhttp_bom = "com.squareup.okhttp3:okhttp-bom:5.0.0" +network_okhttp_bom = "com.squareup.okhttp3:okhttp-bom:5.1.0" network_okhttp_logging = { module = "com.squareup.okhttp3:logging-interceptor" } network_okhttp_okhttp = { module = "com.squareup.okhttp3:okhttp" } network_okhttp = { module = "com.squareup.okhttp3:okhttp" } From 1892d2c76bd9ad9304783ec2bd575733cb3061a2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 17:43:30 +0200 Subject: [PATCH 34/69] Remove unused BigCheckmark --- .../designsystem/components/BigCheckmark.kt | 67 ------------------- .../designsystem/theme/ColorAliases.kt | 5 -- 2 files changed, 72 deletions(-) delete mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/BigCheckmark.kt diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/BigCheckmark.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/BigCheckmark.kt deleted file mode 100644 index b51b824501..0000000000 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/BigCheckmark.kt +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.designsystem.components - -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -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.unit.dp -import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.CompoundIcons -import io.element.android.libraries.designsystem.preview.ElementPreview -import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.bigCheckmarkBorderColor -import io.element.android.libraries.designsystem.theme.components.Icon -import io.element.android.libraries.designsystem.theme.components.Surface -import io.element.android.libraries.ui.strings.CommonStrings - -/** - * Compound component that displays a big checkmark centered in a rounded square. - * - * @param modifier the modifier to apply to this layout - */ -@Composable -fun BigCheckmark( - modifier: Modifier = Modifier, -) { - Surface( - modifier = modifier.size(120.dp), - shape = RoundedCornerShape(14.dp), - color = ElementTheme.colors.bgCanvasDefault, - border = BorderStroke(1.dp, ElementTheme.colors.bigCheckmarkBorderColor), - shadowElevation = 4.dp, - ) { - Box(contentAlignment = Alignment.Center) { - Icon( - modifier = Modifier.size(72.dp), - tint = ElementTheme.colors.iconSuccessPrimary, - imageVector = CompoundIcons.CheckCircleSolid(), - contentDescription = stringResource(CommonStrings.common_success) - ) - } - } -} - -@PreviewsDayNight -@Composable -internal fun BigCheckmarkPreview() { - ElementPreview { - Box( - modifier = Modifier.padding(10.dp), - contentAlignment = Alignment.Center, - ) { - BigCheckmark() - } - } -} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 5dd3d130bc..59831e99f2 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -66,10 +66,6 @@ val SemanticColors.temporaryColorBgSpecial val SemanticColors.pinDigitBg get() = if (isLight) LightColorTokens.colorGray300 else DarkColorTokens.colorGray400 -@OptIn(CoreColorToken::class) -val SemanticColors.bigCheckmarkBorderColor - get() = if (isLight) LightColorTokens.colorGray400 else DarkColorTokens.colorGray400 - @OptIn(CoreColorToken::class) val SemanticColors.pinnedMessageBannerIndicator get() = if (isLight) LightColorTokens.colorAlphaGray600 else DarkColorTokens.colorAlphaGray600 @@ -94,7 +90,6 @@ internal fun ColorAliasesPreview() = ElementPreview { "messageFromOtherBackground" to ElementTheme.colors.messageFromOtherBackground, "progressIndicatorTrackColor" to ElementTheme.colors.progressIndicatorTrackColor, "temporaryColorBgSpecial" to ElementTheme.colors.temporaryColorBgSpecial, - "bigCheckmarkBorderColor" to ElementTheme.colors.bigCheckmarkBorderColor, ) ) } From f8e25381f44462023838f536664ce440de3ec4db Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 17:46:12 +0200 Subject: [PATCH 35/69] Change fun to val and extend SemanticColors --- .../home/impl/components/RoomSummaryRow.kt | 10 +++++----- .../designsystem/theme/ColorAliases.kt | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt index e5a85a7442..b37e9ea223 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomSummaryRow.kt @@ -219,7 +219,7 @@ private fun NameAndTimestampRow( style = ElementTheme.typography.fontBodyLgMedium, text = name ?: stringResource(id = CommonStrings.common_no_room_name), fontStyle = FontStyle.Italic.takeIf { name == null }, - color = ElementTheme.roomListRoomName(), + color = ElementTheme.colors.roomListRoomName, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -230,7 +230,7 @@ private fun NameAndTimestampRow( color = if (isHighlighted) { ElementTheme.colors.unreadIndicator } else { - ElementTheme.roomListRoomMessageDate() + ElementTheme.colors.roomListRoomMessageDate }, ) } @@ -253,7 +253,7 @@ private fun InviteSubtitle( maxLines = 1, overflow = TextOverflow.Ellipsis, style = ElementTheme.typography.fontBodyMdRegular, - color = ElementTheme.roomListRoomMessage(), + color = ElementTheme.colors.roomListRoomMessage, modifier = modifier, ) } @@ -277,7 +277,7 @@ private fun MessagePreviewAndIndicatorRow( Text( modifier = Modifier.weight(1f), text = annotatedMessagePreview, - color = ElementTheme.roomListRoomMessage(), + color = ElementTheme.colors.roomListRoomMessage, style = ElementTheme.typography.fontBodyMdRegular, minLines = 2, maxLines = 2, @@ -325,7 +325,7 @@ private fun InviteNameAndIndicatorRow( style = ElementTheme.typography.fontBodyLgMedium, text = name ?: stringResource(id = CommonStrings.common_no_room_name), fontStyle = FontStyle.Italic.takeIf { name == null }, - color = ElementTheme.roomListRoomName(), + color = ElementTheme.colors.roomListRoomName, maxLines = 1, overflow = TextOverflow.Ellipsis ) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt index 59831e99f2..8f6224eca9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/ColorAliases.kt @@ -22,14 +22,14 @@ import kotlinx.collections.immutable.persistentMapOf /** * Room list. */ -@Composable -fun ElementTheme.roomListRoomName() = colors.textPrimary +val SemanticColors.roomListRoomName + get() = textPrimary -@Composable -fun ElementTheme.roomListRoomMessage() = colors.textSecondary +val SemanticColors.roomListRoomMessage + get() = textSecondary -@Composable -fun ElementTheme.roomListRoomMessageDate() = colors.textSecondary +val SemanticColors.roomListRoomMessageDate + get() = textSecondary val SemanticColors.unreadIndicator get() = iconAccentTertiary @@ -81,9 +81,9 @@ internal fun ColorAliasesPreview() = ElementPreview { backgroundColor = Color.Black, foregroundColor = Color.White, colors = persistentMapOf( - "roomListRoomName" to ElementTheme.roomListRoomName(), - "roomListRoomMessage" to ElementTheme.roomListRoomMessage(), - "roomListRoomMessageDate" to ElementTheme.roomListRoomMessageDate(), + "roomListRoomName" to ElementTheme.colors.roomListRoomName, + "roomListRoomMessage" to ElementTheme.colors.roomListRoomMessage, + "roomListRoomMessageDate" to ElementTheme.colors.roomListRoomMessageDate, "unreadIndicator" to ElementTheme.colors.unreadIndicator, "placeholderBackground" to ElementTheme.colors.placeholderBackground, "messageFromMeBackground" to ElementTheme.colors.messageFromMeBackground, From dc83abaec1a1d189f480e13626b25bcf70643f7c Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 8 Jul 2025 18:26:18 +0200 Subject: [PATCH 36/69] Make `ContentAvoidingLayoutData` an immutable data class (#4999) --- .../timeline/components/layout/ContentAvoidingLayout.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/layout/ContentAvoidingLayout.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/layout/ContentAvoidingLayout.kt index d50c6d72ce..36f3204f89 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/layout/ContentAvoidingLayout.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/layout/ContentAvoidingLayout.kt @@ -112,12 +112,11 @@ fun ContentAvoidingLayout( * @param nonOverlappingContentWidth The width of the part of the content that can't overlap with the timestamp. * @param nonOverlappingContentHeight The height of the part of the content that can't overlap with the timestamp. */ -@Suppress("DataClassShouldBeImmutable") data class ContentAvoidingLayoutData( - var contentWidth: Int = 0, - var contentHeight: Int = 0, - var nonOverlappingContentWidth: Int = contentWidth, - var nonOverlappingContentHeight: Int = contentHeight, + val contentWidth: Int = 0, + val contentHeight: Int = 0, + val nonOverlappingContentWidth: Int = contentWidth, + val nonOverlappingContentHeight: Int = contentHeight, ) /** From 4c42b3c013d8724b59e00ccf2ec9619bd3f92f2c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 18:45:36 +0200 Subject: [PATCH 37/69] Add preview for mentions in the context of the timeline. --- .../textcomposer/mentions/MentionSpanTheme.kt | 124 +++++++++++++++++- .../tests/konsist/KonsistPreviewTest.kt | 1 + 2 files changed, 124 insertions(+), 1 deletion(-) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt index 323c1f0a9a..4edbb8bf38 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt @@ -13,11 +13,17 @@ import android.net.Uri import android.text.Spanned import android.view.ViewGroup import android.widget.TextView +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection @@ -28,6 +34,9 @@ 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.text.rememberTypeface +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.designsystem.theme.messageFromMeBackground +import io.element.android.libraries.designsystem.theme.messageFromOtherBackground import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.MatrixClient @@ -48,7 +57,8 @@ import javax.inject.Inject @Stable @SingleIn(SessionScope::class) class MentionSpanTheme(val currentUserId: UserId) { - @Inject constructor(matrixClient: MatrixClient) : this(matrixClient.sessionId) + @Inject + constructor(matrixClient: MatrixClient) : this(matrixClient.sessionId) internal var currentUserTextColor: Int = 0 internal var currentUserBackgroundColor: Int = Color.WHITE @@ -162,3 +172,115 @@ internal fun MentionSpanThemePreview() { }) } } + +@Composable +private fun MentionSpanThemeInTimelineContent( + bgColor: Int, + modifier: Modifier = Modifier, +) { + val mentionSpanTheme = remember { MentionSpanTheme(UserId("@me:matrix.org")) } + val provider = remember { + MentionSpanProvider( + mentionSpanTheme = mentionSpanTheme, + mentionSpanFormatter = object : MentionSpanFormatter { + override fun formatDisplayText(mentionType: MentionType): CharSequence { + return when (mentionType) { + is MentionType.User -> mentionType.userId.value + else -> throw AssertionError("Unexpected value $mentionType") + } + } + }, + permalinkParser = object : PermalinkParser { + override fun parse(uriString: String): PermalinkData { + return when (uriString) { + "https://matrix.to/#/@me:matrix.org" -> PermalinkData.UserLink(UserId("@me:matrix.org")) + "https://matrix.to/#/@other:matrix.org" -> PermalinkData.UserLink(UserId("@other:matrix.org")) + else -> throw AssertionError("Unexpected value $uriString") + } + } + }, + ) + } + + val textColor = ElementTheme.colors.textPrimary.toArgb() + fun mentionSpanMe() = provider.getMentionSpanFor("mention", "https://matrix.to/#/@me:matrix.org") + fun mentionSpanOther() = provider.getMentionSpanFor("mention", "https://matrix.to/#/@other:matrix.org") + mentionSpanTheme.updateStyles() + + AndroidView( + modifier = modifier, + factory = { context -> + TextView(context).apply { + includeFontPadding = false + layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + text = buildSpannedString { + append("Hello ") + append("@mention", mentionSpanMe(), 0) + append(" ") + append("@mention", mentionSpanOther(), 0) + } + setTextColor(textColor) + setBackgroundColor(bgColor) + } + } + ) +} + +@PreviewsDayNight +@Composable +internal fun MentionSpanThemeInTimelinePreview() = ElementPreview { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + // Message from me + Text( + text = "Message from me", + style = ElementTheme.typography.fontBodySmMedium, + ) + ElementTheme.colors.messageFromMeBackground.let { color -> + MentionSpanThemeInTimelineContent( + modifier = Modifier + .padding(start = 60.dp, end = 8.dp) + .background( + color = color, + shape = RoundedCornerShape(12.dp), + ) + .padding(8.dp), + bgColor = color.toArgb() + ) + } + // Message from other + ElementTheme.colors.messageFromOtherBackground.let { color -> + Text( + text = "Message from other", + style = ElementTheme.typography.fontBodySmMedium, + ) + MentionSpanThemeInTimelineContent( + modifier = Modifier + .padding(start = 8.dp, end = 60.dp) + .padding(4.dp) + .background( + color = color, + shape = RoundedCornerShape(12.dp) + ) + .padding(8.dp), + bgColor = color.toArgb() + ) + } + // Composer + ElementTheme.colors.bgSubtleSecondary.let { color -> + Text( + text = "Composer", + style = ElementTheme.typography.fontBodySmMedium, + ) + MentionSpanThemeInTimelineContent( + modifier = Modifier + .padding(start = 4.dp, end = 4.dp) + .background(color) + .padding(8.dp), + bgColor = color.toArgb() + ) + } + } +} diff --git a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt index 5b0454040c..a45791a6d0 100644 --- a/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt +++ b/tests/konsist/src/test/kotlin/io/element/android/tests/konsist/KonsistPreviewTest.kt @@ -73,6 +73,7 @@ class KonsistPreviewTest { "MatrixBadgeAtomNegativePreview", "MatrixBadgeAtomNeutralPreview", "MatrixBadgeAtomPositivePreview", + "MentionSpanThemeInTimelinePreview", "MessageComposerViewVoicePreview", "MessagesReactionButtonAddPreview", "MessagesReactionButtonExtraPreview", From 96b2c7338f887b6c56d02ee6f6927bc2b5ce4b07 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Tue, 8 Jul 2025 19:25:52 +0000 Subject: [PATCH 38/69] Update screenshots --- ...ibraries.designsystem.components_BigCheckmark_Day_0_en.png | 3 --- ...raries.designsystem.components_BigCheckmark_Night_0_en.png | 3 --- .../libraries.designsystem.theme_ColorAliases_Day_0_en.png | 4 ++-- .../libraries.designsystem.theme_ColorAliases_Night_0_en.png | 4 ++-- ...tcomposer.mentions_MentionSpanThemeInTimeline_Day_0_en.png | 3 +++ ...omposer.mentions_MentionSpanThemeInTimeline_Night_0_en.png | 3 +++ 6 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Day_0_en.png delete mode 100644 tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Night_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Day_0_en.png create mode 100644 tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Night_0_en.png diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Day_0_en.png deleted file mode 100644 index 7c3b23587d..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Day_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6940c5b62364ff8a41b9600af5de950888d4050642a175d0bb13867e332fd360 -size 8573 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Night_0_en.png deleted file mode 100644 index 53be504da6..0000000000 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.components_BigCheckmark_Night_0_en.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e71365efdbcbc0f0ad59e4be7d806a46ca72469f6b7f73a7c5d698405f637da -size 7217 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png index 9b2b57419c..0ac1bcc8b3 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:447a51a65a22b90ddbc568cf031e0d83282cb0062a42aba274c592faf9148e70 -size 56876 +oid sha256:2c99fdb4105bfec8eb22555171eeb1ae99ad8c43c7f2d402b2ab2bc509776484 +size 51537 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png index 7bc0ae6966..87bf598827 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.theme_ColorAliases_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74f903d6fbe6a635dede1492ffc8a571b71a9645adfa59a648553c6d1716a1c0 -size 56228 +oid sha256:7b0ee98accb2dbc445dbaf807c4ecb767b1d343c8b8388b37d6c13686cbaf09f +size 51039 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Day_0_en.png new file mode 100644 index 0000000000..e2c3aa9f42 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Day_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dbc2bbedaada6afcdcb121090084cf6ce59adb52b8c6ea2ee21a4177797cfe2 +size 35562 diff --git a/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Night_0_en.png new file mode 100644 index 0000000000..34f913695a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/libraries.textcomposer.mentions_MentionSpanThemeInTimeline_Night_0_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d6fe770605c0f9b2b9500692cd7725c1a0992e08eba2ae8700d05d9e171b05f +size 34490 From c1214c8551b9c40cb517827089ccffe71bc6e6ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 00:05:07 +0000 Subject: [PATCH 39/69] Update dependency org.maplibre.gl:android-sdk to v11.12.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a61b6472bc..18378a1499 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -187,7 +187,7 @@ vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" } statemachine = "com.freeletics.flowredux:compose:1.2.2" -maplibre = "org.maplibre.gl:android-sdk:11.11.0" +maplibre = "org.maplibre.gl:android-sdk:11.12.0" 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.2.0" From 632de23b1000983db099c5d3c1b9ddd7e912ed66 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 16:28:16 +0200 Subject: [PATCH 40/69] Enable blur effect on the top bar too. --- .../android/features/home/impl/HomeView.kt | 24 ++++++++++++------- .../impl/components/RoomListContentView.kt | 15 ++++++------ .../designsystem/modifiers/Gradient.kt | 1 - 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt index f80ee381c3..aca132f56a 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt @@ -12,6 +12,7 @@ package io.element.android.features.home.impl import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.consumeWindowInsets @@ -181,6 +182,10 @@ private fun HomeScaffold( displayFilters = roomListState.displayFilters && state.currentHomeNavigationBarItem == HomeNavigationBarItem.Chats, filtersState = roomListState.filtersState, canReportBug = state.canReportBug, + modifier = Modifier.hazeEffect( + state = hazeState, + style = HazeMaterials.thick(), + ) ) }, bottomBar = { @@ -190,7 +195,7 @@ private fun HomeScaffold( modifier = Modifier .hazeEffect( state = hazeState, - style = HazeMaterials.regular(), + style = HazeMaterials.thick(), ) ) { HomeNavigationBarItem.entries.forEach { item -> @@ -227,15 +232,18 @@ private fun HomeScaffold( onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, onRoomClick = ::onRoomClick, onCreateRoomClick = onCreateRoomClick, - // FAB height is 56dp, bottom padding is 16dp, we add 8dp as extra margin -> 56+16+8 = 80, - // and include provided bottom padding - contentBottomPadding = 80.dp + padding.calculateBottomPadding(), + contentPadding = PaddingValues( + // FAB height is 56dp, bottom padding is 16dp, we add 8dp as extra margin -> 56+16+8 = 80, + // and include provided bottom padding + bottom = 80.dp + padding.calculateBottomPadding(), + top = padding.calculateTopPadding() + ), modifier = Modifier .padding( - top = padding.calculateTopPadding(), - bottom = 0.dp, - start = padding.calculateStartPadding(LocalLayoutDirection.current), - end = padding.calculateEndPadding(LocalLayoutDirection.current), + PaddingValues( + start = padding.calculateStartPadding(LocalLayoutDirection.current), + end = padding.calculateEndPadding(LocalLayoutDirection.current), + ) ) .consumeWindowInsets(padding) .hazeSource(state = hazeState) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt index 993fb0b85c..6b87d5becb 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.Modifier 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 androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons @@ -67,7 +66,7 @@ fun RoomListContentView( onConfirmRecoveryKeyClick: () -> Unit, onRoomClick: (RoomListRoomSummary) -> Unit, onCreateRoomClick: () -> Unit, - contentBottomPadding: Dp, + contentPadding: PaddingValues, modifier: Modifier = Modifier, ) { Box(modifier = modifier) { @@ -95,7 +94,7 @@ fun RoomListContentView( onSetUpRecoveryClick = onSetUpRecoveryClick, onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, onRoomClick = onRoomClick, - contentBottomPadding = contentBottomPadding, + contentPadding = contentPadding, ) } } @@ -167,7 +166,7 @@ private fun RoomsView( onSetUpRecoveryClick: () -> Unit, onConfirmRecoveryKeyClick: () -> Unit, onRoomClick: (RoomListRoomSummary) -> Unit, - contentBottomPadding: Dp, + contentPadding: PaddingValues, modifier: Modifier = Modifier, ) { if (state.summaries.isEmpty() && filtersState.hasAnyFilterSelected) { @@ -183,7 +182,7 @@ private fun RoomsView( onSetUpRecoveryClick = onSetUpRecoveryClick, onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, onRoomClick = onRoomClick, - contentBottomPadding = contentBottomPadding, + contentPadding = contentPadding, modifier = modifier.fillMaxSize(), ) } @@ -197,7 +196,7 @@ private fun RoomsViewList( onSetUpRecoveryClick: () -> Unit, onConfirmRecoveryKeyClick: () -> Unit, onRoomClick: (RoomListRoomSummary) -> Unit, - contentBottomPadding: Dp, + contentPadding: PaddingValues, modifier: Modifier = Modifier, ) { val lazyListState = rememberLazyListState() @@ -216,7 +215,7 @@ private fun RoomsViewList( LazyColumn( state = lazyListState, modifier = modifier, - contentPadding = PaddingValues(bottom = contentBottomPadding) + contentPadding = contentPadding, ) { when (state.securityBannerState) { SecurityBannerState.SetUpRecovery -> { @@ -329,6 +328,6 @@ internal fun RoomListContentViewPreview(@PreviewParameter(RoomListContentStatePr onConfirmRecoveryKeyClick = {}, onRoomClick = {}, onCreateRoomClick = {}, - contentBottomPadding = 0.dp, + contentPadding = PaddingValues(0.dp), ) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt index 7b9ddfd447..5d6f91e4b4 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/modifiers/Gradient.kt @@ -37,7 +37,6 @@ fun Modifier.backgroundVerticalGradient( brush = Brush.verticalGradient( colorStops = subtleColorStops(isEnterpriseBuild), ), - alpha = 0.75f, ) } From cba4a3a029d9e116127f45711f73f19bcfdc8497 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 16:39:57 +0200 Subject: [PATCH 41/69] Apply content padding to skeleton view. --- .../home/impl/components/RoomListContentView.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt index 6b87d5becb..f59ac763ca 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt @@ -74,6 +74,7 @@ fun RoomListContentView( is RoomListContentState.Skeleton -> { SkeletonView( count = contentState.count, + contentPadding = contentPadding, ) } is RoomListContentState.Empty -> { @@ -102,8 +103,15 @@ fun RoomListContentView( } @Composable -private fun SkeletonView(count: Int, modifier: Modifier = Modifier) { - LazyColumn(modifier = modifier) { +private fun SkeletonView( + count: Int, + contentPadding: PaddingValues, + modifier: Modifier = Modifier, +) { + LazyColumn( + modifier = modifier, + contentPadding = contentPadding, + ) { repeat(count) { index -> item { RoomSummaryPlaceholderRow() From 2232a745c974b66720e771965331a33b1a7da32c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 16:40:34 +0200 Subject: [PATCH 42/69] Remove useless Box --- .../impl/components/RoomListContentView.kt | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt index f59ac763ca..266a473269 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt @@ -69,35 +69,36 @@ fun RoomListContentView( contentPadding: PaddingValues, modifier: Modifier = Modifier, ) { - Box(modifier = modifier) { - when (contentState) { - is RoomListContentState.Skeleton -> { - SkeletonView( - count = contentState.count, - contentPadding = contentPadding, - ) - } - is RoomListContentState.Empty -> { - EmptyView( - state = contentState, - eventSink = eventSink, - onSetUpRecoveryClick = onSetUpRecoveryClick, - onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, - onCreateRoomClick = onCreateRoomClick, - ) - } - is RoomListContentState.Rooms -> { - RoomsView( - state = contentState, - hideInvitesAvatars = hideInvitesAvatars, - filtersState = filtersState, - eventSink = eventSink, - onSetUpRecoveryClick = onSetUpRecoveryClick, - onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, - onRoomClick = onRoomClick, - contentPadding = contentPadding, - ) - } + when (contentState) { + is RoomListContentState.Skeleton -> { + SkeletonView( + modifier = modifier, + count = contentState.count, + contentPadding = contentPadding, + ) + } + is RoomListContentState.Empty -> { + EmptyView( + modifier = modifier, + state = contentState, + eventSink = eventSink, + onSetUpRecoveryClick = onSetUpRecoveryClick, + onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, + onCreateRoomClick = onCreateRoomClick, + ) + } + is RoomListContentState.Rooms -> { + RoomsView( + modifier = modifier, + state = contentState, + hideInvitesAvatars = hideInvitesAvatars, + filtersState = filtersState, + eventSink = eventSink, + onSetUpRecoveryClick = onSetUpRecoveryClick, + onConfirmRecoveryKeyClick = onConfirmRecoveryKeyClick, + onRoomClick = onRoomClick, + contentPadding = contentPadding, + ) } } } From 1a12a8e95c552765330d1df6daf79e34d2375e2a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 8 Jul 2025 17:29:45 +0200 Subject: [PATCH 43/69] Ensure that EmptyView has the padding too, especially when there is a banner to display. Add preview with empty list and banner. --- .../features/home/impl/components/RoomListContentView.kt | 2 +- .../features/home/impl/roomlist/RoomListStateProvider.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt index 266a473269..2845a79b8e 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/components/RoomListContentView.kt @@ -79,7 +79,7 @@ fun RoomListContentView( } is RoomListContentState.Empty -> { EmptyView( - modifier = modifier, + modifier = modifier.padding(contentPadding), state = contentState, eventSink = eventSink, onSetUpRecoveryClick = onSetUpRecoveryClick, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt index 0e4600c16a..b28ff0cce9 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListStateProvider.kt @@ -42,6 +42,7 @@ open class RoomListStateProvider : PreviewParameterProvider { aRoomListState(searchState = aRoomListSearchState(isSearchActive = true, query = "Test")), aRoomListState(contentState = aRoomsContentState(securityBannerState = SecurityBannerState.SetUpRecovery)), aRoomListState(contentState = aRoomsContentState(batteryOptimizationState = aBatteryOptimizationState(shouldDisplayBanner = true))), + aRoomListState(contentState = anEmptyContentState(securityBannerState = SecurityBannerState.RecoveryKeyConfirmation)), ) } From cb1db019f16851e382fedb779ee73ca59e910304 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Wed, 9 Jul 2025 12:59:13 +0000 Subject: [PATCH 44/69] Update screenshots --- ...components_DefaultRoomListTopBarWithIndicator_Day_0_en.png | 4 ++-- ...mponents_DefaultRoomListTopBarWithIndicator_Night_0_en.png | 4 ++-- ...es.home.impl.components_DefaultRoomListTopBar_Day_0_en.png | 4 ++-- ....home.impl.components_DefaultRoomListTopBar_Night_0_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_0_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_10_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_11_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_13_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_14_en.png | 4 ++-- .../images/features.home.impl_HomeView_Day_15_en.png | 3 +++ .../snapshots/images/features.home.impl_HomeView_Day_1_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_2_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_3_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_4_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_5_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_6_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_7_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_8_en.png | 4 ++-- .../snapshots/images/features.home.impl_HomeView_Day_9_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_0_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_10_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_11_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_13_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_14_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_15_en.png | 3 +++ .../images/features.home.impl_HomeView_Night_1_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_2_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_3_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_4_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_5_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_6_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_7_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_8_en.png | 4 ++-- .../images/features.home.impl_HomeView_Night_9_en.png | 4 ++-- ...odifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png | 4 ++-- ...ifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png | 4 ++-- ...gnsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png | 4 ++-- ...system.modifiers_BackgroundVerticalGradient_Night_0_en.png | 4 ++-- 38 files changed, 78 insertions(+), 72 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_15_en.png create mode 100644 tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_15_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png index 50d4b1b5f2..31468d7e37 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2adacc3ef3537cc0b81377786d03084f4923a7da1401ab84d03c907569e52d4 -size 27010 +oid sha256:93c8001dc7cf3bedd94a4ea325c0cc8f423245bfe811f3dc759cf85048c85673 +size 26943 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png index b5940109a6..45ddeafe0d 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBarWithIndicator_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb861a1c8c4188b1586384b65c78ed18ca23030066e21c0245606077f89f3c29 -size 24909 +oid sha256:287d6b55dd40098f6af42c6cb2a65c13b16b8de645919cd852f93212735b3d5f +size 24533 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png index 8c32610bf5..10aec8de7e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a449498d150466a5b3e27001228a39e935be7c637c422955375a18ea6f1fcb2 -size 26754 +oid sha256:0f5c945ba6cebea216f490c4d30feb664da83144298ed6658cff45090516f224 +size 26683 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png index ca9fdb1ba3..222356403c 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl.components_DefaultRoomListTopBar_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4ee431749b5f051b7345ac7f141f88ee8f998f04a2b7743960c5fa27af638e7 -size 24605 +oid sha256:942c052c6767e73115f73eadd32fd6b0c7879a6f477c9036660e2172a4a3cc05 +size 24226 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png index e52651a78e..37c1c0d3dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 -size 67519 +oid sha256:6d041ccfbc86d63b0fe5278cd0e159b83c4ed93619fe819812db0e0b1f804cba +size 67499 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png index c38e9d1f8e..a0405de061 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cba6e6115836c2274ad829b149d5c85973baf560f8b11e3b7d30023282b8ca8 -size 34967 +oid sha256:1d87598df6e41f7a5f9ec593c7f2f871bd03f715f6cf82d558afdcd0390779f4 +size 34856 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png index cb9c948643..383a63a053 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a6fa99ca8f18b0fef17abe4d9c8de4a9f34f8d0ae097f55bb6e860f4f7098fb -size 29681 +oid sha256:7652e5adf2e4c49cd58d8b43e9919fe66092c9d94f796f346d0dd19035a4087e +size 29650 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png index 7e5204d280..2f750bd8dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83807fc3cc614bfc1abb99e062df4dce72aa92626ffb5a24a3fcb357cc5e95c1 -size 90869 +oid sha256:af1b0c8c909e1c632044598f45ad2ad1ec2d7e872faba6b21cd9fe251430e39a +size 90818 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png index 7b9cd58e5b..f4a38ac8a8 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d5f42641d0566d91fbb55ea5f05d54979eb66c6e0b12c01d84aec1c90c218b8 -size 85395 +oid sha256:0afc7b3be1ad7b4b3d46adb4909601215a1dde8c88239fc266a72da98d21a611 +size 85337 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_15_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_15_en.png new file mode 100644 index 0000000000..f2bfc00624 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_15_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24181364fd522d425376ac9908b961d3d70e5ae49d7687128488fa37545ba4ea +size 52416 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png index ef42896b95..e8fb9cf117 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1eca7e08ad504da3750c622b73450511030a5d0856d7ecede0d23402d39d8855 -size 68807 +oid sha256:f049f06d4e3ca6dbdad51e6caf7a66049a89667e742f49c3c67105abb0de2c85 +size 69393 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png index e52651a78e..37c1c0d3dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 -size 67519 +oid sha256:6d041ccfbc86d63b0fe5278cd0e159b83c4ed93619fe819812db0e0b1f804cba +size 67499 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png index cccc8ba9dd..a3821ebf22 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd2c43ded5f2b8ee72e56476a6f84105675b19cd35d0338ec316012b2e732e45 -size 69332 +oid sha256:8a51ef76695aa73dc7983acec273299c5c07702003ca6d24f440a4209586f08b +size 69306 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png index 509ca1c24c..6285d191ca 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b42d23bee432b2713fbfebb00ccf5272625a0f57e4f74be2cedb6f1ee009fd4a -size 25675 +oid sha256:135a23f51e485b4b7e7ef047466ea8addb04ca42f22437d88d40893de096c62c +size 25655 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png index e52651a78e..37c1c0d3dd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:347d73d129f6b49b502371bc0f090e7432bf28f95aade88e37f33b6e91ac44a7 -size 67519 +oid sha256:6d041ccfbc86d63b0fe5278cd0e159b83c4ed93619fe819812db0e0b1f804cba +size 67499 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png index 134bb55b39..8278a84875 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a195f301e7a3b41c3b485cf1e448cde6d12312d0ad06cc48ea5c3cfab2621040 -size 53715 +oid sha256:2b9bb6636aeffab115c853ef7382a5854ded79ec99fb36ae150aa62e7f641824 +size 53771 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png index 193e1c6989..08bff77275 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d26274f91876c8a79846131149b38f544171cdef0396dfaa07c8c3e482aeb61 -size 53530 +oid sha256:0adc95043f06e89101a4e91393b0566198e9db4867c9e35f99674970726b58e6 +size 53578 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png index 3d46f88a8d..772a76139e 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63cb36a2139a260f5589d334dfe012414fa4404d297499d04fb630d206db3b9a -size 51750 +oid sha256:260ea7782c9249c937eb036f066b8ba6af509f699e019982e910499f9f887fe0 +size 51801 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png index 820b379001..1c551cee96 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Day_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f67ce8fdbd81b01cee6f1b8f2f1d3f735f14b9afd5c218b3890ee53129b04f39 -size 85193 +oid sha256:b0976e30537f03ed52b8940ca7721dd63b9dbc0672fc60845c8e55c995ea77b4 +size 85151 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png index d2b32c31aa..f2499902bc 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 -size 63310 +oid sha256:638845a573295211928850aec992ffca936e917c2775690669aaccf130ce6891 +size 62900 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png index c6ef593e68..951cc992b3 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_10_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ef7257132254bc1a6092da64c643efe1e4ac9f75566f81b05b2afc768248364 -size 30605 +oid sha256:cc2f55966cbed7d62576ae696596296f74786caf2337ec32ed887b13a7f841f5 +size 30181 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png index a087f75252..6444e473c9 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_11_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37d62040e49a4ae81ca161b377dab60491984ae1784ed79123658ff4a2df6e18 -size 24939 +oid sha256:5c4266fe4825dc0a239dcd34b776214740887814794eee06cdbfbcc57d3fb064 +size 24565 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png index bb19ad8a48..e12303bfcd 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_13_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8600a1be8fd98cf8776e6887b51f5948a28d3f90ade2a189a52a1c1f90655afe -size 85983 +oid sha256:ae9fc613169ae54f0e7d72ee78c8e1c28b9b2429b6a9bfbf662554289d0df56b +size 85590 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png index d2ed731655..26306e72e7 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_14_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af5dd69eda38ecc5b461e0f11d2ee1556e8f85b5d26ea28dc90bef41d97f6c9d -size 80498 +oid sha256:8a1f705af5cd8e9db7e269cb4ace8b8352711d1014535ef8d182a3dff8c47687 +size 80097 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_15_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_15_en.png new file mode 100644 index 0000000000..c88b897037 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_15_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa2ac7dbc98197a38f48634f15c89f8808253cbd3124b92f787a72be91bc4828 +size 47199 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png index 1ccf486316..b5aa72ef13 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_1_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53552b4c4ebcdfee0da6a64138f7f07080f2d2a0e7db195b327466854b9484b8 -size 64494 +oid sha256:e49a252ad59229ab9b2754851f99826b1c6f4c612881951fb3a9bce1468dd959 +size 64543 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png index d2b32c31aa..f2499902bc 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_2_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 -size 63310 +oid sha256:638845a573295211928850aec992ffca936e917c2775690669aaccf130ce6891 +size 62900 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png index 2598472959..fcbf73e833 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6e25cc2f51622fadf6b837a85aa6c929b49bf3f34900d739bc14c599627a280 -size 65604 +oid sha256:37bc4c42b7aec686984e086a282112c041d585b4cb9a7d492ee0f25470289241 +size 65244 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png index 3292130289..0ed75641d6 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4e5b98d04c66b0da10de45528cb4d953e778734a7de3d5b5e53985c4f496d74 -size 23429 +oid sha256:e6e65b13df83947595d1f28cd8f0da10a4854c7737b9d3e7bb0f7c93bd094463 +size 22940 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png index d2b32c31aa..f2499902bc 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_5_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d67192da73b958451d78fdfadbe1d3150fdeed8effd391d98122d4275aac348 -size 63310 +oid sha256:638845a573295211928850aec992ffca936e917c2775690669aaccf130ce6891 +size 62900 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png index 40db68f180..b62b2fdd94 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44c89fe4f267ae04e0ed8f8076e97a90d4a1c55aea47349a16abe8985925677e -size 51064 +oid sha256:73fe6f38879bf46fed54b4295d18a843d9a41326827d47b1fe6e9d84f91d4434 +size 50911 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png index c7599fa29e..e19416c4c5 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_7_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:146044e82709dfd8262082b31789eed72e9bebc100a7a8f15a7b8d41f5a95ad1 -size 50833 +oid sha256:f23b863fc8be17bf676e643327e411e89bfd644be55cb4cca25f9a720ac57c5c +size 50679 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png index d93ea44633..51858513e4 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_8_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b516e9ad28282895de6671c152aa57e4d8e74345b3745d8b909b39d81e29ebb7 -size 49075 +oid sha256:eea63b891b5e305ac3c6503e4f5c05448deefc541ac64e80190275a984d77baa +size 48922 diff --git a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png index dcaa2361ae..9014e32f96 100644 --- a/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png +++ b/tests/uitests/src/test/snapshots/images/features.home.impl_HomeView_Night_9_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93e35351228d382dd6c890441f09536915b1cd10f2a6592a6f90f52783dc3e46 -size 80482 +oid sha256:db71fdd1f3c7ca7f6d5e238ab959aeaf4c1ec3558c649aaf101182b716b6d869 +size 80093 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png index e7be559588..822b144da5 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9428e3d034f8041bd3e35ae1de7d8155c16ebf80ba1144d214844e6a4332c8b -size 8834 +oid sha256:d1abadd0072733255dab393f0eb826426700ab56030d32ef837e091c5f070d60 +size 8431 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png index 1e328199c5..eb6540928f 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradientEnterprise_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e62e6a3857d1f9cd87600e1858b83dda9f6eedd8e3d7aeae6e0be61813d56d3 -size 8432 +oid sha256:988d187cfcca7aed5f808d5aaac6bcc7e04e5504374a1fc7da148b642a994d9b +size 8447 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png index 4023a13e55..d576966705 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7a47d7bbdbfccaf1cf60b7e42d8b3bd1495fbcf91a3acf9786e8d6fb087758d -size 9667 +oid sha256:c5af22e02076092d0ea03ac1022e3f22740f2dbe19ca2e9d2e697c98fdbe71d2 +size 9829 diff --git a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png index 9bc2e6b969..2b0e563ceb 100644 --- a/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/libraries.designsystem.modifiers_BackgroundVerticalGradient_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:151a797c3bea19a74fb118d4e4aa3ee9424a6a8943533dfba62dbbd7b9505669 -size 7786 +oid sha256:89b0132538f68628bc3ff2eae0ce9f4fb52d73f14594000a6572972d944222e0 +size 7876 From dfd5343397583b6f6d9c56738d10e0ec1d1eeaa3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 15:09:33 +0200 Subject: [PATCH 45/69] Disable hazeEffect if spaces are not enabled. Give us time to fix the transparency issue that has been discovered on the navigation bar. --- .../element/android/features/home/impl/HomeView.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt index aca132f56a..d08aba7d97 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeView.kt @@ -182,10 +182,15 @@ private fun HomeScaffold( displayFilters = roomListState.displayFilters && state.currentHomeNavigationBarItem == HomeNavigationBarItem.Chats, filtersState = roomListState.filtersState, canReportBug = state.canReportBug, - modifier = Modifier.hazeEffect( - state = hazeState, - style = HazeMaterials.thick(), - ) + modifier = if (state.isSpaceFeatureEnabled) { + Modifier.hazeEffect( + state = hazeState, + style = HazeMaterials.thick(), + ) + } else { + Modifier + .background(ElementTheme.colors.bgCanvasDefault) + } ) }, bottomBar = { From b50b048a0f8763ba18ddc6cf908529d1a85d962b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 16:09:17 +0200 Subject: [PATCH 46/69] [a11y] Fix talkback saying twice "Report room" --- .../android/features/home/impl/roomlist/RoomListContextMenu.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContextMenu.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContextMenu.kt index 27883e88d5..2a6cfee502 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContextMenu.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListContextMenu.kt @@ -176,7 +176,6 @@ private fun RoomListModalBottomSheetContent( leadingContent = ListItemContent.Icon( iconSource = IconSource.Vector( CompoundIcons.ChatProblem(), - contentDescription = stringResource(CommonStrings.action_report_room), ) ), style = ListItemStyle.Destructive, From fb497d04657a78040ca58381577f0073f050a134 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 16:20:47 +0200 Subject: [PATCH 47/69] Sync strings. --- features/poll/api/src/main/res/values/localazy.xml | 1 + libraries/ui-strings/src/main/res/values/localazy.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/features/poll/api/src/main/res/values/localazy.xml b/features/poll/api/src/main/res/values/localazy.xml index 2d1142194c..ebba470b6a 100644 --- a/features/poll/api/src/main/res/values/localazy.xml +++ b/features/poll/api/src/main/res/values/localazy.xml @@ -4,5 +4,6 @@ "%1$d percent of total votes" "%1$d percents of total votes" + "Will remove previous selection" "This is the winning answer" diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 270e862300..826dd2fe55 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -7,11 +7,15 @@ "%1$d digit entered" "%1$d digits entered" + "Edit avatar" "Hide password" "Join call" "Jump to bottom" "Mentions only" "Muted" + "New mentions" + "New messages" + "Ongoing call" "Other user\'s avatar" "Page %1$d" "Pause" @@ -35,6 +39,7 @@ "Send files" "Show password" "Start a call" + "Time limited action required" "User avatar" "User menu" "View avatar" From 080d5595a7b1a35910a46ee9611eb93a0435132e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 16:20:59 +0200 Subject: [PATCH 48/69] [a11y] Add click label on edit avatar component https://github.com/element-hq/customer-success/issues/579 --- .../android/libraries/matrix/ui/components/EditableAvatarView.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt index 3b8b6831ca..ad06985ab7 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/EditableAvatarView.kt @@ -62,6 +62,7 @@ fun EditableAvatarView( modifier = Modifier .clickable( interactionSource = remember { MutableInteractionSource() }, + onClickLabel = stringResource(CommonStrings.a11y_edit_avatar), onClick = onAvatarClick, indication = ripple(bounded = false), ) From b626e55a24e6ca226dd2027503d9cd93b8a3b34f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 16:47:23 +0200 Subject: [PATCH 49/69] [a11y] Make SelectedUser more accessible by grouping the text and the action to remove. https://github.com/element-hq/customer-success/issues/566 --- .../matrix/ui/components/SelectedUser.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index 31cc724838..ad36ef9ced 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -23,6 +23,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.clearAndSetSemantics +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.onClick import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -48,9 +51,21 @@ fun SelectedUser( onUserRemove: (MatrixUser) -> Unit, modifier: Modifier = Modifier, ) { + val actionRemove = stringResource(id = CommonStrings.action_remove) Box( modifier = modifier .width(AvatarSize.SelectedUser.dp) + .clearAndSetSemantics { + contentDescription = matrixUser.getBestName() + if (canRemove) { + // Note: this does not set the click effect to the whole Box + // when talkback is not enabled + onClick( + label = actionRemove, + action = { onUserRemove(matrixUser); true } + ) + } + } ) { Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -83,7 +98,7 @@ fun SelectedUser( ) { Icon( imageVector = CompoundIcons.Close(), - contentDescription = stringResource(id = CommonStrings.action_remove), + contentDescription = null, tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier.padding(2.dp) ) From dc556e02987ad69b137b7d1fb1bfe27e458f5f06 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 9 Jul 2025 17:03:50 +0200 Subject: [PATCH 50/69] [a11y] Improve accessibility of picto next to the timestamp. https://github.com/element-hq/customer-success/issues/572 --- .../components/TimelineEventTimestampView.kt | 29 ++++++++++--------- .../timeline/components/TimelineItemRow.kt | 5 +++- .../src/main/res/values/localazy.xml | 1 + 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index 644cbf2310..d8af3c1736 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -18,8 +18,6 @@ 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.semantics.hideFromAccessibility -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -44,15 +42,15 @@ fun TimelineEventTimestampView( modifier: Modifier = Modifier, ) { val formattedTime = event.sentTime - val hasError = event.localSendState is LocalEventSendState.Failed + val hasError = event.failedToSend val hasEncryptionCritical = event.messageShield?.isCritical.orFalse() val isMessageEdited = event.content.isEdited() val isMessageRedacted = event.content.isRedacted() val tint = if (hasError || hasEncryptionCritical && !isMessageRedacted) ElementTheme.colors.textCriticalPrimary else ElementTheme.colors.textSecondary Row( modifier = Modifier - .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) - .then(modifier), + .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) + .then(modifier), verticalAlignment = Alignment.CenterVertically, ) { if (isMessageEdited) { @@ -76,11 +74,13 @@ fun TimelineEventTimestampView( contentDescription = stringResource(id = CommonStrings.common_sending_failed), tint = tint, modifier = Modifier - .size(15.dp, 18.dp) - .clickable(isVerifiedUserSendFailure) { - eventSink(TimelineEvents.ComputeVerifiedUserSendFailure(event)) - } - .semantics { hideFromAccessibility() } + .size(15.dp, 18.dp) + .clickable( + enabled = isVerifiedUserSendFailure, + onClickLabel = stringResource(CommonStrings.action_open_context_menu), + ) { + eventSink(TimelineEvents.ComputeVerifiedUserSendFailure(event)) + } ) } @@ -89,13 +89,14 @@ fun TimelineEventTimestampView( Spacer(modifier = Modifier.width(2.dp)) Icon( imageVector = shield.toIcon(), - contentDescription = shield.toText(), + contentDescription = stringResource(id = CommonStrings.a11y_encryption_details), modifier = Modifier .size(15.dp) - .clickable { + .clickable( + onClickLabel = stringResource(CommonStrings.a11y_view_details), + ) { eventSink(TimelineEvents.ShowShieldDialog(shield)) - } - .semantics { hideFromAccessibility() }, + }, tint = shield.toIconColor(), ) Spacer(modifier = Modifier.width(4.dp)) 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 9628fb2bb4..59ec63d842 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 @@ -140,7 +140,10 @@ internal fun TimelineItemRow( timelineItem.safeSenderName } // For Polls, allow the answers to be traversed by Talkback - isTraversalGroup = timelineItem.content is TimelineItemPollContent + isTraversalGroup = timelineItem.content is TimelineItemPollContent || + timelineItem.failedToSend || + timelineItem.messageShield != null + // TODO Also set to true when the event has link(s) } // Custom clickable that applies over the whole item for accessibility .then( diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 826dd2fe55..362b2310d4 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -8,6 +8,7 @@ "%1$d digits entered" "Edit avatar" + "Encryption details" "Hide password" "Join call" "Jump to bottom" From ca07e89bf9f1a475d9f7645b917983c9c5cd3bf3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 01:26:41 +0000 Subject: [PATCH 51/69] Update dependency org.maplibre.gl:android-sdk to v11.12.1 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 18378a1499..1c526ed993 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -187,7 +187,7 @@ vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } telephoto_flick = { module = "me.saket.telephoto:flick-android", version.ref = "telephoto" } statemachine = "com.freeletics.flowredux:compose:1.2.2" -maplibre = "org.maplibre.gl:android-sdk:11.12.0" +maplibre = "org.maplibre.gl:android-sdk:11.12.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.2.0" From 724cc13c05d5f58749f6e3b21670b9e9e2e4f520 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Jul 2025 08:30:39 +0200 Subject: [PATCH 52/69] Remove dead code. --- .../androidutils/accessibility/ContextExt.kt | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/accessibility/ContextExt.kt diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/accessibility/ContextExt.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/accessibility/ContextExt.kt deleted file mode 100644 index 02250297b3..0000000000 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/accessibility/ContextExt.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.androidutils.accessibility - -import android.content.Context -import android.view.accessibility.AccessibilityManager -import androidx.core.content.getSystemService - -/** - * Whether a screen reader is enabled. - * - * Avoid changing UI or app behavior based on the state of accessibility. - * See [AccessibilityManager.isTouchExplorationEnabled] for more details. - * - * @return true if the screen reader is enabled. - */ -fun Context.isScreenReaderEnabled(): Boolean { - val accessibilityManager = getSystemService() - ?: return false - - return accessibilityManager.let { - it.isEnabled && it.isTouchExplorationEnabled - } -} From 2f7804d61416e7a2131ba0df532122b9690fe7b5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Jul 2025 10:04:21 +0200 Subject: [PATCH 53/69] Quality --- .../android/libraries/matrix/ui/components/SelectedUser.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index ad36ef9ced..cfd378d23c 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -62,7 +62,10 @@ fun SelectedUser( // when talkback is not enabled onClick( label = actionRemove, - action = { onUserRemove(matrixUser); true } + action = { + onUserRemove(matrixUser) + true + } ) } } From 9ce6569872ee3cf24747b6257187b8bbb7e48357 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Jul 2025 10:36:57 +0200 Subject: [PATCH 54/69] Fix test --- .../android/features/messages/impl/timeline/TimelineViewTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c4a2351990..73969a2860 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 @@ -116,7 +116,7 @@ class TimelineViewTest { eventSink = eventsRecorder, ), ) - val contentDescription = rule.activity.getString(CommonStrings.event_shield_reason_unverified_identity) + val contentDescription = rule.activity.getString(CommonStrings.a11y_encryption_details) rule.onNodeWithContentDescription(contentDescription).performClick() eventsRecorder.assertList( listOf( From b86bba59162c24f53b1a242310a098ed67edd691 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Jul 2025 11:40:38 +0200 Subject: [PATCH 55/69] Fix test --- .../changeroles/ChangeRolesViewTest.kt | 14 ++++++++++---- .../libraries/matrix/ui/components/SelectedUser.kt | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesViewTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesViewTest.kt index 4bb0253e6a..6f2179d4d4 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesViewTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesViewTest.kt @@ -225,7 +225,10 @@ class ChangeRolesViewTest { ) // Unselect the user from the row list val contentDescription = rule.activity.getString(CommonStrings.action_remove) - rule.onNodeWithContentDescription(contentDescription).performClick() + rule.onNodeWithContentDescription( + label = contentDescription, + useUnmergedTree = true, + ).performClick() eventsRecorder.assertList( listOf( ChangeRolesEvent.QueryChanged(""), @@ -248,7 +251,7 @@ class ChangeRolesViewTest { rule.setChangeRolesContent( state = state, ) - // Select the user from the row list + // Select the user from the user list rule.onNodeWithText("Carol").performClick() eventsRecorder.assertList( listOf( @@ -271,8 +274,11 @@ class ChangeRolesViewTest { rule.setChangeRolesContent( state = state, ) - // Select the user from the rom list - rule.onAllNodesWithText("Bob")[1].performClick() + // Unselect the user from the user list + rule.onAllNodesWithText( + text = "Bob", + useUnmergedTree = true, + )[1].performClick() eventsRecorder.assertList( listOf( ChangeRolesEvent.QueryChanged(""), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index cfd378d23c..f3c3c634e6 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -101,7 +101,8 @@ fun SelectedUser( ) { Icon( imageVector = CompoundIcons.Close(), - contentDescription = null, + // Note: keep the context description for the test + contentDescription = stringResource(id = CommonStrings.action_remove), tint = ElementTheme.colors.iconOnSolidPrimary, modifier = Modifier.padding(2.dp) ) From 46a8a99b583e9c35de94833544378aec4aa6d972 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:55:41 +0100 Subject: [PATCH 56/69] Update dependency com.posthog:posthog-android to v3.19.2 (#5009) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 18378a1499..4f866bc4ea 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -196,7 +196,7 @@ haze = { module = "dev.chrisbanes.haze:haze", version.ref = "haze" } haze_materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = "haze" } # Analytics -posthog = "com.posthog:posthog-android:3.19.0" +posthog = "com.posthog:posthog-android:3.19.2" sentry = "io.sentry:sentry-android:8.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" From 80e506153b21aed142abab6395987da583ad1ba6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Jul 2025 14:08:57 +0200 Subject: [PATCH 57/69] Stop ignoring dependencies, but instead set `open-pull-requests-limit` to 0 so that it will not create PR but we expect that it builds the dependency grpah. --- .github/dependabot.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ec67e56676..7bda713623 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,8 +10,7 @@ updates: directory: "/" schedule: interval: "daily" - ignore: - - dependency-name: "*" + open-pull-requests-limit: 0 reviewers: - "element-hq/element-x-android-reviewers" # Updates for Gradle dependencies used in the app @@ -19,8 +18,6 @@ updates: directory: "/" schedule: interval: "daily" - open-pull-requests-limit: 200 - ignore: - - dependency-name: "*" + open-pull-requests-limit: 0 reviewers: - "element-hq/element-x-android-reviewers" From 61c9eb078002819e1fda0a38ce4208a9e92ef747 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 10 Jul 2025 15:33:23 +0200 Subject: [PATCH 58/69] Add a feature flag to reuse the last `pos` value for initial syncs (#5010) --- gradle/libs.versions.toml | 2 +- .../android/libraries/featureflag/api/FeatureFlags.kt | 9 +++++++++ .../libraries/matrix/impl/RustMatrixClientFactory.kt | 1 + .../impl/fixtures/fakes/FakeFfiSyncServiceBuilder.kt | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4f866bc4ea..0cb6808b70 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -173,7 +173,7 @@ jsoup = "org.jsoup:jsoup:1.21.1" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.1.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.7" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.10" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 81c33318c1..e74304b735 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -175,4 +175,13 @@ enum class FeatureFlags( // False so it's displayed in the developer options screen isFinished = false, ), + SharePos( + key = "feature.share_pos", + title = "Share pos in sliding sync", + description = "Keep the sliding sync pos to make initial syncs faster. Requires an app restart to take effect." + + "\n\nWARNING: this may cause issues with syncs.", + defaultValue = { false }, + // False so it's displayed in the developer options screen + isFinished = false, + ), } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index c1dab6f404..6086da5d5b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -78,6 +78,7 @@ class RustMatrixClientFactory @Inject constructor( client.setUtdDelegate(UtdTracker(analyticsService)) val syncService = client.syncService() + .withSharePos(enable = featureFlagService.isFeatureEnabled(FeatureFlags.SharePos)) .withOfflineMode() .finish() diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiSyncServiceBuilder.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiSyncServiceBuilder.kt index 93dab14a0c..f423d0295b 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiSyncServiceBuilder.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiSyncServiceBuilder.kt @@ -13,5 +13,6 @@ import org.matrix.rustcomponents.sdk.SyncServiceBuilder class FakeFfiSyncServiceBuilder : SyncServiceBuilder(NoPointer) { override fun withOfflineMode(): SyncServiceBuilder = this + override fun withSharePos(enable: Boolean): SyncServiceBuilder = this override suspend fun finish(): SyncService = FakeFfiSyncService() } From 9994562e60aa7e9f3c8184ee2211addc4966285b Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Thu, 10 Jul 2025 17:02:42 +0200 Subject: [PATCH 59/69] Keep video rotation metadata when transcoding (#5008) --- .../mediaupload/impl/VideoCompressor.kt | 25 +++++++++------- .../impl/VideoStrategyFactoryTest.kt | 30 +++++++++++++++---- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index 9f36b49bc0..1a79960c53 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -90,6 +90,7 @@ class VideoCompressor @Inject constructor( val height = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toIntOrNull() ?: -1 val bitrate = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)?.toLongOrNull() ?: -1 val framerate = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE)?.toIntOrNull() ?: -1 + val rotation = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)?.toIntOrNull() ?: 0 val (actualWidth, actualHeight) = if (width == -1 || height == -1) { // Try getting the first frame instead @@ -103,7 +104,8 @@ class VideoCompressor @Inject constructor( width = actualWidth, height = actualHeight, bitrate = bitrate, - frameRate = framerate + frameRate = framerate, + rotation = rotation, ) } }.onFailure { @@ -113,10 +115,11 @@ class VideoCompressor @Inject constructor( } internal data class VideoFileMetadata( - val width: Int?, - val height: Int?, - val bitrate: Long?, - val frameRate: Int?, + val width: Int, + val height: Int, + val bitrate: Long, + val frameRate: Int, + val rotation: Int, ) sealed interface VideoTranscodingEvent { @@ -136,10 +139,11 @@ internal object VideoStrategyFactory { metadata: VideoFileMetadata?, shouldBeCompressed: Boolean, ): TrackStrategy { - val width = metadata?.width ?: Int.MAX_VALUE - val height = metadata?.height ?: Int.MAX_VALUE - val bitrate = metadata?.bitrate - val frameRate = metadata?.frameRate + val width = metadata?.width?.takeIf { it >= 0 } ?: Int.MAX_VALUE + val height = metadata?.height?.takeIf { it >= 0 } ?: Int.MAX_VALUE + val bitrate = metadata?.bitrate?.takeIf { it >= 0 } + val frameRate = metadata?.frameRate?.takeIf { it >= 0 } + val rotation = metadata?.rotation?.takeIf { it >= 0 } // We only create a resizer if needed val resizer = when { @@ -148,8 +152,9 @@ internal object VideoStrategyFactory { else -> null } - return if (resizer == null && expectedExtension == MP4_EXTENSION) { + return if (resizer == null && rotation == 0 && expectedExtension == MP4_EXTENSION) { // If there's no transcoding or resizing needed for the video file, just create a new file with the same contents but no metadata + // Rotation is not kept by the PassThroughTrackStrategy, so we need to ensure the video is not rotated PassThroughTrackStrategy() } else { DefaultVideoStrategy.Builder() diff --git a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt index 65bf12c22a..9f030aa847 100644 --- a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt +++ b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt @@ -39,7 +39,7 @@ class VideoStrategyFactoryTest { fun `if the video should be compressed and is larger than 720p it will be transcoded`() { // Given val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = true // When @@ -57,7 +57,7 @@ class VideoStrategyFactoryTest { fun `if the video should be compressed, has the right format and is smaller or equal to 720p it will not be transcoded`() { // Given val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1280, height = 720, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 1280, height = 720, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = true // When @@ -75,7 +75,7 @@ class VideoStrategyFactoryTest { fun `if the video should not be compressed and is larger than 1080p it will be transcoded`() { // Given val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 2560, height = 1440, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 2560, height = 1440, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = false // When @@ -93,7 +93,7 @@ class VideoStrategyFactoryTest { fun `if the video should not be compressed, has the right format and is smaller or equal than 1080p it will not be transcoded`() { // Given val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = false // When @@ -111,7 +111,7 @@ class VideoStrategyFactoryTest { fun `if the video should not be compressed but has a wrong format it will be transcoded`() { // Given val expectedExtension = "mkv" - val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = false // When @@ -129,7 +129,7 @@ class VideoStrategyFactoryTest { fun `if the video should be compressed and has a wrong format it will be transcoded`() { // Given val expectedExtension = "mkv" - val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50) + val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 0) val shouldBeCompressed = true // When @@ -143,6 +143,24 @@ class VideoStrategyFactoryTest { assertIsTranscoded(videoStrategy) } + @Test + fun `if the video should not be compressed but has a rotation not zero it will be transcoded`() { + // Given + val expectedExtension = "mp4" + val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 90) + val shouldBeCompressed = false + + // When + val videoStrategy = VideoStrategyFactory.create( + expectedExtension = expectedExtension, + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertIsTranscoded(videoStrategy) + } + private inline fun assertIsTranscoded(videoStrategy: TrackStrategy) { assert(videoStrategy is DefaultVideoStrategy) } From 9482442c42380f6f9c970cab371998ec9cb14ef7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Jul 2025 10:03:15 +0200 Subject: [PATCH 60/69] Update android.gradle.plugin to v8.11.1 (#5014) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f69c0d5b98..0bb2e491a9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ [versions] # Project -android_gradle_plugin = "8.11.0" +android_gradle_plugin = "8.11.1" kotlin = "2.2.0" kotlinpoet = "2.2.0" ksp = "2.2.0-2.0.2" From d4e49f02db8a118a64b8de2e0287dcc42db2246a Mon Sep 17 00:00:00 2001 From: mxandreas Date: Fri, 11 Jul 2025 10:38:09 +0100 Subject: [PATCH 61/69] Update to the status and clarifications with respect to the legacy app. (#5016) --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 20ac1c0536..ce36a17ce0 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,9 @@ # Element X Android -Element X Android is a [Matrix](https://matrix.org/) Android Client provided by [element.io](https://element.io/). +Element X Android is the next-generation [Matrix](https://matrix.org/) client provided by [Element](https://element.io/). -The application is a total rewrite of [Element-Android](https://github.com/element-hq/element-android) using the [Matrix Rust SDK](https://github.com/matrix-org/matrix-rust-sdk) underneath and targeting devices running Android 7+. The UI layer is written using [Jetpack Compose](https://developer.android.com/jetpack/compose), and the navigation is managed using [Appyx](https://github.com/bumble-tech/appyx). - -Learn more about why we are building Element X in our blog post: [https://element.io/blog/element-x-experience-the-future-of-element/](https://element.io/blog/element-x-experience-the-future-of-element/). +Compared to the previos-generation [Element Classic](https://github.com/element-hq/element-android), the application is a total rewrite, using the [Matrix Rust SDK](https://github.com/matrix-org/matrix-rust-sdk) underneath and targeting devices running Android 7+. The UI layer is written using [Jetpack Compose](https://developer.android.com/jetpack/compose), and the navigation is managed using [Appyx](https://github.com/bumble-tech/appyx). [Get it on Google Play](https://play.google.com/store/apps/details?id=io.element.android.x)[Get it on F-Droid](https://f-droid.org/packages/io.element.android.x) @@ -72,7 +70,7 @@ We're doing this as a way to share code between platforms and while we've seen p ## Status -This project is in an early rollout and migration phase. +This project is actively developed and supported. New users are recommended to use Element X instead of the previous-generation app. ## Minimum SDK version From 7a87d7b0d0d7bc0b158462a03e63a489f695a7a9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 11 Jul 2025 12:24:53 +0200 Subject: [PATCH 62/69] Fix typo introduced in #5016 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce36a17ce0..95e8b219f5 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Element X Android is the next-generation [Matrix](https://matrix.org/) client provided by [Element](https://element.io/). -Compared to the previos-generation [Element Classic](https://github.com/element-hq/element-android), the application is a total rewrite, using the [Matrix Rust SDK](https://github.com/matrix-org/matrix-rust-sdk) underneath and targeting devices running Android 7+. The UI layer is written using [Jetpack Compose](https://developer.android.com/jetpack/compose), and the navigation is managed using [Appyx](https://github.com/bumble-tech/appyx). +Compared to the previous-generation [Element Classic](https://github.com/element-hq/element-android), the application is a total rewrite, using the [Matrix Rust SDK](https://github.com/matrix-org/matrix-rust-sdk) underneath and targeting devices running Android 7+. The UI layer is written using [Jetpack Compose](https://developer.android.com/jetpack/compose), and the navigation is managed using [Appyx](https://github.com/bumble-tech/appyx). [Get it on Google Play](https://play.google.com/store/apps/details?id=io.element.android.x)[Get it on F-Droid](https://f-droid.org/packages/io.element.android.x) From 08db9fcc4a4498dc3bf2eeb35430716073d5434a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:59:20 +0200 Subject: [PATCH 63/69] Update rnkdsh/action-upload-diawi action to v1.5.10 (#5019) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1668cd2b1f..3b80134e52 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,7 +69,7 @@ jobs: retention-days: 5 overwrite: true if-no-files-found: error - - uses: rnkdsh/action-upload-diawi@605adbad0db6c000eee26adfd8fc128d7df8f7ab # v1.5.9 + - uses: rnkdsh/action-upload-diawi@993c2e9f871486114a171cf7fb40554716dac3c5 # v1.5.10 id: diawi # Do not fail the whole build if Diawi upload fails continue-on-error: true From 984a714474a49e49792e93d49f99e8a65b38951f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 08:53:48 +0200 Subject: [PATCH 64/69] Update wysiwyg to v2.38.5 (#5025) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0bb2e491a9..b3232e819f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ coil = "3.2.0" showkase = "1.0.4" appyx = "1.7.1" sqldelight = "2.1.0" -wysiwyg = "2.38.4" +wysiwyg = "2.38.5" telephoto = "0.16.0" haze = "1.6.7" From aaa0407bff55776335ec40426d526331806dbbd9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 09:46:30 +0200 Subject: [PATCH 65/69] Update haze to v1.6.8 (#5026) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b3232e819f..fddb58cba9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ appyx = "1.7.1" sqldelight = "2.1.0" wysiwyg = "2.38.5" telephoto = "0.16.0" -haze = "1.6.7" +haze = "1.6.8" # Dependency analysis dependencyAnalysis = "2.19.0" From e8154ec19d9e8c6a176d6ad6692c04ed4c4c14e1 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Tue, 15 Jul 2025 11:08:56 +0200 Subject: [PATCH 66/69] Replace video transcoder with Media3 Transformer (#5018) --- gradle/libs.versions.toml | 4 +- libraries/mediaupload/impl/build.gradle.kts | 4 +- .../impl/AndroidMediaPreProcessor.kt | 20 +- .../mediaupload/impl/VideoCompressor.kt | 192 ++++++++++-------- .../mediaupload/impl/VideoCompressorConfig.kt | 93 +++++++++ .../impl/VideoCompressorConfigFactoryTest.kt | 108 ++++++++++ .../impl/VideoStrategyFactoryTest.kt | 171 ---------------- 7 files changed, 334 insertions(+), 258 deletions(-) create mode 100644 libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfig.kt create mode 100644 libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfigFactoryTest.kt delete mode 100644 libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fddb58cba9..b2cca061c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -100,6 +100,9 @@ androidx_lifecycle_process = { module = "androidx.lifecycle:lifecycle-process", androidx_splash = "androidx.core:core-splashscreen:1.0.1" androidx_media3_exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" } androidx_media3_ui = { module = "androidx.media3:media3-ui", version.ref = "media3" } +androidx_media3_transformer = { module = "androidx.media3:media3-transformer", version.ref = "media3" } +androidx_media3_effect = { module = "androidx.media3:media3-effect", version.ref = "media3" } +androidx_media3_common = { module = "androidx.media3:media3-common", version.ref = "media3" } androidx_biometric = "androidx.biometric:biometric-ktx:1.2.0-alpha05" androidx_activity_activity = { module = "androidx.activity:activity", version.ref = "activity" } @@ -182,7 +185,6 @@ sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", sqlcipher = "net.zetetic:sqlcipher-android:4.9.0" sqlite = "androidx.sqlite:sqlite-ktx:2.5.2" unifiedpush = "org.unifiedpush.android:connector:3.0.10" -otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" 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" } diff --git a/libraries/mediaupload/impl/build.gradle.kts b/libraries/mediaupload/impl/build.gradle.kts index 28fa430d47..be2637e6e1 100644 --- a/libraries/mediaupload/impl/build.gradle.kts +++ b/libraries/mediaupload/impl/build.gradle.kts @@ -33,8 +33,10 @@ dependencies { implementation(projects.services.toolbox.api) implementation(libs.inject) implementation(libs.androidx.exifinterface) + implementation(libs.androidx.media3.transformer) + implementation(libs.androidx.media3.effect) + implementation(libs.androidx.media3.common) implementation(libs.coroutines.core) - implementation(libs.otaliastudios.transcoder) implementation(libs.vanniktech.blurhash) testImplementation(libs.test.junit) diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index 6363fa06c9..be0bbc701e 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -192,12 +192,19 @@ class AndroidMediaPreProcessor @Inject constructor( val resultFile = runCatchingExceptions { videoCompressor.compress(uri, shouldBeCompressed) .onEach { - // TODO handle progress + if (it is VideoTranscodingEvent.Progress) { + Timber.d("Video compression progress: ${it.value}%") + } else if (it is VideoTranscodingEvent.Completed) { + Timber.d("Video compression completed: ${it.file.path}") + } } .filterIsInstance() .first() .file } + .onFailure { + Timber.e(it, "Failed to compress video: $uri") + } .getOrNull() if (resultFile != null) { @@ -283,10 +290,17 @@ class AndroidMediaPreProcessor @Inject constructor( private fun extractVideoMetadata(file: File, mimeType: String?, thumbnailResult: ThumbnailResult?): VideoInfo = MediaMetadataRetriever().runAndRelease { setDataSource(context, Uri.fromFile(file)) + + val rotation = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)?.toInt() ?: 0 + val rawWidth = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toLong() ?: 0L + val rawHeight = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toLong() ?: 0L + + val (width, height) = if (rotation == 90 || rotation == 270) rawHeight to rawWidth else rawWidth to rawHeight + VideoInfo( duration = extractDuration(), - width = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toLong() ?: 0L, - height = extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toLong() ?: 0L, + width = width, + height = height, mimetype = mimeType, size = file.length(), thumbnailInfo = thumbnailResult?.info, diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index 1a79960c53..efa9042759 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -8,76 +8,146 @@ package io.element.android.libraries.mediaupload.impl import android.content.Context +import android.media.MediaCodecInfo import android.media.MediaMetadataRetriever import android.net.Uri -import android.webkit.MimeTypeMap -import com.otaliastudios.transcoder.Transcoder -import com.otaliastudios.transcoder.TranscoderListener -import com.otaliastudios.transcoder.internal.media.MediaFormatConstants -import com.otaliastudios.transcoder.resize.AtMostResizer -import com.otaliastudios.transcoder.strategy.DefaultVideoStrategy -import com.otaliastudios.transcoder.strategy.PassThroughTrackStrategy -import com.otaliastudios.transcoder.strategy.TrackStrategy -import com.otaliastudios.transcoder.validator.WriteAlwaysValidator +import androidx.annotation.OptIn +import androidx.media3.common.MediaItem +import androidx.media3.common.MimeTypes +import androidx.media3.common.util.Size +import androidx.media3.common.util.UnstableApi +import androidx.media3.effect.Presentation +import androidx.media3.transformer.Composition +import androidx.media3.transformer.DefaultEncoderFactory +import androidx.media3.transformer.EditedMediaItem +import androidx.media3.transformer.Effects +import androidx.media3.transformer.ExportException +import androidx.media3.transformer.ExportResult +import androidx.media3.transformer.ProgressHolder +import androidx.media3.transformer.TransformationRequest +import androidx.media3.transformer.Transformer +import androidx.media3.transformer.VideoEncoderSettings import io.element.android.libraries.androidutils.file.createTmpFile -import io.element.android.libraries.androidutils.file.getMimeType import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.di.ApplicationContext +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import javax.inject.Inject -private const val MP4_EXTENSION = "mp4" - class VideoCompressor @Inject constructor( @ApplicationContext private val context: Context, ) { - fun compress(uri: Uri, shouldBeCompressed: Boolean) = callbackFlow { + @OptIn(UnstableApi::class) + fun compress(uri: Uri, shouldBeCompressed: Boolean): Flow = callbackFlow { val metadata = getVideoMetadata(uri) - val expectedExtension = MimeTypeMap.getSingleton().getExtensionFromMimeType(context.getMimeType(uri)) - - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, + val videoCompressorConfig = VideoCompressorConfigFactory.create( metadata = metadata, shouldBeCompressed = shouldBeCompressed ) - val tmpFile = context.createTmpFile(extension = MP4_EXTENSION) - val future = Transcoder.into(tmpFile.path) - .setVideoTrackStrategy(videoStrategy) - .addDataSource(context, uri) - // Force the output to be written, even if no transcoding was actually needed - .setValidator(WriteAlwaysValidator()) - .setListener(object : TranscoderListener { - override fun onTranscodeProgress(progress: Double) { - trySend(VideoTranscodingEvent.Progress(progress.toFloat())) - } + val tmpFile = context.createTmpFile(extension = "mp4") - override fun onTranscodeCompleted(successCode: Int) { + val width = metadata?.width ?: Int.MAX_VALUE + val height = metadata?.height ?: Int.MAX_VALUE + + val videoResizeEffect = videoCompressorConfig.resizer?.let { + val outputSize = it.getOutputSize(Size(width, height)) + if (metadata?.rotation == 90 || metadata?.rotation == 270) { + // If the video is rotated, we need to swap width and height + Presentation.createForWidthAndHeight( + outputSize.height, + outputSize.width, + Presentation.LAYOUT_SCALE_TO_FIT, + ) + } else { + // Otherwise, we can use the original width and height + Presentation.createForWidthAndHeight( + outputSize.width, + outputSize.height, + Presentation.LAYOUT_SCALE_TO_FIT, + ) + } + } + + // If we are resizing, we also want to reduce set frame rate to the default value (30fps) + val newFrameRate = videoCompressorConfig.newFrameRate + + // If we need to resize the video, we also want to recalculate the bitrate + val newBitrate = videoCompressorConfig.newBitRate + + val inputMediaItem = MediaItem.fromUri(uri) + val outputMediaItem = EditedMediaItem.Builder(inputMediaItem) + .setFrameRate(newFrameRate) + .run { + if (videoResizeEffect != null) { + setEffects(Effects(emptyList(), listOf(videoResizeEffect))) + } else { + this + } + } + .build() + + val encoderFactory = DefaultEncoderFactory.Builder(context) + .setRequestedVideoEncoderSettings( + VideoEncoderSettings.Builder() + .setBitrateMode(MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_CBR) + .setBitrate(newBitrate) + .build() + ) + .build() + + val videoTransformer = Transformer.Builder(context) + .setVideoMimeType(MimeTypes.VIDEO_H264) + .setAudioMimeType(MimeTypes.AUDIO_AAC) + .setPortraitEncodingEnabled(false) + .setEncoderFactory(encoderFactory) + .addListener(object : Transformer.Listener { + override fun onCompleted(composition: Composition, exportResult: ExportResult) { trySend(VideoTranscodingEvent.Completed(tmpFile)) close() } - override fun onTranscodeCanceled() { + override fun onError(composition: Composition, exportResult: ExportResult, exportException: ExportException) { + Timber.e(exportException, "Video transcoding failed") tmpFile.safeDelete() - close() + close(exportException) } - override fun onTranscodeFailed(exception: Throwable) { - tmpFile.safeDelete() - close(exception) - } + override fun onFallbackApplied( + composition: Composition, + originalTransformationRequest: TransformationRequest, + fallbackTransformationRequest: TransformationRequest + ) = Unit }) - .transcode() + .build() + + val progressJob = launch(Dispatchers.Main) { + val progressHolder = ProgressHolder() + while (isActive) { + val state = videoTransformer.getProgress(progressHolder) + if (state != Transformer.PROGRESS_STATE_NOT_STARTED) { + channel.send(VideoTranscodingEvent.Progress(progressHolder.progress.toFloat())) + } + delay(500) + } + } + + withContext(Dispatchers.Main) { + videoTransformer.start(outputMediaItem, tmpFile.path) + } awaitClose { - if (!future.isDone) { - future.cancel(true) - } + progressJob.cancel() } } @@ -89,7 +159,7 @@ class VideoCompressor @Inject constructor( val width = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toIntOrNull() ?: -1 val height = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toIntOrNull() ?: -1 val bitrate = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)?.toLongOrNull() ?: -1 - val framerate = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE)?.toIntOrNull() ?: -1 + val frameRate = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE)?.toIntOrNull() ?: -1 val rotation = it.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)?.toIntOrNull() ?: 0 val (actualWidth, actualHeight) = if (width == -1 || height == -1) { @@ -104,7 +174,7 @@ class VideoCompressor @Inject constructor( width = actualWidth, height = actualHeight, bitrate = bitrate, - frameRate = framerate, + frameRate = frameRate, rotation = rotation, ) } @@ -126,45 +196,3 @@ sealed interface VideoTranscodingEvent { data class Progress(val value: Float) : VideoTranscodingEvent data class Completed(val file: File) : VideoTranscodingEvent } - -internal object VideoStrategyFactory { - // 720p - private const val MAX_COMPRESSED_PIXEL_SIZE = 1280 - - // 1080p - private const val MAX_PIXEL_SIZE = 1920 - - fun create( - expectedExtension: String?, - metadata: VideoFileMetadata?, - shouldBeCompressed: Boolean, - ): TrackStrategy { - val width = metadata?.width?.takeIf { it >= 0 } ?: Int.MAX_VALUE - val height = metadata?.height?.takeIf { it >= 0 } ?: Int.MAX_VALUE - val bitrate = metadata?.bitrate?.takeIf { it >= 0 } - val frameRate = metadata?.frameRate?.takeIf { it >= 0 } - val rotation = metadata?.rotation?.takeIf { it >= 0 } - - // We only create a resizer if needed - val resizer = when { - shouldBeCompressed && (width > MAX_COMPRESSED_PIXEL_SIZE || height > MAX_COMPRESSED_PIXEL_SIZE) -> AtMostResizer(MAX_COMPRESSED_PIXEL_SIZE) - width > MAX_PIXEL_SIZE || height > MAX_PIXEL_SIZE -> AtMostResizer(MAX_PIXEL_SIZE) - else -> null - } - - return if (resizer == null && rotation == 0 && expectedExtension == MP4_EXTENSION) { - // If there's no transcoding or resizing needed for the video file, just create a new file with the same contents but no metadata - // Rotation is not kept by the PassThroughTrackStrategy, so we need to ensure the video is not rotated - PassThroughTrackStrategy() - } else { - DefaultVideoStrategy.Builder() - .apply { - resizer?.let { addResizer(it) } - bitrate?.let { bitRate(it) } - frameRate?.let { frameRate(it) } - } - .mimeType(MediaFormatConstants.MIMETYPE_VIDEO_AVC) - .build() - } - } -} diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfig.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfig.kt new file mode 100644 index 0000000000..1508a70c35 --- /dev/null +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfig.kt @@ -0,0 +1,93 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.mediaupload.impl + +import androidx.annotation.OptIn +import androidx.media3.common.util.Size +import androidx.media3.common.util.UnstableApi +import androidx.media3.transformer.VideoEncoderSettings +import kotlin.math.min +import kotlin.math.roundToInt + +@OptIn(UnstableApi::class) +internal object VideoCompressorConfigFactory { + // Major dimension of 720p + private const val MAX_COMPRESSED_PIXEL_SIZE = 1280 + + // Major dimension of 1080p + private const val MAX_PIXEL_SIZE = 1920 + + private const val DEFAULT_FRAME_RATE = 30 + + fun create( + metadata: VideoFileMetadata?, + shouldBeCompressed: Boolean, + ): VideoCompressorConfig { + val width = metadata?.width?.takeIf { it >= 0 } ?: Int.MAX_VALUE + val height = metadata?.height?.takeIf { it >= 0 } ?: Int.MAX_VALUE + val originalBitrate = metadata?.bitrate?.takeIf { it >= 0 } + val originalFrameRate = metadata?.frameRate?.takeIf { it >= 0 } ?: DEFAULT_FRAME_RATE + + // We only create a resizer if needed + val resizer = when { + shouldBeCompressed && (width > MAX_COMPRESSED_PIXEL_SIZE || height > MAX_COMPRESSED_PIXEL_SIZE) -> VideoResizer(MAX_COMPRESSED_PIXEL_SIZE) + width > MAX_PIXEL_SIZE || height > MAX_PIXEL_SIZE -> VideoResizer(MAX_PIXEL_SIZE) + else -> null + } + + // If we are resizing, we also want to reduce the frame rate to the default value (30fps) + val newFrameRate = if (resizer is VideoResizer) { + min(originalFrameRate, DEFAULT_FRAME_RATE) + } else { + originalFrameRate + } + + // If we need to resize the video, we also want to recalculate the bitrate + val newBitrate = if (resizer is VideoResizer) { + val maxSize = resizer.getOutputSize(Size(width, height)) + val pixelsPerFrame = maxSize.width * maxSize.height + val frameRate = newFrameRate + // Apparently, 0.1 bits per pixel is a sweet spot for video compression + val bitsPerPixel = 0.1f + + (pixelsPerFrame * bitsPerPixel * frameRate).toLong() + } else { + originalBitrate + } + + return VideoCompressorConfig( + resizer = resizer, + newBitRate = newBitrate?.toInt() ?: VideoEncoderSettings.NO_VALUE, + newFrameRate = newFrameRate, + ) + } +} + +@OptIn(UnstableApi::class) +internal data class VideoCompressorConfig( + val resizer: VideoResizer?, + val newBitRate: Int, + val newFrameRate: Int, +) + +@OptIn(UnstableApi::class) +internal class VideoResizer( + val maxSize: Int, +) { + fun getOutputSize(inputSize: Size): Size { + val resultMajor = min(inputSize.major(), maxSize) + val aspectRatio = inputSize.major().toFloat() / inputSize.minor().toFloat() + return Size(resultMajor, (resultMajor / aspectRatio).roundToInt()) + } +} + +@OptIn(UnstableApi::class) +internal fun Size.major(): Int = if (width > height) width else height + +@OptIn(UnstableApi::class) +internal fun Size.minor(): Int = if (width < height) width else height diff --git a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfigFactoryTest.kt b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfigFactoryTest.kt new file mode 100644 index 0000000000..5050d14a3e --- /dev/null +++ b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressorConfigFactoryTest.kt @@ -0,0 +1,108 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.mediaupload.impl + +import androidx.media3.transformer.VideoEncoderSettings +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@Suppress("NOTHING_TO_INLINE") +@RunWith(RobolectricTestRunner::class) +class VideoCompressorConfigFactoryTest { + @Test + fun `if we don't have metadata the video will be resized`() { + // Given + val metadata = null + val shouldBeCompressed = false + + // When + val videoCompressorConfig = VideoCompressorConfigFactory.create( + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertThat(videoCompressorConfig.resizer).isNotNull() + assertThat(videoCompressorConfig.newFrameRate).isEqualTo(30) + assertThat(videoCompressorConfig.newBitRate).isNotEqualTo(VideoEncoderSettings.NO_VALUE) + } + + @Test + fun `if the video should be compressed and is larger than 720p it will be resized`() { + // Given + val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) + val shouldBeCompressed = true + + // When + val videoCompressorConfig = VideoCompressorConfigFactory.create( + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertIsResized(videoCompressorConfig) + } + + @Test + fun `if the video should be compressed and is smaller or equal to 720p it will not be resized`() { + // Given + val metadata = VideoFileMetadata(width = 1280, height = 720, bitrate = 1_000_000, frameRate = 50, rotation = 0) + val shouldBeCompressed = true + + // When + val videoCompressorConfig = VideoCompressorConfigFactory.create( + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertIsNotResized(videoCompressorConfig) + } + + @Test + fun `if the video should not be compressed and is larger than 1080p it will be resized`() { + // Given + val metadata = VideoFileMetadata(width = 2560, height = 1440, bitrate = 1_000_000, frameRate = 50, rotation = 0) + val shouldBeCompressed = false + + // When + val videoCompressorConfig = VideoCompressorConfigFactory.create( + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertIsResized(videoCompressorConfig) + } + + @Test + fun `if the video should not be compressed and is smaller or equal than 1080p it will not be resized`() { + // Given + val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) + val shouldBeCompressed = false + + // When + val videoCompressorConfig = VideoCompressorConfigFactory.create( + metadata = metadata, + shouldBeCompressed = shouldBeCompressed + ) + + // Then + assertIsNotResized(videoCompressorConfig) + } + + private inline fun assertIsResized(videoCompressorConfig: VideoCompressorConfig) { + assertThat(videoCompressorConfig.resizer).isNotNull() + } + + private inline fun assertIsNotResized(videoCompressorConfig: VideoCompressorConfig) { + assertThat(videoCompressorConfig.resizer).isNull() + } +} diff --git a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt b/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt deleted file mode 100644 index 9f030aa847..0000000000 --- a/libraries/mediaupload/impl/src/test/kotlin/io/element/android/libraries/mediaupload/impl/VideoStrategyFactoryTest.kt +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2025 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.libraries.mediaupload.impl - -import com.otaliastudios.transcoder.strategy.DefaultVideoStrategy -import com.otaliastudios.transcoder.strategy.PassThroughTrackStrategy -import com.otaliastudios.transcoder.strategy.TrackStrategy -import org.junit.Test -import org.junit.runner.RunWith -import org.robolectric.RobolectricTestRunner - -@Suppress("NOTHING_TO_INLINE") -@RunWith(RobolectricTestRunner::class) -class VideoStrategyFactoryTest { - @Test - fun `if we don't have metadata the video will be transcoded just in case`() { - // Given - val expectedExtension = "mp4" - val metadata = null - val shouldBeCompressed = true - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - @Test - fun `if the video should be compressed and is larger than 720p it will be transcoded`() { - // Given - val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = true - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - @Test - fun `if the video should be compressed, has the right format and is smaller or equal to 720p it will not be transcoded`() { - // Given - val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1280, height = 720, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = true - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsNotTranscoded(videoStrategy) - } - - @Test - fun `if the video should not be compressed and is larger than 1080p it will be transcoded`() { - // Given - val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 2560, height = 1440, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = false - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - @Test - fun `if the video should not be compressed, has the right format and is smaller or equal than 1080p it will not be transcoded`() { - // Given - val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 1920, height = 1080, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = false - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsNotTranscoded(videoStrategy) - } - - @Test - fun `if the video should not be compressed but has a wrong format it will be transcoded`() { - // Given - val expectedExtension = "mkv" - val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = false - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - @Test - fun `if the video should be compressed and has a wrong format it will be transcoded`() { - // Given - val expectedExtension = "mkv" - val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 0) - val shouldBeCompressed = true - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - @Test - fun `if the video should not be compressed but has a rotation not zero it will be transcoded`() { - // Given - val expectedExtension = "mp4" - val metadata = VideoFileMetadata(width = 320, height = 240, bitrate = 1_000_000, frameRate = 50, rotation = 90) - val shouldBeCompressed = false - - // When - val videoStrategy = VideoStrategyFactory.create( - expectedExtension = expectedExtension, - metadata = metadata, - shouldBeCompressed = shouldBeCompressed - ) - - // Then - assertIsTranscoded(videoStrategy) - } - - private inline fun assertIsTranscoded(videoStrategy: TrackStrategy) { - assert(videoStrategy is DefaultVideoStrategy) - } - - private inline fun assertIsNotTranscoded(videoStrategy: TrackStrategy) { - assert(videoStrategy is PassThroughTrackStrategy) - } -} From ef11a3bfbb43cf4a18b39b82b26abf6367232001 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 15:41:06 +0200 Subject: [PATCH 67/69] Update dependency org.matrix.rustcomponents:sdk-android to v25.7.15 (#5011) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jorge Martín --- gradle/libs.versions.toml | 2 +- .../impl/auth/RustMatrixAuthenticationService.kt | 12 ++++++++---- .../impl/fixtures/fakes/FakeFfiClientBuilder.kt | 7 ------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b2cca061c7..d6f8d90c9d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -176,7 +176,7 @@ jsoup = "org.jsoup:jsoup:1.21.1" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.1.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.10" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:25.7.15" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index 506abcf5da..a66c80c691 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -43,7 +43,6 @@ import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.ClientBuilder import org.matrix.rustcomponents.sdk.HumanQrLoginException -import org.matrix.rustcomponents.sdk.OidcConfiguration import org.matrix.rustcomponents.sdk.QrCodeData import org.matrix.rustcomponents.sdk.QrCodeDecodeException import org.matrix.rustcomponents.sdk.QrLoginProgress @@ -199,6 +198,8 @@ class RustMatrixAuthenticationService @Inject constructor( oidcConfiguration = oidcConfigurationProvider.get(), prompt = prompt.toRustPrompt(), loginHint = loginHint, + // If we want to restore a previous session for which we have encryption keys, we can pass the deviceId here. At the moment, we don't + deviceId = null, ) val url = oAuthAuthorizationData.loginUrl() pendingOAuthAuthorizationData = oAuthAuthorizationData @@ -274,9 +275,13 @@ class RustMatrixAuthenticationService @Inject constructor( sessionPaths = emptySessionPaths, passphrase = pendingPassphrase, qrCodeData = sdkQrCodeLoginData, + ) + client.loginWithQrCode( + qrCodeData = qrCodeData.rustQrCodeData, oidcConfiguration = oidcConfiguration, progressListener = progressListener, ) + val sessionData = client.session() .toSessionData( isTokenValid = true, @@ -324,8 +329,6 @@ class RustMatrixAuthenticationService @Inject constructor( sessionPaths: SessionPaths, passphrase: String?, qrCodeData: QrCodeData, - oidcConfiguration: OidcConfiguration, - progressListener: QrLoginProgressListener, ): Client { Timber.d("Creating client for QR Code login with simplified sliding sync") return rustMatrixClientFactory @@ -335,7 +338,8 @@ class RustMatrixAuthenticationService @Inject constructor( slidingSyncType = ClientBuilderSlidingSync.Discovered, ) .sessionPassphrase(passphrase) - .buildWithQrCode(qrCodeData, oidcConfiguration, progressListener) + .serverNameOrHomeserverUrl(qrCodeData.serverName()!!) + .build() } private fun clear() { diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt index 3ddb8c2cee..911219cac3 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeFfiClientBuilder.kt @@ -11,9 +11,6 @@ import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.ClientBuilder import org.matrix.rustcomponents.sdk.ClientSessionDelegate import org.matrix.rustcomponents.sdk.NoPointer -import org.matrix.rustcomponents.sdk.OidcConfiguration -import org.matrix.rustcomponents.sdk.QrCodeData -import org.matrix.rustcomponents.sdk.QrLoginProgressListener import org.matrix.rustcomponents.sdk.RequestConfig import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder import uniffi.matrix_sdk.BackupDownloadStrategy @@ -43,10 +40,6 @@ class FakeFfiClientBuilder : ClientBuilder(NoPointer) { override fun username(username: String) = this override fun enableShareHistoryOnInvite(enableShareHistoryOnInvite: Boolean): ClientBuilder = this - override suspend fun buildWithQrCode(qrCodeData: QrCodeData, oidcConfiguration: OidcConfiguration, progressListener: QrLoginProgressListener): Client { - return FakeFfiClient() - } - override suspend fun build(): Client { return FakeFfiClient(withUtdHook = {}) } From fc1ef3d654729876d9e7bf76cc9705029e379eeb Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 15 Jul 2025 17:01:21 +0200 Subject: [PATCH 68/69] Setting version for the release 25.07.1 --- plugins/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/kotlin/Versions.kt b/plugins/src/main/kotlin/Versions.kt index 5b29dd4dd2..64f7a6d7fb 100644 --- a/plugins/src/main/kotlin/Versions.kt +++ b/plugins/src/main/kotlin/Versions.kt @@ -32,7 +32,7 @@ private const val versionYear = 25 private const val versionMonth = 7 // Note: must be in [0,99] -private const val versionReleaseNumber = 0 +private const val versionReleaseNumber = 1 object Versions { const val VERSION_CODE = (2000 + versionYear) * 10_000 + versionMonth * 100 + versionReleaseNumber From febb88960c7d4a911f7ddcfbb5aa7310851ab60d Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 15 Jul 2025 17:02:03 +0200 Subject: [PATCH 69/69] Adding fastlane file for version 25.07.1 --- fastlane/metadata/android/en-US/changelogs/202507010.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/202507010.txt diff --git a/fastlane/metadata/android/en-US/changelogs/202507010.txt b/fastlane/metadata/android/en-US/changelogs/202507010.txt new file mode 100644 index 0000000000..42a042fb06 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/202507010.txt @@ -0,0 +1,2 @@ +Main changes in this version: improvements and bug fixes. +Full changelog: https://github.com/element-hq/element-x-android/releases \ No newline at end of file