diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt index 9816ede5e0..0bf46deabd 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListView.kt @@ -21,13 +21,11 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -36,8 +34,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Snackbar @@ -55,7 +51,6 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Velocity @@ -63,21 +58,19 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import io.element.android.features.leaveroom.api.LeaveRoomView import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorView +import io.element.android.features.roomlist.impl.components.RequestVerificationHeader import io.element.android.features.roomlist.impl.components.RoomListMenuAction import io.element.android.features.roomlist.impl.components.RoomListTopBar import io.element.android.features.roomlist.impl.components.RoomSummaryRow import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.search.RoomListSearchResultContent import io.element.android.features.roomlist.impl.search.RoomListSearchResultView -import io.element.android.libraries.designsystem.ElementTextStyles import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight -import io.element.android.libraries.designsystem.theme.components.Button import io.element.android.libraries.designsystem.theme.components.Divider import io.element.android.libraries.designsystem.theme.components.FloatingActionButton import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Scaffold -import io.element.android.libraries.designsystem.theme.components.Surface import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.noFontPadding import io.element.android.libraries.designsystem.theme.roomListUnreadIndicator @@ -291,68 +284,6 @@ fun RoomListContent( ) } -@Composable -internal fun RequestVerificationHeader( - onVerifyClicked: () -> Unit, - onDismissClicked: () -> Unit, - modifier: Modifier = Modifier, -) { - Box(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { - Surface( - modifier.fillMaxWidth(), - shape = MaterialTheme.shapes.small, - color = MaterialTheme.colorScheme.surfaceVariant - ) { - Column( - Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 12.dp) - ) { - Row { - Text( - stringResource(R.string.session_verification_banner_title), - modifier = Modifier.weight(1f), - style = ElementTextStyles.Bold.body, - color = MaterialTheme.colorScheme.primary, - textAlign = TextAlign.Start, - ) - Icon( - modifier = Modifier.clickable(onClick = onDismissClicked), - imageVector = Icons.Default.Close, - contentDescription = stringResource(CommonStrings.action_close) - ) - } - Spacer(modifier = Modifier.height(4.dp)) - Text(stringResource(R.string.session_verification_banner_message), style = ElementTextStyles.Regular.bodyMD) - Spacer(modifier = Modifier.height(12.dp)) - Button( - modifier = Modifier.fillMaxWidth(), - contentPadding = PaddingValues(horizontal = 20.dp, vertical = 7.dp), - onClick = onVerifyClicked, - ) { - Text(stringResource(CommonStrings.action_continue), style = ElementTextStyles.Button) - } - } - } - } -} - -@Preview -@Composable -internal fun PreviewRequestVerificationHeaderLight() { - ElementPreviewLight { - RequestVerificationHeader(onVerifyClicked = {}, onDismissClicked = {}) - } -} - -@Preview -@Composable -internal fun PreviewRequestVerificationHeaderDark() { - ElementPreviewDark { - RequestVerificationHeader(onVerifyClicked = {}, onDismissClicked = {}) - } -} - internal fun RoomListRoomSummary.contentType() = isPlaceholder @Preview diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RequestVerificationHeader.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RequestVerificationHeader.kt new file mode 100644 index 0000000000..9ab1dd290c --- /dev/null +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RequestVerificationHeader.kt @@ -0,0 +1,113 @@ +/* + * 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.features.roomlist.impl.components + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import io.element.android.features.roomlist.impl.R +import io.element.android.libraries.designsystem.ElementTextStyles +import io.element.android.libraries.designsystem.preview.ElementPreviewDark +import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.designsystem.theme.components.Button +import io.element.android.libraries.designsystem.theme.components.Icon +import io.element.android.libraries.designsystem.theme.components.Surface +import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.ui.strings.CommonStrings + +@Composable +internal fun RequestVerificationHeader( + onVerifyClicked: () -> Unit, + onDismissClicked: () -> Unit, + modifier: Modifier = Modifier, +) { + Box(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) { + Surface( + modifier.fillMaxWidth(), + shape = MaterialTheme.shapes.small, + color = MaterialTheme.colorScheme.surfaceVariant + ) { + Column( + Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 12.dp) + ) { + Row { + Text( + stringResource(R.string.session_verification_banner_title), + modifier = Modifier.weight(1f), + style = ElementTextStyles.Bold.body, + color = MaterialTheme.colorScheme.primary, + textAlign = TextAlign.Start, + ) + Icon( + modifier = Modifier.clickable(onClick = onDismissClicked), + imageVector = Icons.Default.Close, + contentDescription = stringResource(CommonStrings.action_close) + ) + } + Spacer(modifier = Modifier.height(4.dp)) + Text( + stringResource(R.string.session_verification_banner_message), + style = ElementTextStyles.Regular.bodyMD + ) + Spacer(modifier = Modifier.height(12.dp)) + Button( + modifier = Modifier.fillMaxWidth(), + contentPadding = PaddingValues(horizontal = 20.dp, vertical = 7.dp), + onClick = onVerifyClicked, + ) { + Text( + stringResource(CommonStrings.action_continue), + style = ElementTextStyles.Button + ) + } + } + } + } +} + +@Preview +@Composable +internal fun PreviewRequestVerificationHeaderLight() { + ElementPreviewLight { + RequestVerificationHeader(onVerifyClicked = {}, onDismissClicked = {}) + } +} + +@Preview +@Composable +internal fun PreviewRequestVerificationHeaderDark() { + ElementPreviewDark { + RequestVerificationHeader(onVerifyClicked = {}, onDismissClicked = {}) + } +}