From 14a385e5771d2b73692dafa04eba259d11800455 Mon Sep 17 00:00:00 2001 From: Maxime NATUREL <46314705+mnaturel@users.noreply.github.com> Date: Fri, 3 Mar 2023 15:23:23 +0100 Subject: [PATCH] Top app bar for the start chat screen --- .../createroom/root/CreateRoomRootScreen.kt | 58 ++++++++++------ .../components/CenterAlignedTopAppBar.kt | 68 +++++++++++++++++++ .../src/main/res/values/strings_eax.xml | 1 - 3 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/CenterAlignedTopAppBar.kt diff --git a/features/createroom/src/main/kotlin/io/element/android/features/createroom/root/CreateRoomRootScreen.kt b/features/createroom/src/main/kotlin/io/element/android/features/createroom/root/CreateRoomRootScreen.kt index 0bbbaeede1..6b38708e0a 100644 --- a/features/createroom/src/main/kotlin/io/element/android/features/createroom/root/CreateRoomRootScreen.kt +++ b/features/createroom/src/main/kotlin/io/element/android/features/createroom/root/CreateRoomRootScreen.kt @@ -16,48 +16,66 @@ package io.element.android.features.createroom.root -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.displayCutoutPadding import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.ExperimentalMaterial3Api 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.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.sp +import io.element.android.libraries.designsystem.R import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.designsystem.theme.components.CenterAlignedTopAppBar import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton +import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.designsystem.R.drawable as DrawableR import io.element.android.libraries.ui.strings.R.string as StringR +@OptIn(ExperimentalMaterial3Api::class) @Composable fun CreateRoomRootScreen( state: CreateRoomRootState, modifier: Modifier = Modifier, - onBackPressed: () -> Unit = {} + onClosePressed: () -> Unit = {} ) { - Box( - modifier = modifier - .fillMaxWidth() - .displayCutoutPadding(), - ) { - Text( - text = stringResource(id = StringR.create_chat), - modifier = Modifier.align(Alignment.Center) - ) - IconButton( - modifier = Modifier - .align(Alignment.CenterEnd), - onClick = onBackPressed, - ) { - Icon(resourceId = DrawableR.ic_close, contentDescription = stringResource(id = StringR.action_close)) + Scaffold( + modifier = modifier.fillMaxWidth(), + // TODO to test + //.displayCutoutPadding() + topBar = { + CreateRoomViewTopBar(onClosePressed = onClosePressed) } + ) { } } +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CreateRoomViewTopBar( + modifier: Modifier = Modifier, + onClosePressed: () -> Unit = {}, +) { + CenterAlignedTopAppBar( + modifier = modifier, + title = { + Text( + text = stringResource(id = StringR.start_chat), + fontSize = 16.sp, + fontWeight = FontWeight.SemiBold, + ) + }, + actions = { + IconButton(onClick = onClosePressed) { + Icon(resourceId = R.drawable.ic_close, contentDescription = stringResource(id = StringR.action_close)) + } + } + ) +} + @Preview @Composable fun CreateRoomRootViewLightPreview(@PreviewParameter(CreateRoomRootStateProvider::class) state: CreateRoomRootState) = diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/CenterAlignedTopAppBar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/CenterAlignedTopAppBar.kt new file mode 100644 index 0000000000..36df702284 --- /dev/null +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/theme/components/CenterAlignedTopAppBar.kt @@ -0,0 +1,68 @@ +/* + * 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. + */ + +@file:OptIn(ExperimentalMaterial3Api::class) + +package io.element.android.libraries.designsystem.theme.components + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.TopAppBarColors +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import io.element.android.libraries.designsystem.preview.ElementPreviewDark +import io.element.android.libraries.designsystem.preview.ElementPreviewLight + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CenterAlignedTopAppBar( + title: @Composable () -> Unit, + modifier: Modifier = Modifier, + navigationIcon: @Composable () -> Unit = {}, + actions: @Composable RowScope.() -> Unit = {}, + windowInsets: WindowInsets = TopAppBarDefaults.windowInsets, + colors: TopAppBarColors = TopAppBarDefaults.smallTopAppBarColors(), + scrollBehavior: TopAppBarScrollBehavior? = null +) { + androidx.compose.material3.CenterAlignedTopAppBar( + title = title, + modifier = modifier, + navigationIcon = navigationIcon, + actions = actions, + windowInsets = windowInsets, + colors = colors, + scrollBehavior = scrollBehavior, + ) +} + +@Preview +@Composable +internal fun CenterAlignedTopAppBarLightPreview() = + ElementPreviewLight { ContentToPreview() } + +@Preview +@Composable +internal fun CenterAlignedTopAppBarDarkPreview() = + ElementPreviewDark { ContentToPreview() } + +@Composable +private fun ContentToPreview() { + TopAppBar(title = { Text(text = "Title") }) +} diff --git a/libraries/ui-strings/src/main/res/values/strings_eax.xml b/libraries/ui-strings/src/main/res/values/strings_eax.xml index ee0ee67aed..0ed87ec9f0 100644 --- a/libraries/ui-strings/src/main/res/values/strings_eax.xml +++ b/libraries/ui-strings/src/main/res/values/strings_eax.xml @@ -14,6 +14,5 @@ You can only connect to an existing server that supports sliding sync. Your homeserver admin will need to configure it. Server not supported This server currently doesn\'t support sliding sync. - Create chat