From b55b4d551d0426d160fcabd7b4918482aa7a1e7f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 11:45:30 +0200 Subject: [PATCH 1/7] Implement SyncState chip. (#909) --- .../appnav/loggedin/LoggedInPresenter.kt | 3 + .../android/appnav/loggedin/LoggedInState.kt | 2 + .../appnav/loggedin/LoggedInStateProvider.kt | 7 +- .../android/appnav/loggedin/LoggedInView.kt | 45 ++++---- .../android/appnav/loggedin/SyncStateView.kt | 101 ++++++++++++++++++ 5 files changed, 138 insertions(+), 20 deletions(-) create mode 100644 appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index 50bc09d0a0..8910cc3976 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -20,6 +20,7 @@ import android.Manifest import android.os.Build import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.permissions.api.PermissionsPresenter @@ -52,6 +53,7 @@ class LoggedInPresenter @Inject constructor( pushService.registerWith(matrixClient, pushProvider, distributor) } + val syncState = matrixClient.syncService().syncState.collectAsState() val permissionsState = postNotificationPermissionsPresenter.present() // fun handleEvents(event: LoggedInEvents) { @@ -60,6 +62,7 @@ class LoggedInPresenter @Inject constructor( // } return LoggedInState( + syncState = syncState.value, permissionsState = permissionsState, // eventSink = ::handleEvents ) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInState.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInState.kt index 8cf8060981..075242cddb 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInState.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInState.kt @@ -16,9 +16,11 @@ package io.element.android.appnav.loggedin +import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.permissions.api.PermissionsState data class LoggedInState( + val syncState: SyncState, val permissionsState: PermissionsState, // val eventSink: (LoggedInEvents) -> Unit ) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt index b131d6d610..533cc15e03 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt @@ -17,17 +17,22 @@ package io.element.android.appnav.loggedin import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.matrix.api.sync.SyncState import io.element.android.libraries.permissions.api.createDummyPostNotificationPermissionsState open class LoggedInStateProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aLoggedInState(), + aLoggedInState(syncState = SyncState.Idle), // Add other state here ) } -fun aLoggedInState() = LoggedInState( +fun aLoggedInState( + syncState: SyncState = SyncState.Syncing, +) = LoggedInState( + syncState = syncState, permissionsState = createDummyPostNotificationPermissionsState(), // eventSink = {} ) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInView.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInView.kt index dc1faa0e2d..60784ea4ed 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInView.kt @@ -16,14 +16,19 @@ package io.element.android.appnav.loggedin +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp import io.element.android.libraries.androidutils.system.openAppSettingsPage -import io.element.android.libraries.designsystem.preview.ElementPreviewDark -import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.designsystem.preview.DayNightPreviews +import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.permissions.api.PermissionsView @Composable @@ -33,25 +38,27 @@ fun LoggedInView( ) { val context = LocalContext.current - PermissionsView( - state = state.permissionsState, - modifier = modifier, - openSystemSettings = context::openAppSettingsPage - ) + Box( + modifier = modifier + .fillMaxSize() + .systemBarsPadding() + ) { + SyncStateView( + modifier = Modifier + .padding(top = 8.dp) + .align(Alignment.TopCenter), + syncState = state.syncState, + ) + PermissionsView( + state = state.permissionsState, + openSystemSettings = context::openAppSettingsPage + ) + } } -@Preview +@DayNightPreviews @Composable -fun LoggedInViewLightPreview(@PreviewParameter(LoggedInStateProvider::class) state: LoggedInState) = - ElementPreviewLight { ContentToPreview(state) } - -@Preview -@Composable -fun LoggedInViewDarkPreview(@PreviewParameter(LoggedInStateProvider::class) state: LoggedInState) = - ElementPreviewDark { ContentToPreview(state) } - -@Composable -private fun ContentToPreview(state: LoggedInState) { +fun LoggedInViewPreview(@PreviewParameter(LoggedInStateProvider::class) state: LoggedInState) = ElementPreview { LoggedInView( state = state ) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt new file mode 100644 index 0000000000..0c147fe457 --- /dev/null +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2023 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.appnav.loggedin + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.spring +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.progressSemantics +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import io.element.android.libraries.designsystem.preview.DayNightPreviews +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator +import io.element.android.libraries.designsystem.theme.components.Surface +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.matrix.api.sync.SyncState +import io.element.android.libraries.theme.ElementTheme +import io.element.android.libraries.ui.strings.CommonStrings + +@Composable +fun SyncStateView( + syncState: SyncState, + modifier: Modifier = Modifier +) { + val animationSpec = spring(stiffness = 500F) + AnimatedVisibility( + modifier = modifier, + visible = syncState.mustBeVisible(), + enter = fadeIn(animationSpec = animationSpec), + exit = fadeOut(animationSpec = animationSpec), + ) { + Surface( + shape = RoundedCornerShape(24.dp), + shadowElevation = 8.dp, + ) { + Row( + modifier = Modifier + .background(color = ElementTheme.colors.bgSubtleSecondary) + .padding(horizontal = 24.dp, vertical = 10.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(10.dp) + ) { + CircularProgressIndicator( + modifier = Modifier + .progressSemantics() + .size(12.dp), + color = ElementTheme.colors.textPrimary, + strokeWidth = 1.5.dp, + ) + Text( + text = stringResource(id = CommonStrings.common_syncing), + color = ElementTheme.colors.textPrimary, + style = ElementTheme.typography.fontBodyMdMedium + ) + } + } + } +} + +private fun SyncState.mustBeVisible() = when (this) { + SyncState.Idle -> true + SyncState.Syncing -> false + SyncState.InError -> false /* In this case, the network error banner can be displayed */ + SyncState.Terminated -> false +} + +@DayNightPreviews +@Composable +fun SyncStateViewPreview() = ElementPreview { + // Add a box to see the shadow + Box(modifier = Modifier.padding(24.dp)) { + SyncStateView( + syncState = SyncState.Idle + ) + } +} From 2686e5d91294dee60dc5594bbfa0af5e8b67e6ce Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 14:41:41 +0200 Subject: [PATCH 2/7] Ensure uitest take preview from appnav module. --- appnav/build.gradle.kts | 1 - tests/uitests/build.gradle.kts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index 459acdeac6..6abc3c656b 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -51,7 +51,6 @@ dependencies { implementation(projects.libraries.permissions.api) implementation(projects.libraries.permissions.noop) - implementation(projects.tests.uitests) implementation(libs.coil) implementation(projects.features.ftue.api) diff --git a/tests/uitests/build.gradle.kts b/tests/uitests/build.gradle.kts index e60a7366dc..17bc638e4f 100644 --- a/tests/uitests/build.gradle.kts +++ b/tests/uitests/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { implementation(libs.showkase) + implementation(projects.appnav) allLibrariesImpl() allServicesImpl() allFeaturesImpl(rootDir, logger) From 3c9ecec563f066d72e1a91e8c223bbc57b1dbdd8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 14:44:53 +0200 Subject: [PATCH 3/7] Make `SyncState` values match `SyncServiceState` values. --- .../kotlin/io/element/android/appnav/LoggedInFlowNode.kt | 2 +- .../android/appnav/loggedin/LoggedInStateProvider.kt | 2 +- .../io/element/android/appnav/loggedin/SyncStateView.kt | 4 ++-- .../android/libraries/matrix/api/sync/SyncState.kt | 4 ++-- .../android/libraries/matrix/impl/RustMatrixClient.kt | 2 +- .../android/libraries/matrix/impl/sync/AppStateMapper.kt | 8 ++++---- .../android/libraries/matrix/test/sync/FakeSyncService.kt | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 2a11c00fcd..4130e5da23 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -164,7 +164,7 @@ class LoggedInFlowNode @AssistedInject constructor( syncService.syncState, networkMonitor.connectivity ) { syncState, networkStatus -> - syncState == SyncState.InError && networkStatus == NetworkStatus.Online + syncState == SyncState.Error && networkStatus == NetworkStatus.Online } .distinctUntilChanged() .collect { restartSync -> diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt index 533cc15e03..e8a8a4762c 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInStateProvider.kt @@ -30,7 +30,7 @@ open class LoggedInStateProvider : PreviewParameterProvider { } fun aLoggedInState( - syncState: SyncState = SyncState.Syncing, + syncState: SyncState = SyncState.Running, ) = LoggedInState( syncState = syncState, permissionsState = createDummyPostNotificationPermissionsState(), diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt index 0c147fe457..c045296a8a 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt @@ -84,8 +84,8 @@ fun SyncStateView( private fun SyncState.mustBeVisible() = when (this) { SyncState.Idle -> true - SyncState.Syncing -> false - SyncState.InError -> false /* In this case, the network error banner can be displayed */ + SyncState.Running -> false + SyncState.Error -> false /* In this case, the network error banner can be displayed */ SyncState.Terminated -> false } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncState.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncState.kt index 596c131420..9df542be73 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncState.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncState.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.matrix.api.sync enum class SyncState { Idle, - Syncing, - InError, + Running, + Error, Terminated, } 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 52c8923919..640e0772a9 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 @@ -144,7 +144,7 @@ class RustMatrixClient constructor( client.setDelegate(clientDelegate) rustSyncService.syncState .onEach { syncState -> - if (syncState == SyncState.Syncing) { + if (syncState == SyncState.Running) { onSlidingSyncUpdate() } }.launchIn(sessionCoroutineScope) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppStateMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppStateMapper.kt index 734041486a..51228231f9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppStateMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppStateMapper.kt @@ -24,8 +24,8 @@ internal fun RoomListServiceState.toSyncState(): SyncState { return when (this) { RoomListServiceState.INIT, RoomListServiceState.SETTING_UP -> SyncState.Idle - RoomListServiceState.RUNNING -> SyncState.Syncing - RoomListServiceState.ERROR -> SyncState.InError + RoomListServiceState.RUNNING -> SyncState.Running + RoomListServiceState.ERROR -> SyncState.Error RoomListServiceState.TERMINATED -> SyncState.Terminated } } @@ -33,8 +33,8 @@ internal fun RoomListServiceState.toSyncState(): SyncState { internal fun SyncServiceState.toSyncState(): SyncState { return when (this) { SyncServiceState.IDLE -> SyncState.Idle - SyncServiceState.RUNNING -> SyncState.Syncing + SyncServiceState.RUNNING -> SyncState.Running SyncServiceState.TERMINATED -> SyncState.Terminated - SyncServiceState.ERROR -> SyncState.InError + SyncServiceState.ERROR -> SyncState.Error } } diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt index 5405d3a28a..dd653a76ec 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt @@ -26,11 +26,11 @@ class FakeSyncService : SyncService { private val syncStateFlow = MutableStateFlow(SyncState.Idle) fun simulateError() { - syncStateFlow.value = SyncState.InError + syncStateFlow.value = SyncState.Error } override suspend fun startSync(): Result { - syncStateFlow.value = SyncState.Syncing + syncStateFlow.value = SyncState.Running return Result.success(Unit) } From 2b71922cae295fcc997ddc47c952b65b55d3fb20 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 14:47:30 +0200 Subject: [PATCH 4/7] Ensure uitest take preview from app module. --- app/build.gradle.kts | 1 - tests/uitests/build.gradle.kts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 32bfd40629..6a28adecf1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -198,7 +198,6 @@ dependencies { allLibrariesImpl() allServicesImpl() allFeaturesImpl(rootDir, logger) - implementation(projects.tests.uitests) implementation(projects.anvilannotations) implementation(projects.appnav) anvil(projects.anvilcodegen) diff --git a/tests/uitests/build.gradle.kts b/tests/uitests/build.gradle.kts index 17bc638e4f..813f6238d6 100644 --- a/tests/uitests/build.gradle.kts +++ b/tests/uitests/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { implementation(libs.showkase) + implementation(projects.app) implementation(projects.appnav) allLibrariesImpl() allServicesImpl() From 5792fdad04f5c183223f9d55230e4b01e33be9ad Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 14:57:10 +0200 Subject: [PATCH 5/7] Show Sync status when state is Terminated. --- .../io/element/android/appnav/loggedin/SyncStateView.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt index c045296a8a..5108bb8716 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SyncStateView.kt @@ -83,10 +83,10 @@ fun SyncStateView( } private fun SyncState.mustBeVisible() = when (this) { - SyncState.Idle -> true + SyncState.Idle -> true /* Cold start of the app */ SyncState.Running -> false SyncState.Error -> false /* In this case, the network error banner can be displayed */ - SyncState.Terminated -> false + SyncState.Terminated -> true /* The app is resumed and the sync is started again */ } @DayNightPreviews From 62354326a9fc3f349e6450aa9f67e9fdb01eea1c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 19 Jul 2023 15:27:21 +0200 Subject: [PATCH 6/7] Exclude app module for now. --- tests/uitests/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/uitests/build.gradle.kts b/tests/uitests/build.gradle.kts index 813f6238d6..729899c4f8 100644 --- a/tests/uitests/build.gradle.kts +++ b/tests/uitests/build.gradle.kts @@ -48,7 +48,9 @@ dependencies { implementation(libs.showkase) - implementation(projects.app) + // TODO There is a Resources.NotFoundException maybe due to the mipmap, even if we have + // `testOptions { unitTests.isIncludeAndroidResources = true }` in the app build.gradle.kts file + // implementation(projects.app) implementation(projects.appnav) allLibrariesImpl() allServicesImpl() From 0ed7afc2d6967e88c6a4667c2cf4dfc9b067f6e9 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Wed, 19 Jul 2023 13:51:57 +0000 Subject: [PATCH 7/7] Update screenshots --- ...tGroup_LoggedInViewPreview-D-0_1_null_0,NEXUS_5,1.0,en].png | 3 +++ ...tGroup_LoggedInViewPreview-D-0_1_null_1,NEXUS_5,1.0,en].png | 3 +++ ...tGroup_LoggedInViewPreview-N-0_2_null_0,NEXUS_5,1.0,en].png | 3 +++ ...tGroup_LoggedInViewPreview-N-0_2_null_1,NEXUS_5,1.0,en].png | 3 +++ ...ltGroup_SyncStateViewPreview-D-1_2_null,NEXUS_5,1.0,en].png | 3 +++ ...ltGroup_SyncStateViewPreview-N-1_3_null,NEXUS_5,1.0,en].png | 3 +++ ...LoadingRoomNodeViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png | 3 +++ ...LoadingRoomNodeViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png | 3 +++ ...oadingRoomNodeViewLightPreview_0_null_0,NEXUS_5,1.0,en].png | 3 +++ ...oadingRoomNodeViewLightPreview_0_null_1,NEXUS_5,1.0,en].png | 3 +++ ...l_DefaultGroup_RootDarkPreview_0_null_0,NEXUS_5,1.0,en].png | 3 +++ ...l_DefaultGroup_RootDarkPreview_0_null_1,NEXUS_5,1.0,en].png | 3 +++ ...l_DefaultGroup_RootDarkPreview_0_null_2,NEXUS_5,1.0,en].png | 3 +++ ..._DefaultGroup_RootLightPreview_0_null_0,NEXUS_5,1.0,en].png | 3 +++ ..._DefaultGroup_RootLightPreview_0_null_1,NEXUS_5,1.0,en].png | 3 +++ ..._DefaultGroup_RootLightPreview_0_null_2,NEXUS_5,1.0,en].png | 3 +++ 16 files changed, 48 insertions(+) create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-D-1_2_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-N-1_3_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_2,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_0,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_1,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_2,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..665c8811ac --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb0d3bfcfd75cbd75fd9270ff1dc27090e5dbac79ca8db8a46d91a4c12bc966b +size 4457 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3d0b60c285 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-D-0_1_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee84ea7218ad52104a3f030d3daefa5174e122c511a8d7ab7515fb50e9eb8e01 +size 9580 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..fae8a6fca3 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c89ac73df77c2bccb0c2aa80cee1420f78e7d07f0eda89a90bffef55e8cf753 +size 4464 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..f576427220 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_LoggedInViewPreview-N-0_2_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2d3f6f72be52a27e0ce15f091a44d7796f91a10eb7dab54787631b2a6d33f74 +size 8220 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-D-1_2_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-D-1_2_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..703632bad5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-D-1_2_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90b1daf3ab9e6377fa703ea1e13943eaf40e84ccbc61212d606a527759ff20a9 +size 9689 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-N-1_3_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-N-1_3_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..2afc96753a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.loggedin_null_DefaultGroup_SyncStateViewPreview-N-1_3_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58a097099974131832bae557acf824154bb76fb34d309cb68bd2ae5e658d5371 +size 8347 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7870560dd4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da4188dc606f0735fd4093acad34897c866d8c4d20b3e0ec0618685f7302cbf5 +size 9288 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7edd6f9ee7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e27b1ea7bfa4eb97af3c2d433fbe3f5ca21458e4458d91b39c9c2bb3d7b02abc +size 11306 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c87156e8c6 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bbeb21faf320226f42aad179b955952ad8e4b5d5645c45bfbbc02166baf0662 +size 9641 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..6391f1dec0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.room_null_DefaultGroup_LoadingRoomNodeViewLightPreview_0_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:499e17b52d57f8b0d8984e32457b3922c0647be5b835c02a01ed927fe004ec4d +size 11610 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..a4d544ce2d --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c51726746993ad3ed0f6da9fe49a02b87ec518495e04f6cdb28ab4454dc72938 +size 25457 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c5627b9105 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14ffd433679cbadf1bb325257786a834fce3e362d2ed763c1823b0c958c0f38a +size 27496 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c4f2de8348 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootDarkPreview_0_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85d3ea85f270fae4db7e14ab9c2c19a6c4f3a68e1c2112010471cb69cdb71b2b +size 22071 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_0,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..1aecdf6d10 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_0,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd79483dea8ce19284069511ec96dfc68704a9ff2f1a33be312bbcdb387123c6 +size 26655 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..192e7b90a4 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:931423fea194fb1bede5cb3d73083fb65335716ca088fbda707f4f4727eae4dd +size 28757 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_2,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7ae3d51e4a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.appnav.root_null_DefaultGroup_RootLightPreview_0_null_2,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfa6e3d8698a2327d6e3cc14318856f221355581e6c661b92d2e215daf8f30cd +size 22879