From a50e4daafe590ed886387fa32c60094124e996bf Mon Sep 17 00:00:00 2001 From: Doline Touko Date: Mon, 13 Feb 2023 14:56:08 +0100 Subject: [PATCH] [#360] Update bottom sheet component --- .../components/sheets/ComponentSheetBottom.kt | 63 ++++++++++++------- .../ComponentCustomizationBottomSheet.kt | 28 ++++----- .../composable/CodeImplementation.kt | 24 +++++-- demo/src/main/res/values/strings.xml | 1 + ...ttomSheet.kt => OdsBottomSheetScaffold.kt} | 21 ++----- 5 files changed, 77 insertions(+), 60 deletions(-) rename lib/src/main/java/com/orange/ods/compose/component/bottomsheet/{OdsBottomSheet.kt => OdsBottomSheetScaffold.kt} (73%) diff --git a/demo/src/main/java/com/orange/ods/demo/ui/components/sheets/ComponentSheetBottom.kt b/demo/src/main/java/com/orange/ods/demo/ui/components/sheets/ComponentSheetBottom.kt index f1c0cbca2..1dba32b95 100644 --- a/demo/src/main/java/com/orange/ods/demo/ui/components/sheets/ComponentSheetBottom.kt +++ b/demo/src/main/java/com/orange/ods/demo/ui/components/sheets/ComponentSheetBottom.kt @@ -10,24 +10,33 @@ package com.orange.ods.demo.ui.components.sheets +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.rememberBottomSheetScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.orange.ods.compose.component.OdsComponent import com.orange.ods.compose.component.chip.OdsChoiceChip import com.orange.ods.compose.component.chip.OdsChoiceChipsFlowRow import com.orange.ods.compose.component.list.OdsListItem -import com.orange.ods.compose.text.OdsTextCaption -import com.orange.ods.compose.text.OdsTextH6 +import com.orange.ods.compose.component.list.OdsListItemIcon +import com.orange.ods.compose.component.list.OdsListItemIconType +import com.orange.ods.compose.component.list.iconType +import com.orange.ods.compose.text.OdsTextBody1 +import com.orange.ods.compose.text.OdsTextSubtitle1 import com.orange.ods.demo.R import com.orange.ods.demo.domain.recipes.LocalRecipes import com.orange.ods.demo.ui.components.utilities.ComponentCustomizationBottomSheetScaffold import com.orange.ods.demo.ui.utilities.composable.CodeImplementationColumn -import com.orange.ods.demo.ui.utilities.composable.FloatingActionButtonTechnicalTextColumn +import com.orange.ods.demo.ui.utilities.composable.CommonTechnicalTextColumn +import com.orange.ods.demo.ui.utilities.composable.TechnicalText @OptIn(ExperimentalMaterialApi::class) @@ -40,49 +49,51 @@ fun ComponentSheetBottom() { ComponentCustomizationBottomSheetScaffold( + titleResId = R.string.component_sheet_recipes, bottomSheetScaffoldState = rememberBottomSheetScaffoldState(), bottomSheetContent = { when (content.value) { SheetsbottomCustomizationState.Content.Empty -> { - OdsListItem( - text = "" - ) + Box(modifier = Modifier.height(200.dp)) } SheetsbottomCustomizationState.Content.Example -> { val recipes = LocalRecipes.current - recipes.forEach { recipe -> + recipes.take(3).forEach { recipe -> OdsListItem( - //icon = recipe.iconResId?.let { iconRes -> - // { - // OdsListItemIcon( - // painter = painterResource(id = iconRes), - // contentDescription = null - // ) - //} - //}, + Modifier.iconType(OdsListItemIconType.Icon), + icon = recipe.iconResId?.let { iconRes -> + { + OdsListItemIcon( + painterResource(id = iconRes) + ) + } + }, text = recipe.title ) } - } - } } ) { - Column() { + Column { Column( modifier = Modifier .padding(top = dimensionResource(id = R.dimen.screen_vertical_margin)) .padding(horizontal = dimensionResource(id = R.dimen.screen_horizontal_margin)) ) { - OdsTextH6(text = stringResource(id = R.string.component_sheet_customize)) - OdsTextCaption(text = stringResource(id = R.string.component_content)) + OdsTextBody1(text = stringResource(id = R.string.component_sheet_customize)) + + OdsTextSubtitle1( + text = stringResource(id = R.string.component_content), + modifier = Modifier.padding(top = dimensionResource(id = R.dimen.spacing_s)) + ) OdsChoiceChipsFlowRow( selectedChip = content, - outlinedChips = true + outlinedChips = true, + modifier = Modifier.padding(top = dimensionResource(id = R.dimen.spacing_xs)) ) { OdsChoiceChip(textRes = R.string.component_sheet_empty, value = SheetsbottomCustomizationState.Content.Empty) OdsChoiceChip(textRes = R.string.component_sheet_example, value = SheetsbottomCustomizationState.Content.Example) @@ -90,9 +101,13 @@ fun ComponentSheetBottom() { } CodeImplementationColumn { - FloatingActionButtonTechnicalTextColumn( - componentName = "" - ) + CommonTechnicalTextColumn( + componentName = OdsComponent.OdsBottomSheetScaffold.name + ) { + TechnicalText(text = "sheetContent = {") + TechnicalText(text = " // add your content here") + TechnicalText(text = "}") + } } } } diff --git a/demo/src/main/java/com/orange/ods/demo/ui/components/utilities/ComponentCustomizationBottomSheet.kt b/demo/src/main/java/com/orange/ods/demo/ui/components/utilities/ComponentCustomizationBottomSheet.kt index 96ee79dfc..4f4ee56a9 100644 --- a/demo/src/main/java/com/orange/ods/demo/ui/components/utilities/ComponentCustomizationBottomSheet.kt +++ b/demo/src/main/java/com/orange/ods/demo/ui/components/utilities/ComponentCustomizationBottomSheet.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.BottomSheetScaffold import androidx.compose.material.BottomSheetScaffoldState import androidx.compose.material.BottomSheetValue import androidx.compose.material.ExperimentalMaterialApi @@ -39,6 +38,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.unit.dp +import com.orange.ods.compose.component.bottomsheet.OdsBottomSheetScaffold import com.orange.ods.compose.component.list.OdsListItem import com.orange.ods.compose.theme.OdsTheme import com.orange.ods.demo.R @@ -50,6 +50,7 @@ import kotlinx.coroutines.launch fun ComponentCustomizationBottomSheetScaffold( bottomSheetScaffoldState: BottomSheetScaffoldState, snackbarHost: @Composable (SnackbarHostState) -> Unit = { SnackbarHost(hostState = it) }, + titleResId: Int = R.string.component_customize, floatingActionButton: (@Composable () -> Unit)? = null, floatingActionButtonPosition: FabPosition = FabPosition.End, bottomSheetContent: @Composable () -> Unit, @@ -65,8 +66,7 @@ fun ComponentCustomizationBottomSheetScaffold( bottomSheetScaffoldState.bottomSheetState.collapse() } } - BottomSheetScaffold( - sheetBackgroundColor = OdsTheme.colors.surface, + OdsBottomSheetScaffold( scaffoldState = bottomSheetScaffoldState, floatingActionButton = floatingActionButton, floatingActionButtonPosition = floatingActionButtonPosition, @@ -87,17 +87,17 @@ fun ComponentCustomizationBottomSheetScaffold( .semantics { stateDescription = bottomSheetHeaderStateDescription }, - text = stringResource(id = R.string.component_customize) - ) { - val degrees = if (bottomSheetScaffoldState.bottomSheetState.isExpanded) 0f else -180f - val angle by animateFloatAsState(targetValue = degrees) - Icon( - modifier = Modifier.rotate(angle), - painter = painterResource(id = R.drawable.ic_chevron_down), - contentDescription = null, - tint = OdsTheme.colors.onSurface - ) - } + text = stringResource(id = titleResId), + icon = { + val degrees = if (bottomSheetScaffoldState.bottomSheetState.isExpanded) 0f else -180f + val angle by animateFloatAsState(targetValue = degrees) + Icon( + modifier = Modifier.rotate(angle), + painter = painterResource(id = R.drawable.ic_chevron_down), + contentDescription = null, + tint = OdsTheme.colors.onSurface + ) + }) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { bottomSheetContent() diff --git a/demo/src/main/java/com/orange/ods/demo/ui/utilities/composable/CodeImplementation.kt b/demo/src/main/java/com/orange/ods/demo/ui/utilities/composable/CodeImplementation.kt index 3a3868754..6122060aa 100644 --- a/demo/src/main/java/com/orange/ods/demo/ui/utilities/composable/CodeImplementation.kt +++ b/demo/src/main/java/com/orange/ods/demo/ui/utilities/composable/CodeImplementation.kt @@ -90,21 +90,33 @@ fun RowSurroundedTechnicalText(content: @Composable () -> Unit) { } @Composable -private fun CommonButtonTechnicalTextColumn( +fun CommonTechnicalTextColumn( componentName: String, - fullScreenWidth: Boolean?, modifier: Modifier = Modifier, content: @Composable () -> Unit = {} ) { Column(modifier = modifier) { TechnicalText(text = "$componentName(") Column(modifier = Modifier.padding(start = dimensionResource(id = R.dimen.spacing_s))) { - if (fullScreenWidth == true) { - TechnicalText(text = "modifier = Modifier.fillMaxWidth(),") - } content() - TechnicalText(text = "//...") } TechnicalText(text = ")") } +} + +@Composable +private fun CommonButtonTechnicalTextColumn( + componentName: String, + fullScreenWidth: Boolean?, + modifier: Modifier = Modifier, + content: @Composable () -> Unit = {} +) { + CommonTechnicalTextColumn(componentName = componentName, modifier = modifier){ + if (fullScreenWidth == true) { + TechnicalText(text = "modifier = Modifier.fillMaxWidth(),") + } + content() + TechnicalText(text = "//...") + } + } \ No newline at end of file diff --git a/demo/src/main/res/values/strings.xml b/demo/src/main/res/values/strings.xml index 6bb8fc00d..f311a0092 100644 --- a/demo/src/main/res/values/strings.xml +++ b/demo/src/main/res/values/strings.xml @@ -250,6 +250,7 @@ Customize the bottom sheet Empty Example + Recipes Snackbars diff --git a/lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheet.kt b/lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheetScaffold.kt similarity index 73% rename from lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheet.kt rename to lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheetScaffold.kt index dbc86031c..fa1b074ef 100644 --- a/lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheet.kt +++ b/lib/src/main/java/com/orange/ods/compose/component/bottomsheet/OdsBottomSheetScaffold.kt @@ -17,15 +17,11 @@ import androidx.compose.material.BottomSheetScaffoldDefaults import androidx.compose.material.BottomSheetScaffoldState import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.FabPosition -import androidx.compose.material.MaterialTheme import androidx.compose.material.SnackbarHost import androidx.compose.material.SnackbarHostState -import androidx.compose.material.contentColorFor import androidx.compose.material.rememberBottomSheetScaffoldState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.Dp import com.orange.ods.compose.component.OdsComponentApi import com.orange.ods.compose.theme.OdsTheme @@ -33,7 +29,7 @@ import com.orange.ods.compose.theme.OdsTheme @Composable @ExperimentalMaterialApi @OdsComponentApi -fun OdsBottomSheet( +fun OdsBottomSheetScaffold( sheetContent: @Composable ColumnScope.() -> Unit, modifier: Modifier = Modifier, scaffoldState: BottomSheetScaffoldState = rememberBottomSheetScaffoldState(), @@ -42,13 +38,7 @@ fun OdsBottomSheet( floatingActionButton: (@Composable () -> Unit)? = null, floatingActionButtonPosition: FabPosition = FabPosition.End, sheetGesturesEnabled: Boolean = true, - sheetShape: Shape = MaterialTheme.shapes.large, - sheetElevation: Dp = BottomSheetScaffoldDefaults.SheetElevation, - sheetBackgroundColor: Color = MaterialTheme.colors.surface, - sheetContentColor: Color = contentColorFor(sheetBackgroundColor), sheetPeekHeight: Dp = BottomSheetScaffoldDefaults.SheetPeekHeight, - backgroundColor: Color = OdsTheme.colors.surface, - contentColor: Color = contentColorFor(backgroundColor), content: @Composable (PaddingValues) -> Unit ) { @@ -60,14 +50,13 @@ fun OdsBottomSheet( snackbarHost = snackbarHost, floatingActionButton = floatingActionButton, floatingActionButtonPosition = floatingActionButtonPosition, - sheetElevation = sheetElevation, sheetGesturesEnabled = sheetGesturesEnabled, - sheetShape = sheetShape, - sheetBackgroundColor = MaterialTheme.colors.surface, - sheetContentColor = sheetContentColor, + sheetShape = OdsTheme.shapes.large, + sheetBackgroundColor = OdsTheme.colors.surface, + sheetContentColor = OdsTheme.colors.onSurface, sheetPeekHeight = sheetPeekHeight, backgroundColor = OdsTheme.colors.surface, - contentColor = contentColor, + contentColor = OdsTheme.colors.onSurface, content = content ) } \ No newline at end of file