From 9c7c66b22228060b067e696b347207d45cd4877a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:17:30 +0200 Subject: [PATCH 01/24] Fix padding issue on `RoomPreviewMembersCountMolecule` --- .../atomic/molecules/RoomPreviewMembersCountMolecule.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt index a781c429b0..f39e3b19dc 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/molecules/RoomPreviewMembersCountMolecule.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -42,8 +41,7 @@ fun RoomPreviewMembersCountMolecule( Row( modifier = modifier .background(color = ElementTheme.colors.bgSubtleSecondary, shape = CircleShape) - .widthIn(min = 48.dp) - .padding(start = 2.dp, end = 6.dp, top = 2.dp, bottom = 2.dp), + .padding(start = 2.dp, end = 8.dp, top = 2.dp, bottom = 2.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { From 2701a6f87da1705add8c187f6ea2080d7ae459dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:45:42 +0200 Subject: [PATCH 02/24] Add UI test on JoinRoomView --- features/joinroom/impl/build.gradle.kts | 8 ++ .../joinroom/impl/JoinRoomViewTest.kt | 129 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt diff --git a/features/joinroom/impl/build.gradle.kts b/features/joinroom/impl/build.gradle.kts index 03d3051546..33fdbb6b47 100644 --- a/features/joinroom/impl/build.gradle.kts +++ b/features/joinroom/impl/build.gradle.kts @@ -23,6 +23,11 @@ plugins { android { namespace = "io.element.android.features.joinroom.impl" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } anvil { @@ -46,10 +51,13 @@ dependencies { testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) testImplementation(libs.molecule.runtime) + testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) ksp(libs.showkase.processor) } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt new file mode 100644 index 0000000000..a139808978 --- /dev/null +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.joinroom.impl + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.pressBack +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class JoinRoomViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on back invoke the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setJoinRoomView( + aJoinRoomState( + eventSink = eventsRecorder, + ), + onBackPressed = it + ) + rule.pressBack() + } + } + + @Test + fun `clicking on Join room on CanJoin room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_join_room_join_action) + eventsRecorder.assertSingle(JoinRoomEvents.JoinRoom) + } + + @Test + fun `clicking on Knock room on CanKnock room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanKnock), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(R.string.screen_join_room_knock_action) + eventsRecorder.assertSingle(JoinRoomEvents.JoinRoom) + } + + @Test + fun `clicking on Accept invitationon IsInvited room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_accept) + eventsRecorder.assertSingle(JoinRoomEvents.AcceptInvite) + } + + @Test + fun `clicking on Decline invitation on IsInvited room emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_decline) + eventsRecorder.assertSingle(JoinRoomEvents.DeclineInvite) + } + + @Test + fun `clicking on Retry when an error occurs emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setJoinRoomView( + aJoinRoomState( + contentState = aFailureContentState(), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_retry) + eventsRecorder.assertSingle(JoinRoomEvents.RetryFetchingContent) + } +} + +private fun AndroidComposeTestRule.setJoinRoomView( + state: JoinRoomState, + onBackPressed: () -> Unit = EnsureNeverCalled(), +) { + setContent { + JoinRoomView( + state = state, + onBackPressed = onBackPressed, + ) + } +} + From 50a011a0f384f92b1a223c1d76e867311e897c87 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 11:57:50 +0200 Subject: [PATCH 03/24] Add UI test on RoomAliasResolverView --- .../roomaliasresolver/impl/build.gradle.kts | 8 ++ .../impl/RoomAliasResolverViewTest.kt | 97 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt diff --git a/features/roomaliasresolver/impl/build.gradle.kts b/features/roomaliasresolver/impl/build.gradle.kts index eaf2773231..00be3b0076 100644 --- a/features/roomaliasresolver/impl/build.gradle.kts +++ b/features/roomaliasresolver/impl/build.gradle.kts @@ -23,6 +23,11 @@ plugins { android { namespace = "io.element.android.features.roomaliasresolver.impl" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } anvil { @@ -44,10 +49,13 @@ dependencies { testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) testImplementation(libs.molecule.runtime) + testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(projects.libraries.matrix.test) testImplementation(projects.tests.testutils) + testImplementation(libs.androidx.compose.ui.test.junit) + testReleaseImplementation(libs.androidx.compose.ui.test.manifest) ksp(libs.showkase.processor) } diff --git a/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt new file mode 100644 index 0000000000..6df8a7849e --- /dev/null +++ b/features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverViewTest.kt @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomaliasresolver.impl + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EnsureNeverCalledWithParam +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import io.element.android.tests.testutils.ensureCalledOnceWithParam +import io.element.android.tests.testutils.pressBack +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class RoomAliasResolverViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on back invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + eventSink = eventsRecorder, + ), + onBackPressed = it + ) + rule.pressBack() + } + } + + @Test + fun `clicking on Retry emits the expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + resolveState = AsyncData.Failure(Exception("Error")), + eventSink = eventsRecorder, + ), + ) + rule.clickOn(CommonStrings.action_retry) + eventsRecorder.assertSingle(RoomAliasResolverEvents.Retry) + } + + @Test + fun `success state invokes the expected Callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnceWithParam(A_ROOM_ID) { + rule.setRoomAliasResolverView( + aRoomAliasResolverState( + resolveState = AsyncData.Success(A_ROOM_ID), + eventSink = eventsRecorder, + ), + onAliasResolved = it, + ) + } + } +} + +private fun AndroidComposeTestRule.setRoomAliasResolverView( + state: RoomAliasResolverState, + onBackPressed: () -> Unit = EnsureNeverCalled(), + onAliasResolved: (RoomId) -> Unit = EnsureNeverCalledWithParam(), +) { + setContent { + RoomAliasResolverView( + state = state, + onBackPressed = onBackPressed, + onAliasResolved = onAliasResolved, + ) + } +} From dc2dd436259ff8bb9efc441a40738e2ed2529f7b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:08:08 +0200 Subject: [PATCH 04/24] Use SuperButton on JoinRoomView, and set all button to size Large --- .../features/joinroom/impl/JoinRoomView.kt | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 6802e7f77c..d13fa3902b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -38,6 +38,7 @@ import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.components.button.SuperButton import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Button @@ -97,7 +98,7 @@ private fun JoinRoomFooter( text = stringResource(CommonStrings.action_retry), onClick = onRetry, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } else { val joinAuthorisationStatus = state.joinAuthorisationStatus @@ -108,30 +109,33 @@ private fun JoinRoomFooter( text = stringResource(CommonStrings.action_decline), onClick = onDeclineInvite, modifier = Modifier.weight(1f), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) Button( text = stringResource(CommonStrings.action_accept), onClick = onAcceptInvite, modifier = Modifier.weight(1f), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } } JoinAuthorisationStatus.CanJoin -> { - Button( - text = stringResource(R.string.screen_join_room_join_action), + SuperButton( onClick = onJoinRoom, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, - ) + buttonSize = ButtonSize.Large, + ) { + Text( + text = stringResource(R.string.screen_join_room_join_action), + ) + } } JoinAuthorisationStatus.CanKnock -> { Button( text = stringResource(R.string.screen_join_room_knock_action), onClick = onJoinRoom, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } JoinAuthorisationStatus.Unknown -> Unit From 679e02b00cb8f95a84efd05f6b04de62da34395b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:04:12 +0200 Subject: [PATCH 05/24] Use Large button on RoomAliasResolverView --- .../features/roomaliasresolver/impl/RoomAliasResolverView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 271baad845..72ce1978e1 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -92,7 +92,7 @@ private fun RoomAliasResolverFooter( state.eventSink(RoomAliasResolverEvents.Retry) }, modifier = modifier.fillMaxWidth(), - size = ButtonSize.Medium, + size = ButtonSize.Large, ) } is AsyncData.Loading -> { From 0d14cdcf5df19f564f18a5bb503c27b3efe77892 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 12:36:56 +0200 Subject: [PATCH 06/24] Use SuperButton for RoomDirectorySearchButton --- .../impl/search/RoomListSearchView.kt | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt index a3640d2d77..331ae66587 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchView.kt @@ -21,9 +21,12 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.ExperimentalMaterial3Api @@ -32,6 +35,7 @@ import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.FocusRequester @@ -49,14 +53,15 @@ import io.element.android.features.roomlist.impl.components.RoomSummaryRow import io.element.android.features.roomlist.impl.contentType import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.components.button.SuperButton import io.element.android.libraries.designsystem.modifiers.applyIf import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton -import io.element.android.libraries.designsystem.theme.components.IconSource import io.element.android.libraries.designsystem.theme.components.Scaffold +import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextField import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.utils.copy @@ -179,8 +184,8 @@ private fun RoomListSearchContent( if (state.displayRoomDirectorySearch) { RoomDirectorySearchButton( modifier = Modifier - .fillMaxWidth() - .padding(vertical = 24.dp, horizontal = 16.dp), + .fillMaxWidth() + .padding(vertical = 24.dp, horizontal = 16.dp), onClick = onRoomDirectorySearchClicked ) } @@ -207,12 +212,24 @@ private fun RoomDirectorySearchButton( onClick: () -> Unit, modifier: Modifier = Modifier ) { - Button( - text = stringResource(id = R.string.screen_roomlist_room_directory_button_title), - leadingIcon = IconSource.Vector(CompoundIcons.ListBulleted()), + SuperButton( onClick = onClick, modifier = modifier, - ) + buttonSize = ButtonSize.Large, + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = CompoundIcons.ListBulleted(), + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.screen_roomlist_room_directory_button_title), + ) + } + } } @PreviewsDayNight From c98cb56b7468b53ad2ff28b520ec35fbb5d03b6c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 13:08:56 +0200 Subject: [PATCH 07/24] Add first UI test on RoomListSearchView --- .../impl/search/RoomListSearchViewTest.kt | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt new file mode 100644 index 0000000000..0c437f8553 --- /dev/null +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.roomlist.impl.search + +import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.roomlist.impl.R +import io.element.android.features.roomlist.impl.RoomListEvents +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.tests.testutils.EnsureNeverCalled +import io.element.android.tests.testutils.EnsureNeverCalledWithParam +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.ensureCalledOnce +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TestRule +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class RoomListSearchViewTest { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on 'Browse all rooms' invokes the expected callback`() { + val eventsRecorder = EventsRecorder(expectEvents = false) + ensureCalledOnce { + rule.setRoomListSearchView( + aRoomListSearchState( + isSearchActive = true, + isRoomDirectorySearchEnabled = true, + eventSink = eventsRecorder, + ), + onRoomDirectorySearchClicked = it, + ) + rule.clickOn(R.string.screen_roomlist_room_directory_button_title) + } + } +} + +private fun AndroidComposeTestRule.setRoomListSearchView( + state: RoomListSearchState, + eventSink: (RoomListEvents) -> Unit = EventsRecorder(expectEvents = false), + onRoomClicked: (RoomId) -> Unit = EnsureNeverCalledWithParam(), + onRoomDirectorySearchClicked: () -> Unit = EnsureNeverCalled(), +) { + setContent { + RoomListSearchView( + state = state, + eventSink = eventSink, + onRoomClicked = onRoomClicked, + onRoomDirectorySearchClicked = onRoomDirectorySearchClicked, + ) + } +} + From 4fe7b601af8621b5c7fdb3bd7c3de0a816afe1bb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 14:08:18 +0200 Subject: [PATCH 08/24] Add Konsist check to ensure that '@PreviewLightDark' is not used. --- .../android/tests/konsist/KonsistPreviewTest.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 f82f4dac7c..04f5e2c0b3 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 @@ -16,8 +16,10 @@ package io.element.android.tests.konsist +import androidx.compose.ui.tooling.preview.PreviewLightDark import com.lemonappdev.konsist.api.Konsist import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf +import com.lemonappdev.konsist.api.verify.assertEmpty import com.lemonappdev.konsist.api.verify.assertTrue import io.element.android.libraries.designsystem.preview.PreviewsDayNight import org.junit.Test @@ -57,4 +59,15 @@ class KonsistPreviewTest { it.hasInternalModifier } } + + @Test + fun `Ensure that '@PreviewLightDark' is not used`() { + Konsist + .scopeFromProject() + .functions() + .withAllAnnotationsOf(PreviewLightDark::class) + .assertEmpty( + additionalMessage = "Use '@PreviewsDayNight' instead of '@PreviewLightDark', or else screenshot(s) will not be generated.", + ) + } } From c02d5daf7d6f87efcf8a929d89965054b18a4afa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 14:31:38 +0200 Subject: [PATCH 09/24] Improve anInviteSender() and use it in RoomListStateProvider. --- .../features/roomlist/impl/RoomListStateProvider.kt | 8 ++------ .../impl/model/RoomListRoomSummaryProvider.kt | 13 +++++++------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index bdc8938503..bf73a74ef8 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -23,10 +23,10 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.roomlist.impl.filters.RoomListFiltersState import io.element.android.features.roomlist.impl.filters.aRoomListFiltersState -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary +import io.element.android.features.roomlist.impl.model.anInviteSender import io.element.android.features.roomlist.impl.search.RoomListSearchState import io.element.android.features.roomlist.impl.search.aRoomListSearchState import io.element.android.libraries.designsystem.components.avatar.AvatarData @@ -88,11 +88,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { name = "Room Invited", avatarData = AvatarData("!roomId", "Room with Alice and Bob", size = AvatarSize.RoomListItem), id = "!roomId:domain", - inviteSender = InviteSender( - userId = UserId("@bob:domain"), - displayName = "Bob", - avatarData = AvatarData("@bob:domain", "Bob", size = AvatarSize.InviteSender), - ), + inviteSender = anInviteSender(), displayType = RoomSummaryDisplayType.INVITE, ), aRoomListRoomSummary( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 7691fab188..25e0a35d25 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -86,7 +86,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider Date: Thu, 18 Apr 2024 14:46:12 +0200 Subject: [PATCH 10/24] Move InviteSender to `:library:matrixui` module. --- .../features/roomlist/impl/components/RoomSummaryRow.kt | 2 +- .../roomlist/impl/datasource/RoomListRoomSummaryFactory.kt | 2 +- .../features/roomlist/impl/model/RoomListRoomSummary.kt | 3 ++- .../roomlist/impl/model/RoomListRoomSummaryProvider.kt | 1 + .../android/libraries/matrix/ui/components}/InviteSender.kt | 4 ++-- libraries/matrixui/src/main/res/values/localazy.xml | 4 ++++ tools/localazy/config.json | 6 ++++++ 7 files changed, 17 insertions(+), 5 deletions(-) rename {features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model => libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components}/InviteSender.kt (95%) create mode 100644 libraries/matrixui/src/main/res/values/localazy.xml diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 92616f460e..5ff4c5b477 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.roomlist.impl.RoomListEvents -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryProvider import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType @@ -67,6 +66,7 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender import io.element.android.libraries.ui.strings.CommonStrings import timber.log.Timber diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index 541d3a265c..74af42aaa0 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -16,7 +16,6 @@ package io.element.android.features.roomlist.impl.datasource -import io.element.android.features.roomlist.impl.model.InviteSender import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomSummaryDisplayType import io.element.android.libraries.core.extensions.orEmpty @@ -27,6 +26,7 @@ import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomSummary +import io.element.android.libraries.matrix.ui.components.InviteSender import javax.inject.Inject class RoomListRoomSummaryFactory @Inject constructor( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 741da3adcc..ab24071ecc 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -21,6 +21,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender @Immutable data class RoomListRoomSummary( @@ -42,7 +43,7 @@ data class RoomListRoomSummary( val isDm: Boolean, val isFavorite: Boolean, val inviteSender: InviteSender?, - ) { +) { val isHighlighted = userDefinedNotificationMode != RoomNotificationMode.MUTE && (numberOfUnreadNotifications > 0 || numberOfUnreadMentions > 0) || isMarkedUnread || diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 25e0a35d25..7031a40c33 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -23,6 +23,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomNotificationMode +import io.element.android.libraries.matrix.ui.components.InviteSender open class RoomListRoomSummaryProvider : PreviewParameterProvider { override val values: Sequence diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt similarity index 95% rename from features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt index 64a47d5072..91c3e6ff40 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/InviteSender.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.features.roomlist.impl.model +package io.element.android.libraries.matrix.ui.components import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -24,9 +24,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight -import io.element.android.features.roomlist.impl.R import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.ui.R @Immutable data class InviteSender( diff --git a/libraries/matrixui/src/main/res/values/localazy.xml b/libraries/matrixui/src/main/res/values/localazy.xml new file mode 100644 index 0000000000..80939a8863 --- /dev/null +++ b/libraries/matrixui/src/main/res/values/localazy.xml @@ -0,0 +1,4 @@ + + + "%1$s (%2$s) invited you" + diff --git a/tools/localazy/config.json b/tools/localazy/config.json index 7d546df8ae..70eb82cdee 100644 --- a/tools/localazy/config.json +++ b/tools/localazy/config.json @@ -224,6 +224,12 @@ "troubleshoot_notifications_screen_.*" ] }, + { + "name" : ":libraries:matrixui", + "includeRegex" : [ + "screen_invites_invited_you" + ] + }, { "name" : ":features:call", "includeRegex" : [ From 473f0e839525149a68f26daab032ac3f9651b9c8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:19:03 +0200 Subject: [PATCH 11/24] Let JoinRoomView render the InviteSender --- .../joinroom/impl/JoinRoomPresenter.kt | 32 +++++++-- .../features/joinroom/impl/JoinRoomState.kt | 11 +-- .../joinroom/impl/JoinRoomStateProvider.kt | 19 +++++- .../features/joinroom/impl/JoinRoomView.kt | 16 ++++- .../joinroom/impl/JoinRoomPresenterTest.kt | 2 +- .../joinroom/impl/JoinRoomViewTest.kt | 4 +- .../impl/components/RoomSummaryRow.kt | 26 ++----- .../datasource/RoomListRoomSummaryFactory.kt | 15 +--- .../impl/model/RoomListRoomSummary.kt | 2 +- .../impl/model/RoomListRoomSummaryProvider.kt | 2 +- .../matrix/ui/components/InviteSenderView.kt | 68 +++++++++++++++++++ .../ui/{components => model}/InviteSender.kt | 15 +++- 12 files changed, 159 insertions(+), 53 deletions(-) create mode 100644 libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt rename libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/{components => model}/InviteSender.kt (81%) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 93399b0446..8e85b846cc 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -38,7 +38,11 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.ui.model.InviteSender +import io.element.android.libraries.matrix.ui.model.toInviteSender +import kotlinx.coroutines.flow.first import java.util.Optional +import kotlin.jvm.optionals.getOrNull class JoinRoomPresenter @AssistedInject constructor( @Assisted private val roomId: RoomId, @@ -74,10 +78,22 @@ class JoinRoomPresenter @AssistedInject constructor( else -> { value = ContentState.Loading(roomIdOrAlias) val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) - value = result.fold( - onSuccess = { it.toContentState() }, + result.fold( + onSuccess = { + value = it.toContentState(null) + if (it.isInvited) { + // Get the inviteSender + matrixClient.getRoomInfoFlow(roomId).first() + .getOrNull() + ?.inviter + ?.toInviteSender() + ?.let { inviteSender -> + value = it.toContentState(inviteSender) + } + } + }, onFailure = { throwable -> - if (throwable.message?.contains("403") == true) { + value = if (throwable.message?.contains("403") == true) { ContentState.UnknownRoom(roomIdOrAlias) } else { ContentState.Failure(roomIdOrAlias, throwable) @@ -118,7 +134,9 @@ class JoinRoomPresenter @AssistedInject constructor( } } -private fun RoomPreview.toContentState(): ContentState { +private fun RoomPreview.toContentState( + inviteSender: InviteSender? +): ContentState { return ContentState.Loaded( roomId = roomId, name = name, @@ -128,7 +146,7 @@ private fun RoomPreview.toContentState(): ContentState { isDirect = false, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - isInvited -> JoinAuthorisationStatus.IsInvited + isInvited -> JoinAuthorisationStatus.IsInvited(inviteSender) canKnock -> JoinAuthorisationStatus.CanKnock isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown @@ -165,7 +183,9 @@ internal fun MatrixRoomInfo.toContentState(): ContentState { isDirect = isDirect, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited + currentUserMembership == CurrentUserMembership.INVITED -> JoinAuthorisationStatus.IsInvited( + inviteSender = inviter?.toInviteSender() + ) isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 4d91135e9a..14f0cf2012 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -23,6 +23,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.ui.model.InviteSender @Immutable data class JoinRoomState( @@ -71,9 +72,9 @@ sealed interface ContentState { } } -enum class JoinAuthorisationStatus { - IsInvited, - CanKnock, - CanJoin, - Unknown, +sealed interface JoinAuthorisationStatus { + data class IsInvited(val inviteSender: InviteSender?) : JoinAuthorisationStatus + data object CanKnock : JoinAuthorisationStatus + data object CanJoin : JoinAuthorisationStatus + data object Unknown : JoinAuthorisationStatus } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 91c7ea1e37..9fec1683be 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -19,10 +19,14 @@ package io.element.android.features.joinroom.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.ui.model.InviteSender open class JoinRoomStateProvider : PreviewParameterProvider { override val values: Sequence @@ -48,7 +52,10 @@ open class JoinRoomStateProvider : PreviewParameterProvider { ) ), aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited) + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)) + ), + aJoinRoomState( + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender())) ), aJoinRoomState( contentState = aFailureContentState() @@ -102,5 +109,15 @@ fun aJoinRoomState( eventSink = eventSink ) +internal fun anInviteSender( + userId: UserId = UserId("@bob:domain"), + displayName: String = "Bob", + avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), +) = InviteSender( + userId = userId, + displayName = displayName, + avatarData = avatarData, +) + private val A_ROOM_ID = RoomId("!exa:matrix.org") private val A_ROOM_ALIAS = RoomAlias("#exa:matrix.org") diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index d13fa3902b..f0e947014a 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -17,11 +17,13 @@ package io.element.android.features.joinroom.impl import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -47,6 +49,7 @@ import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.ui.components.InviteSenderView import io.element.android.libraries.ui.strings.CommonStrings @Composable @@ -103,7 +106,7 @@ private fun JoinRoomFooter( } else { val joinAuthorisationStatus = state.joinAuthorisationStatus when (joinAuthorisationStatus) { - JoinAuthorisationStatus.IsInvited -> { + is JoinAuthorisationStatus.IsInvited -> { ButtonRowMolecule(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(20.dp)) { OutlinedButton( text = stringResource(CommonStrings.action_decline), @@ -159,7 +162,16 @@ private fun JoinRoomContent( RoomPreviewTitleAtom(contentState.computedTitle) }, subtitle = { - RoomPreviewSubtitleAtom(contentState.computedSubtitle) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + RoomPreviewSubtitleAtom(contentState.computedSubtitle) + val inviteSender = (contentState.joinAuthorisationStatus as? JoinAuthorisationStatus.IsInvited)?.inviteSender + if (inviteSender != null) { + InviteSenderView(inviteSender = inviteSender) + } + } }, description = { RoomPreviewDescriptionAtom(contentState.topic ?: "") diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index ff5a1b10b2..e2fa92a8a3 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -101,7 +101,7 @@ class JoinRoomPresenterTest { presenter.test { skipItems(1) awaitItem().also { state -> - assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited) + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited(null)) } } } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index a139808978..c8415e4b26 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -80,7 +80,7 @@ class JoinRoomViewTest { val eventsRecorder = EventsRecorder() rule.setJoinRoomView( aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)), eventSink = eventsRecorder, ), ) @@ -93,7 +93,7 @@ class JoinRoomViewTest { val eventsRecorder = EventsRecorder() rule.setJoinRoomView( aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited), + contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)), eventSink = eventsRecorder, ), ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 5ff4c5b477..77a93c46c1 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -66,7 +66,8 @@ import io.element.android.libraries.designsystem.theme.roomListRoomName import io.element.android.libraries.designsystem.theme.unreadIndicator import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.components.InviteSenderView +import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.ui.strings.CommonStrings import timber.log.Timber @@ -96,7 +97,10 @@ internal fun RoomSummaryRow( InviteSubtitle(isDirect = room.isDirect, inviteSender = room.inviteSender, canonicalAlias = room.canonicalAlias) if (!room.isDirect && room.inviteSender != null) { Spacer(modifier = Modifier.height(4.dp)) - InviteSenderRow(sender = room.inviteSender) + InviteSenderView( + modifier = Modifier.fillMaxWidth(), + inviteSender = room.inviteSender, + ) } Spacer(modifier = Modifier.height(12.dp)) InviteButtonsRow( @@ -290,24 +294,6 @@ private fun InviteNameAndIndicatorRow( } } -@Composable -private fun InviteSenderRow( - sender: InviteSender, - modifier: Modifier = Modifier -) { - Row( - horizontalArrangement = Arrangement.spacedBy(4.dp), - modifier = modifier.fillMaxWidth(), - ) { - Avatar(avatarData = sender.avatarData) - Text( - text = sender.annotatedString(), - style = ElementTheme.typography.fontBodyMdRegular, - color = MaterialTheme.colorScheme.secondary, - ) - } -} - @Composable private fun InviteButtonsRow( onAcceptClicked: () -> Unit, diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt index 74af42aaa0..80232563ed 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/datasource/RoomListRoomSummaryFactory.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomSummary -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.toInviteSender import javax.inject.Inject class RoomListRoomSummaryFactory @Inject constructor( @@ -83,18 +83,7 @@ class RoomListRoomSummaryFactory @Inject constructor( hasRoomCall = roomSummary.details.hasRoomCall, isDirect = roomSummary.details.isDirect, isFavorite = roomSummary.details.isFavorite, - inviteSender = roomSummary.details.inviter?.run { - InviteSender( - userId = userId, - displayName = displayName ?: "", - avatarData = AvatarData( - id = userId.value, - name = displayName, - url = avatarUrl, - size = AvatarSize.InviteSender, - ), - ) - }, + inviteSender = roomSummary.details.inviter?.toInviteSender(), isDm = roomSummary.details.isDm, canonicalAlias = roomSummary.details.canonicalAlias, displayType = if (roomSummary.details.currentUserMembership == CurrentUserMembership.INVITED) { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index ab24071ecc..84c4cd45c3 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.InviteSender @Immutable data class RoomListRoomSummary( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 7031a40c33..005044e60d 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -23,7 +23,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomNotificationMode -import io.element.android.libraries.matrix.ui.components.InviteSender +import io.element.android.libraries.matrix.ui.model.InviteSender open class RoomListRoomSummaryProvider : PreviewParameterProvider { override val values: Sequence diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt new file mode 100644 index 0000000000..6e5590e1a2 --- /dev/null +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import io.element.android.compound.theme.ElementTheme +import io.element.android.libraries.designsystem.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.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.ui.model.InviteSender + +@Composable +fun InviteSenderView( + inviteSender: InviteSender, + modifier: Modifier = Modifier +) { + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + modifier = modifier, + ) { + Avatar(avatarData = inviteSender.avatarData) + Text( + text = inviteSender.annotatedString(), + style = ElementTheme.typography.fontBodyMdRegular, + color = MaterialTheme.colorScheme.secondary, + ) + } +} + +@PreviewsDayNight +@Composable +internal fun InviteSenderViewPreview() = ElementPreview { + InviteSenderView( + inviteSender = InviteSender( + userId = UserId("@bob:example.com"), + displayName = "Bob", + avatarData = AvatarData( + id = "@bob:example.com", + name = "Bob", + url = null, + size = AvatarSize.InviteSender + ) + ) + ) +} diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt similarity index 81% rename from libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt index 91c3e6ff40..410fb7edbd 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSender.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/InviteSender.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.ui.components +package io.element.android.libraries.matrix.ui.model import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -25,7 +25,9 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.ui.R @Immutable @@ -54,3 +56,14 @@ data class InviteSender( } } } + +fun RoomMember.toInviteSender() = InviteSender( + userId = userId, + displayName = displayName ?: "", + avatarData = AvatarData( + id = userId.value, + name = displayName, + url = avatarUrl, + size = AvatarSize.InviteSender, + ), +) From 49fea8b7ae0e2895e5e75836554d58a30834c621 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:22:30 +0200 Subject: [PATCH 12/24] Fix vertical alignment. --- libraries/matrixui/build.gradle.kts | 1 + .../android/libraries/matrix/ui/components/InviteSenderView.kt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/libraries/matrixui/build.gradle.kts b/libraries/matrixui/build.gradle.kts index fa7a946959..6d955a7c05 100644 --- a/libraries/matrixui/build.gradle.kts +++ b/libraries/matrixui/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { anvil(projects.anvilcodegen) implementation(projects.libraries.di) implementation(projects.libraries.architecture) + implementation(projects.libraries.androidutils) implementation(projects.libraries.matrix.api) implementation(projects.libraries.designsystem) implementation(projects.libraries.core) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt index 6e5590e1a2..9ff54aa496 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/InviteSenderView.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme @@ -39,6 +40,7 @@ fun InviteSenderView( ) { Row( horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, modifier = modifier, ) { Avatar(avatarData = inviteSender.avatarData) From ebcca392b42fee52116fd8a2edcfe3c1d7e46131 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:43:44 +0200 Subject: [PATCH 13/24] SDK 0.2.15 (commit will be dropped) --- 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 534766c880..990ac198ae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -154,7 +154,7 @@ jsoup = "org.jsoup:jsoup:1.17.2" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:1.4.2" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.14" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.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" } From 64e22bc2f1ee7e04932e5959bed8e4e74932fda2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:45:19 +0200 Subject: [PATCH 14/24] Use now available SDK API. --- .../libraries/matrix/impl/RustMatrixClient.kt | 11 ++--- .../impl/room/preview/RoomPreviewMapper.kt | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index eae3095aae..48683d77ba 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -61,6 +61,7 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber import io.element.android.libraries.matrix.impl.room.RustMatrixRoom import io.element.android.libraries.matrix.impl.room.map +import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService @@ -463,21 +464,15 @@ class RustMatrixClient( } } - @Suppress("TooGenericExceptionThrown") override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = withContext(sessionDispatcher) { runCatching { - // TODO Waiting for SDK to be released - throw Exception("Not implemented") - // client.resolveRoomAlias(roomAlias.value).let(::RoomId) + client.resolveRoomAlias(roomAlias.value).let(::RoomId) } } - @Suppress("TooGenericExceptionThrown") override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = withContext(sessionDispatcher) { runCatching { - // TODO Waiting for SDK to be released - throw Exception("Not implemented") - // client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) + client.getRoomPreview(roomIdOrAlias.identifier).let(RoomPreviewMapper::map) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt new file mode 100644 index 0000000000..75286becda --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.matrix.impl.room.preview + +import io.element.android.libraries.matrix.api.core.RoomAlias +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview + +object RoomPreviewMapper { + fun map(roomPreview: RustRoomPreview): RoomPreview { + return RoomPreview( + roomId = RoomId(roomPreview.roomId), + canonicalAlias = roomPreview.canonicalAlias?.let(::RoomAlias), + name = roomPreview.name, + topic = roomPreview.topic, + avatarUrl = roomPreview.avatarUrl, + numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(), + roomType = roomPreview.roomType, + isHistoryWorldReadable = roomPreview.isHistoryWorldReadable, + isJoined = roomPreview.isJoined, + isInvited = roomPreview.isInvited, + isPublic = roomPreview.isPublic, + canKnock = roomPreview.canKnock + ) + } +} From 6d41f67c755d431c5e8349fcd6e33a76f6c472ff Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 15:50:51 +0200 Subject: [PATCH 15/24] Improve layout of inviter in RoomJoinView. --- .../features/joinroom/impl/JoinRoomStateProvider.kt | 5 ++++- .../android/features/joinroom/impl/JoinRoomView.kt | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 9fec1683be..9afd4dd797 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -55,7 +55,10 @@ open class JoinRoomStateProvider : PreviewParameterProvider { contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(null)) ), aJoinRoomState( - contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender())) + contentState = aLoadedContentState( + numberOfMembers = 123, + joinAuthorisationStatus = JoinAuthorisationStatus.IsInvited(anInviteSender()), + ) ), aJoinRoomState( contentState = aFailureContentState() diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index f0e947014a..567a63025d 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -162,20 +162,20 @@ private fun JoinRoomContent( RoomPreviewTitleAtom(contentState.computedTitle) }, subtitle = { + RoomPreviewSubtitleAtom(contentState.computedSubtitle) + }, + description = { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(8.dp), ) { - RoomPreviewSubtitleAtom(contentState.computedSubtitle) val inviteSender = (contentState.joinAuthorisationStatus as? JoinAuthorisationStatus.IsInvited)?.inviteSender if (inviteSender != null) { InviteSenderView(inviteSender = inviteSender) } + RoomPreviewDescriptionAtom(contentState.topic ?: "") } }, - description = { - RoomPreviewDescriptionAtom(contentState.topic ?: "") - }, memberCount = { if (contentState.showMemberCount) { RoomPreviewMembersCountMolecule(memberCount = contentState.numberOfMembers ?: 0) From 57870fa62419c2b6eb9c3a4417120c1321e33d2b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 17:19:44 +0200 Subject: [PATCH 16/24] Gradient Background --- .../background/LightGradientBackground.kt | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt new file mode 100644 index 0000000000..89eede3bc0 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/background/LightGradientBackground.kt @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2024 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.libraries.designsystem.background + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.geometry.center +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RadialGradientShader +import androidx.compose.ui.graphics.Shader +import androidx.compose.ui.graphics.ShaderBrush +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight + +class LightGradientBackground( + private val firstColor: Color = Color(0x1E0DBD8B), + private val secondColor: Color = Color(0x001273EB), + private val ratio: Float = 642 / 775f, +) : ShaderBrush() { + override fun createShader(size: Size): Shader { + val biggerDimension = size.width * 1.98f + return RadialGradientShader( + colors = listOf(firstColor, secondColor), + center = size.center.copy(x = size.width * ratio, y = size.height * ratio), + radius = biggerDimension / 2f, + colorStops = listOf(0f, 0.95f) + ) + } +} + +@PreviewsDayNight +@Composable +internal fun LightGradientBackgroundPreview() = ElementPreview { + val gradientBackground = remember { + LightGradientBackground() + } + Box( + modifier = Modifier + .fillMaxSize() + .background(gradientBackground) + ) +} From 4489df10854e5757488fbd881a36b314281f412d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 17:47:20 +0200 Subject: [PATCH 17/24] Apply Gradient Background to JoinRoomView and RoomAliasResolverView. --- .../android/features/joinroom/impl/JoinRoomView.kt | 8 +++++++- .../roomaliasresolver/impl/RoomAliasResolverView.kt | 9 +++++++-- .../designsystem/atomic/pages/HeaderFooterPage.kt | 4 ++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt index 567a63025d..f9bc97231b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt @@ -16,6 +16,7 @@ package io.element.android.features.joinroom.impl +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -23,8 +24,10 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter @@ -37,6 +40,7 @@ import io.element.android.libraries.designsystem.atomic.molecules.ButtonRowMolec import io.element.android.libraries.designsystem.atomic.molecules.RoomPreviewMembersCountMolecule import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton @@ -58,8 +62,10 @@ fun JoinRoomView( onBackPressed: () -> Unit, modifier: Modifier = Modifier, ) { + val gradientBackground = remember { LightGradientBackground() } HeaderFooterPage( - modifier = modifier, + modifier = modifier.background(gradientBackground), + containerColor = Color.Transparent, paddingValues = PaddingValues(16.dp), topBar = { JoinRoomTopBar(onBackClicked = onBackPressed) diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt index 72ce1978e1..e12ef4170d 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverView.kt @@ -16,6 +16,7 @@ package io.element.android.features.roomaliasresolver.impl +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -25,8 +26,10 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter @@ -36,6 +39,7 @@ import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom import io.element.android.libraries.designsystem.atomic.atoms.RoomPreviewTitleAtom import io.element.android.libraries.designsystem.atomic.organisms.RoomPreviewOrganism import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage +import io.element.android.libraries.designsystem.background.LightGradientBackground import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.preview.ElementPreview @@ -61,9 +65,10 @@ fun RoomAliasResolverView( latestOnAliasResolved(state.resolveState.data) } } - + val gradientBackground = remember { LightGradientBackground() } HeaderFooterPage( - modifier = modifier, + modifier = modifier.background(gradientBackground), + containerColor = Color.Transparent, paddingValues = PaddingValues(16.dp), topBar = { RoomAliasResolverTopBar(onBackClicked = onBackPressed) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt index 3cae67cb1b..f36d17a08d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt @@ -23,9 +23,11 @@ import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +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 @@ -46,6 +48,7 @@ import io.element.android.libraries.designsystem.theme.components.Text fun HeaderFooterPage( modifier: Modifier = Modifier, paddingValues: PaddingValues = PaddingValues(20.dp), + containerColor: Color = MaterialTheme.colorScheme.background, background: @Composable () -> Unit = {}, topBar: @Composable () -> Unit = {}, header: @Composable () -> Unit = {}, @@ -55,6 +58,7 @@ fun HeaderFooterPage( Scaffold( modifier = modifier, topBar = topBar, + containerColor = containerColor, ) { padding -> Box { background() From 8cd64d5a6f4d862d22becae1064bb9144e22e315 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 18 Apr 2024 15:57:22 +0000 Subject: [PATCH 18/24] Update screenshots --- ...mView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...mView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png | 3 +++ ...l_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...ull_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...l_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...ow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png | 4 ++-- ...null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png | 4 ++-- ...stSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...stSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...SearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...SearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...View_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...tView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png | 2 +- ...tView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png | 2 +- ...iew_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png | 4 ++-- ...ew_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png | 4 ++-- ...iew_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png | 4 ++-- ...PreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...eviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png | 4 ++-- ...ull_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...l_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ...iew_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png | 3 +++ ...w_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png | 3 +++ ...rixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png} | 0 ...xUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png} | 0 ..._null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png} | 0 ..._null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png} | 0 ...ull_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png} | 0 ...ull_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png} | 0 ...Row_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png} | 0 ...Row_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png} | 0 ...w_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png} | 0 ...w_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png} | 0 ...edRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png} | 0 ...Room_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png} | 0 ...SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png} | 0 ...ectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png} | 0 ...edUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png} | 0 ...User_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png} | 0 ..._null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png} | 0 ...ull_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png} | 0 ...tar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png} | 0 ...r_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png} | 0 66 files changed, 96 insertions(+), 78 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png => ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png index dc80770d93..780d5d96ba 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7406a2a6fa8e4dd4423a5141147ecc1aa235d4dbff980b7ef72fa2e59f502fc -size 7686 +oid sha256:a6e8a01993250ab9e5ecc869cedcd0b8f210bbe08623fbb55a1b8b0863bebb22 +size 125916 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png index e3c12ee174..01d0114013 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329ade4a3d0e1b013f03bf5d2d107ce2dacc235f7e2defc24c5cd1623330b107 -size 23944 +oid sha256:d7c1c180f53b948992d1f14d9635bcfee13fad55e772c9d74af62a747928a540 +size 143814 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png index 4ce8f03332..483a0e615c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ed85e4bb1351a1af82b64628c35aff7ef165c9df9b1ac0e1bba737a9d1e15a8 -size 25797 +oid sha256:1dc731d4a0c2aeb383035b3781f1e319fe34445e83324458e997df22a3d09bdc +size 145241 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png index 89c7b10b91..b209283185 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fcfb2b5cc790707f48dbd56f2c3f4909ebe1ae93b082309e7b0b89e82fec6c8 -size 39320 +oid sha256:2678e82f1e260b67ebbca47b41a0283d89bbc1799905c32f4e90821d7f41ce6c +size 148232 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png index d681433b5c..f9433453ec 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ba446e166858f6da8d79ae4af997ff142d73edebf178aadf75579b041a3d267 -size 28605 +oid sha256:3da95310c379b64cece500e9a942170f227dfe4c9d856690d2343ae9aaf47dc5 +size 144682 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png index f30069d89c..db53b3b31d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c34154223d9eef3a66fbc9c266010e3e51b293db7f4698d550638fa8912a231 -size 16864 +oid sha256:2128dda46d28adeabcd77ae254b98e5305c48cfc4578b53bd4b91c222a129e39 +size 151787 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png index 45d13a7673..c1f86c1efd 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e70d55552b46b1a34848651bf8bcf8048ba2d28c7d2d356f8c1a0f71bb6e049 -size 21104 +oid sha256:0134f458078bde571001caea88804e35e50dc89c4975bf4c7b86582662e63b08 +size 125696 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f5bbcd0456 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Day-0_1_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1eae5de422832fbe03a5ba5ed8281492c2bd4ad926330fac4759bec4b31943a8 +size 130094 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png index 2cec18ce5d..dff28c02ee 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa320f4667087c59776d08dfb9108a577e42eb51ba1e6b3d3ea6da3d55605495 -size 7523 +oid sha256:ded3501ef083c6b8ac2da5259fab157c65dec8034e1d1fe7b03fbe826a11ebad +size 109459 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png index cfafbbd9c2..98c6e9f858 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4244c5d24935e2cf6df3cff5d31eb7980757a1e555aedbb97561c1827778e2b -size 22816 +oid sha256:f7a49f72bcf030670dd014469cf906a7097c07d6fad17149edee92f128ab2dc6 +size 125866 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png index 219b7b1ebe..f0e6548310 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3725b3e21eb939bebcc44b9c62f21817f1ab227dc7a9f2367b721cdb0e750720 -size 25127 +oid sha256:c134bdb3e372eeaedc3669aaf92486cbb253fcf41b0023c03743bf7e61c72456 +size 129893 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png index 083428a106..8e5203848d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e23f1d506bcfc603192d854945059b4f03e9215f20f3f7f9150728aee0c4bf7e -size 38085 +oid sha256:2af528ba157c4eb2f779e50dd3b95d190c0c68aaa96899ebfa7bc9c843469b00 +size 131811 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png index 77af4a413d..937c1ce423 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89c6f6644f84fc98ee0a0ced85f141cc862b1c114b2ca29874696f655926b4f2 -size 27539 +oid sha256:124a10348cdf9e3e5aba4bbc89c93a1af30e38f58f3e44b2255e705abe5c0c8c +size 127801 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png index 09bf86e31a..1ed50b5f83 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49c58bd2bbc86105e547bddf47c69df0017d6a4a66be0dc3f80e8cecfacf7a86 -size 15837 +oid sha256:ae55c1be7450df7cfd40ae931af2a59b9fe8adbde79e83a3cf395a435a7b534f +size 135115 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png index 4a2e191087..e352099a7e 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_6,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:740d856d28b44200e7148d297103f8c38e2159c75e182c84f1d3d0d32cfff1bf -size 19529 +oid sha256:23826df8b3dde24c1592bf2b9160ffb3995cee09e3e704789ec9fa8bbaa42db2 +size 109429 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c31183bd3e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.joinroom.impl_JoinRoomView_null_JoinRoomView-Night-0_2_null_7,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22ba97c9a23956b7e3d4a721a34e6c0577c28acf2a7b8a1f58e31298d05b5085 +size 113466 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png index fc7d210706..ab62026f26 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9651397f53e398e05c27f41f341d1ae949fbdbce05e97083bb9aef909f67fbaf -size 11783 +oid sha256:41e7732084d84eca5fc002210fd5cba3f7cd181eab1c1dc72b9fe672a861f1f8 +size 131980 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png index 774701a753..cc501fc03b 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63c9d5c445abb20a80b45100afc59b6803f5744a9a6f83ce3d91653801fdd3eb -size 13455 +oid sha256:8f23e1f04cb1fe9ff532b1bef04da3f61cf66a2ae468a4865c9ceceba12e36c2 +size 133562 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png index c060f1dbcf..bb73416fd2 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Day-0_1_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfc692c20e4b8998a675b72cac9b324da4ec636df68a5611ceaa368217e50243 -size 19618 +oid sha256:8f53c21157a6c5ccd9afe9a28154714ad97f16cffaa8d6eb41834653b217d6af +size 128419 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png index 0dcdf1c87d..6e0673e506 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15efd8dc8b74d3e5364b3f9204a5e85e0cff8689d3b632a61368e101b2e833ae -size 11099 +oid sha256:f9f9b0ab31815d16a4550f78380343214ee4f53f2fd070c3a1070796531d6662 +size 114522 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png index 08924db96b..025b05346f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18cc9896eadf78db99e6f8a96ab67a2af22ce1f7072f84cd97dee6e50fd474b2 -size 12736 +oid sha256:b51f473b67d4d444819b373880baefd17f091056bcc72d19eab70364d0cde0c8 +size 116158 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png index d0608de0b7..f8a3bc2761 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomaliasresolver.impl_RoomAliasResolverView_null_RoomAliasResolverView-Night-0_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7db045b1e7877a6ee7b51e3996d43bcaee22ae930ade59701fd07f7a6b0eabf -size 18250 +oid sha256:03083a5d9c59711d6db23b1e150a01f4de53cdaca22c2ab2c09bf225fb91efd6 +size 111907 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png index 0d42f642af..4121d144b3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Day-4_5_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4efec5e5b41fe5b51aaf55bd6d1b4466cef98bea89b2bd1cdc385ef02bc38903 -size 44382 +oid sha256:08a59921cc9b6a19f66655412827bc0cf9dc902bc5e8db56a41c2484fc0468c3 +size 44381 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png index 97e8cc0dcf..d016536165 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomListContentView_null_RoomListContentView-Night-4_6_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12f219b2949bdb38cb02cec442796022b92adeaa39ccde06e40ea7ce91192545 -size 43679 +oid sha256:bb14249c640d8b88865fe7aaae62f55b862475a555007f5b51c1dc778d9e8f33 +size 43701 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png index 03d7ad2621..99fca8cb85 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Day-8_9_null_28,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1edf88cfd802b426e03c600b225fc0a6c97605809ee75da9c8f742dc62ece36d -size 24554 +oid sha256:cf3f468d3b448561fd6b91a66ffdb3ce664e67ba17b5426df32051e672a6b1da +size 24545 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png index 783bc66497..3727a5744f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.components_RoomSummaryRow_null_RoomSummaryRow-Night-8_10_null_28,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17595de1e00e0677ba42985f0ad0f68f2799c63323bbe97c7bc16b7a8ace17ed -size 23891 +oid sha256:55c60a529e8c9230b39ae919faf9d72978f37452846560ca4df1b784c7d154eb +size 23877 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png index 872a2f2274..4b92e9e6d3 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:615e00dfa47d40fd459d268d6e68c61a501be7e4a24bfe7d18f3a647da8c5f08 -size 10595 +oid sha256:925a868134fc7d40eaa88c81d929d6b8bc0c6a7aae9cd0269339c2e5f5edfb66 +size 24167 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png index 94f6c889ab..e9d9eae69f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Day-11_12_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4693928382d102599e18c2254c58451c854c304b19706ecb02b832c92ddf15ef -size 47041 +oid sha256:b51c1aa294a9881a549cbac7b7b1f4f6465bc2d96fbfaddbfc47feeb8d7a13c9 +size 47040 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png index 845fd9fc0a..a4df96c9e9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:421e47de6c2bc7fd0a5de84b6db4bea79c7312442244ec11506164150762943b -size 9787 +oid sha256:47b0809b3e4534125d5e2d0fb8bb4db6435e488eef312be0ecbd6d36ef1212b5 +size 24451 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png index b1929f4a50..8e26265dfb 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl.search_RoomListSearchResultContent_null_RoomListSearchResultContent-Night-11_13_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:deeab9451d51a2b3403f1d5711d0cf64b762847a674ae78f4232ce02fed575f7 -size 46014 +oid sha256:5aaf23300ca5d75620b4f3498d2a0a8f8568292c14bf81b89dcca9ce1ecb5fad +size 46039 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png index 3b19a76226..43486bc1f5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f -size 80573 +oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 +size 80571 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png index 3b19a76226..43486bc1f5 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34afdcdb8cd199ff67ff628aef28757381c5f5f4bed57131f5eac2ae7423894f -size 80573 +oid sha256:1a219527b5d2fc5e581f9e4e5026284a823f0e67b1ec33e12af526b3628d52e6 +size 80571 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png index b29f4c6e61..b1378d9cef 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5509141f2b39c0f4330ef256687b31f0d421040f58719a62aad34f6a224e1cf4 -size 90443 +oid sha256:fc44364cd6f9862a9ee949897ca6a6368f4c7fff8f5bf9ec954e4719c6dc2730 +size 90423 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png index 2632ca4b08..f020b503a8 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a3ea7afa73bfd0ace6999afa7cefd0f99069808b0cb10601e7c674b7f45ea0e +oid sha256:873e6d0627246b4e74407020419e5c10dbc1b774c517556d293ef37235002fde size 80631 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png index 72c76f3eaf..bd0b9fd869 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Day-2_3_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bd9d6331dfe578c1755f3f3c5cf52bafb6b7d0bd811c122daa79adf5066e72a +oid sha256:bb0cf03d1806a0312e10bc4d758102dd0b872d88106464f2112de2dc505e7e7b size 102780 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png index 47770ec085..29e84da0f7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc -size 82859 +oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 +size 82878 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png index 47770ec085..29e84da0f7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb1163e0853dfb5df0f922095a36a4d183decc24a9e4736861186dda30b77cc -size 82859 +oid sha256:beeee93d72ab3bdd601dd03eec5beb271181a200c11c042b985b9495ded0c320 +size 82878 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png index b73d290584..a45c42c14d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_10,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b3263df594697683a84f15268faeb69709bd3bf0cbb4770a4ce883cad599a2e -size 91815 +oid sha256:9a90f232c00dc9b7c1e74b16461e6b91b18f5729f771c3a60f4aa68c29513e97 +size 91791 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png index e99f9fab72..ac0113ead9 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89d0f544f879c7d2fad983cac29f3f58e7aac2d6e0530151b4f51ecef3628aaa -size 82318 +oid sha256:df8723b2a7cbc1720128a0e8dfdbb10cb82394881ad216ed328b15395302e463 +size 82322 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png index f4de24344f..8e0a5f6a2c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomlist.impl_RoomListView_null_RoomListView-Night-2_4_null_5,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fce8f9d8f11b55c390fd8136f7f005ca7bc199e36c5231b9ac3b6118e2e7b5c -size 104166 +oid sha256:c6d4e0c7fc8607c6d05997e0c1201311cbe05a69851b9828156969f2ce300246 +size 104171 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png index d9166cd47d..0c3172d51c 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Day_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:754e5614822424e86e73a631f5303074e85dfb6bf4e6abc7f7e698e2cbc8d6ba -size 12850 +oid sha256:0c8f59a7ab4ca881281b2859ff9fe0ac07cedb0d0c11212365cc26138edc1193 +size 12891 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png index 36604c6005..0eb11fb90a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.atomic.molecules_RoomPreviewMembersCountMolecule_null_RoomPreviewMembersCountMolecule-Night_1_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d06d65a5768007020eab6b48844ea1216fcdb9b19f17f15171234f8a5dd9c517 -size 12394 +oid sha256:62aab15deb6d98f70457e9682df2150a6fa73cd34ae8103a2e618c4d87aa4adc +size 12398 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4886244a8e --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:710b2e1fbcc1db1979bc72b901b00e56154d3ca0c53e134b1a4afcf1833864de +size 125133 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..82c102847d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.background_LightGradientBackground_null_LightGradientBackground-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e8ed7120cbefb63c8d1f4b51a08d1365986afee63f69c299225d73d88f6572c +size 108090 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..d6c9305c53 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Day-2_3_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfce7f7e1eeffdf79d3e60c1c3cd3409199aecdb7d03fb3eea48ffa594984f77 +size 11753 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..52aae9ac10 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_InviteSenderView_null_InviteSenderView-Night-2_4_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b1330584b85f97a67658eedda681cd27d11e5a662178c2139136e485182ec3 +size 11752 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Day-4_5_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-3_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeaderPlaceholder_null_MatrixUserHeaderPlaceholder-Night-4_6_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-2_3_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Day-3_4_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-2_4_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserHeader_null_MatrixUserHeader-Night-3_5_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-4_5_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Day-5_6_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_0,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-4_6_null_1,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_MatrixUserRow_null_MatrixUserRow-Night-5_7_null_1,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-5_6_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Day-6_7_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-5_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedRoom_null_SelectedRoom-Night-6_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-7_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Day-8_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-7_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUserCannotRemove_null_SelectedUserCannotRemove-Night-8_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-6_7_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Day-7_8_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-6_8_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUser_null_SelectedUser-Night-7_9_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-8_9_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Day-9_10_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-8_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_SelectedUsersList_null_SelectedUsersList-Night-9_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-9_10_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Day-10_11_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-9_11_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.matrix.ui.components_UnsavedAvatar_null_UnsavedAvatar-Night-10_12_null,NEXUS_5,1.0,en].png From dd945acab78b8ee82006e28d0bbd6eda42f29f69 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 18:56:16 +0200 Subject: [PATCH 19/24] Remove extra new line. --- .../element/android/features/joinroom/impl/JoinRoomViewTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index c8415e4b26..8f3bd5bdd5 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -126,4 +126,3 @@ private fun AndroidComposeTestRule.setJoinR ) } } - From f1668b8abe764e7cada916a6577253a505ebc0d5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 18 Apr 2024 20:13:10 +0200 Subject: [PATCH 20/24] Update doc. --- .../libraries/designsystem/atomic/pages/HeaderFooterPage.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt index f36d17a08d..4dd00a67d9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/atomic/pages/HeaderFooterPage.kt @@ -38,6 +38,7 @@ import io.element.android.libraries.designsystem.theme.components.Text /** * @param modifier Classical modifier. * @param paddingValues padding values to apply to the content. + * @param containerColor color of the container. Set to [Color.Transparent] if you provide a background in the [modifier]. * @param background optional background component. * @param topBar optional topBar. * @param header optional header. From cf49677ffafb1a5557db191b19f3a9324b624e38 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 10:02:39 +0200 Subject: [PATCH 21/24] Remove empty line and ensure check.sh script run ktlint. --- .../features/roomlist/impl/search/RoomListSearchViewTest.kt | 1 - tools/quality/check.sh | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt index 0c437f8553..b3f0755f11 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/search/RoomListSearchViewTest.kt @@ -69,4 +69,3 @@ private fun AndroidComposeTestRule.setRoomL ) } } - diff --git a/tools/quality/check.sh b/tools/quality/check.sh index c3f87b3018..be323f6884 100755 --- a/tools/quality/check.sh +++ b/tools/quality/check.sh @@ -25,6 +25,9 @@ set -e # First run the quickest script ./tools/check/check_code_quality.sh +# Check ktlint first +./gradlew ktlintCheck + # Build, test and check the project, with warning as errors # It also check that the minimal app is compiling. ./gradlew check -PallWarningsAsErrors=true From 87f89244a60ff5b6effaeb86a489a3afe50bdaaa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 10:33:19 +0200 Subject: [PATCH 22/24] Avoid getting roomInfo again. Also add a test to cover the case of non-null inviter. --- .../joinroom/impl/JoinRoomPresenter.kt | 23 ++++++---------- .../joinroom/impl/JoinRoomPresenterTest.kt | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 8e85b846cc..3edfb97d93 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -40,7 +40,6 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.matrix.ui.model.toInviteSender -import kotlinx.coroutines.flow.first import java.util.Optional import kotlin.jvm.optionals.getOrNull @@ -78,22 +77,16 @@ class JoinRoomPresenter @AssistedInject constructor( else -> { value = ContentState.Loading(roomIdOrAlias) val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) - result.fold( - onSuccess = { - value = it.toContentState(null) - if (it.isInvited) { - // Get the inviteSender - matrixClient.getRoomInfoFlow(roomId).first() - .getOrNull() - ?.inviter - ?.toInviteSender() - ?.let { inviteSender -> - value = it.toContentState(inviteSender) - } - } + value = result.fold( + onSuccess = { roomPreview -> + val inviteSender = roomInfo.getOrNull() + ?.takeIf { roomPreview.isInvited } + ?.inviter + ?.toInviteSender() + roomPreview.toContentState(inviteSender) }, onFailure = { throwable -> - value = if (throwable.message?.contains("403") == true) { + if (throwable.message?.contains("403") == true) { ContentState.UnknownRoom(roomIdOrAlias) } else { ContentState.Failure(roomIdOrAlias, throwable) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index e2fa92a8a3..939f60a4c8 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -25,6 +25,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.preview.RoomPreview @@ -33,6 +34,8 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.room.aRoomInfo +import io.element.android.libraries.matrix.test.room.aRoomMember +import io.element.android.libraries.matrix.ui.model.toInviteSender import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.lambdaRecorder @@ -106,6 +109,30 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is invited then join authorization is equal to invited, and inviter is provided`() = runTest { + val inviter = aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob") + val expectedInviteSender = inviter.toInviteSender() + val roomInfo = aRoomInfo( + currentUserMembership = CurrentUserMembership.INVITED, + inviter = inviter, + ) + val matrixClient = FakeMatrixClient().apply { + getRoomInfoFlowLambda = { _ -> + flowOf(Optional.of(roomInfo)) + } + } + val presenter = createJoinRoomPresenter( + matrixClient = matrixClient + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited(expectedInviteSender)) + } + } + } + @Test fun `present - when room is invited then accept and decline events are sent to acceptDeclinePresenter`() = runTest { val eventSinkRecorder = lambdaRecorder { _: AcceptDeclineInviteEvents -> } From 1fd71801a69e39504249968f8cc825ac30da9458 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 11:26:35 +0200 Subject: [PATCH 23/24] Remove useless case. If user is invited, roomInfo will be present. --- .../features/joinroom/impl/JoinRoomPresenter.kt | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 3edfb97d93..fbf4aeab31 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -38,10 +38,8 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.preview.RoomPreview -import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.matrix.ui.model.toInviteSender import java.util.Optional -import kotlin.jvm.optionals.getOrNull class JoinRoomPresenter @AssistedInject constructor( @Assisted private val roomId: RoomId, @@ -79,11 +77,7 @@ class JoinRoomPresenter @AssistedInject constructor( val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) value = result.fold( onSuccess = { roomPreview -> - val inviteSender = roomInfo.getOrNull() - ?.takeIf { roomPreview.isInvited } - ?.inviter - ?.toInviteSender() - roomPreview.toContentState(inviteSender) + roomPreview.toContentState() }, onFailure = { throwable -> if (throwable.message?.contains("403") == true) { @@ -127,9 +121,7 @@ class JoinRoomPresenter @AssistedInject constructor( } } -private fun RoomPreview.toContentState( - inviteSender: InviteSender? -): ContentState { +private fun RoomPreview.toContentState(): ContentState { return ContentState.Loaded( roomId = roomId, name = name, @@ -139,7 +131,8 @@ private fun RoomPreview.toContentState( isDirect = false, roomAvatarUrl = avatarUrl, joinAuthorisationStatus = when { - isInvited -> JoinAuthorisationStatus.IsInvited(inviteSender) + // Note when isInvited, roomInfo will be used, so if this happen, it will be temporary. + isInvited -> JoinAuthorisationStatus.IsInvited(null) canKnock -> JoinAuthorisationStatus.CanKnock isPublic -> JoinAuthorisationStatus.CanJoin else -> JoinAuthorisationStatus.Unknown From 6863a906ee4be00a732ba922ba72bee9de522d81 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 19 Apr 2024 11:27:34 +0200 Subject: [PATCH 24/24] fix typo --- .../android/features/joinroom/impl/JoinRoomPresenterTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 939f60a4c8..fb36532e2d 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -110,7 +110,7 @@ class JoinRoomPresenterTest { } @Test - fun `present - when room is invited then join authorization is equal to invited, and inviter is provided`() = runTest { + fun `present - when room is invited then join authorization is equal to invited, an inviter is provided`() = runTest { val inviter = aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob") val expectedInviteSender = inviter.toInviteSender() val roomInfo = aRoomInfo(