Skip to content

Commit

Permalink
[#247] Create and use a customization state for cards
Browse files Browse the repository at this point in the history
  • Loading branch information
paulinea committed Sep 6, 2022
1 parent 80977b0 commit c2ce5f0
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 76 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
*
* Copyright 2021 Orange
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
* /
*/

package com.orange.ods.demo.ui.components.cards

import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable

@Composable
fun rememberCardCustomizationState(
thumbnailChecked: MutableState<Boolean> = rememberSaveable { mutableStateOf(true) },
textChecked: MutableState<Boolean> = rememberSaveable { mutableStateOf(true) },
subtitleChecked: MutableState<Boolean> = rememberSaveable { mutableStateOf(true) },
button1Checked: MutableState<Boolean> = rememberSaveable { mutableStateOf(true) },
button2Checked: MutableState<Boolean> = rememberSaveable { mutableStateOf(true) }
) =
remember(thumbnailChecked, textChecked, subtitleChecked, button1Checked, button2Checked) {
CardCustomizationState(thumbnailChecked, textChecked, subtitleChecked, button1Checked, button2Checked)
}

class CardCustomizationState(
val thumbnailChecked: MutableState<Boolean>,
val textChecked: MutableState<Boolean>,
val subtitleChecked: MutableState<Boolean>,
val button1Checked: MutableState<Boolean>,
val button2Checked: MutableState<Boolean>
) {
val hasThumbnail
get() = thumbnailChecked.value

val hasText
get() = textChecked.value

val hasSubtitle
get() = subtitleChecked.value

val hasButton1
get() = button1Checked.value

val hasButton2
get() = button2Checked.value
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource
Expand All @@ -36,41 +34,40 @@ import com.orange.ods.demo.ui.utilities.composable.SwitchListItem
@Composable
fun VariantCardImageFirst() {
val context = LocalContext.current
val textIsChecked = rememberSaveable { mutableStateOf(true) }
val subtitleIsChecked = rememberSaveable { mutableStateOf(true) }
val button1IsChecked = rememberSaveable { mutableStateOf(true) }
val button2IsChecked = rememberSaveable { mutableStateOf(true) }
val cardCustomizationState = rememberCardCustomizationState()

ComponentCustomizationBottomSheetScaffold(
bottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
bottomSheetContent = {
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleIsChecked)
SwitchListItem(labelRes = R.string.component_element_text, checked = textIsChecked)
SwitchListItem(labelRes = R.string.component_element_button1, checked = button1IsChecked)
SwitchListItem(labelRes = R.string.component_element_button2, checked = button2IsChecked)
}) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(dimensionResource(id = R.dimen.spacing_m))
.verticalScroll(state = rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(dimensionResource(id = R.dimen.spacing_m))
) {
val button1Text = stringResource(id = R.string.component_element_button1)
val button2Text = stringResource(id = R.string.component_element_button2)
val cardContainerText = stringResource(id = R.string.component_card_element_container)
with(cardCustomizationState) {
ComponentCustomizationBottomSheetScaffold(
bottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
bottomSheetContent = {
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleChecked)
SwitchListItem(labelRes = R.string.component_element_text, checked = textChecked)
SwitchListItem(labelRes = R.string.component_element_button1, checked = button1Checked)
SwitchListItem(labelRes = R.string.component_element_button2, checked = button2Checked)
}) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(dimensionResource(id = R.dimen.spacing_m))
.verticalScroll(state = rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(dimensionResource(id = R.dimen.spacing_m))
) {
val button1Text = stringResource(id = R.string.component_element_button1)
val button2Text = stringResource(id = R.string.component_element_button2)
val cardContainerText = stringResource(id = R.string.component_card_element_container)

OdsCardImageFirst(
title = stringResource(id = R.string.component_element_title),
image = painterResource(id = R.drawable.placeholder),
subtitle = if (subtitleIsChecked.value) stringResource(id = R.string.component_element_subtitle) else null,
text = if (textIsChecked.value) stringResource(id = R.string.component_element_text_value) else null,
onCardClick = { clickOnElement(context, cardContainerText) },
button1Text = if (button1IsChecked.value) button1Text else null,
onButton1Click = { clickOnElement(context, button1Text) },
button2Text = if (button2IsChecked.value) button2Text else null,
onButton2Click = { clickOnElement(context, button2Text) }
)
OdsCardImageFirst(
title = stringResource(id = R.string.component_element_title),
image = painterResource(id = R.drawable.placeholder),
subtitle = if (hasSubtitle) stringResource(id = R.string.component_element_subtitle) else null,
text = if (hasText) stringResource(id = R.string.component_element_text_value) else null,
onCardClick = { clickOnElement(context, cardContainerText) },
button1Text = if (hasButton1) button1Text else null,
onButton1Click = { clickOnElement(context, button1Text) },
button2Text = if (hasButton2) button2Text else null,
onButton2Click = { clickOnElement(context, button2Text) }
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ import com.orange.ods.demo.ui.utilities.composable.SwitchListItem
@Composable
fun VariantCardSmall() {
val context = LocalContext.current
val subtitleIsChecked = rememberSaveable { mutableStateOf(true) }
val subtitleChecked = rememberSaveable { mutableStateOf(true) }

ComponentCustomizationBottomSheetScaffold(
bottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
bottomSheetContent = {
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleIsChecked)
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleChecked)
}) {
Row(
modifier = Modifier
Expand All @@ -54,7 +54,7 @@ fun VariantCardSmall() {
modifier = Modifier.weight(0.5f),
image = painterResource(id = R.drawable.placeholder),
title = stringResource(id = R.string.component_element_title),
subtitle = if (subtitleIsChecked.value) stringResource(id = R.string.component_element_subtitle) else null,
subtitle = if (subtitleChecked.value) stringResource(id = R.string.component_element_subtitle) else null,
onCardClick = { clickOnElement(context, cardContainerText) }
)
Box(modifier = Modifier.weight(0.5f))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource
Expand All @@ -36,44 +34,42 @@ import com.orange.ods.demo.ui.utilities.composable.SwitchListItem
@Composable
fun VariantCardTitleFirst() {
val context = LocalContext.current
val thumbnailIsChecked = rememberSaveable { mutableStateOf(true) }
val textIsChecked = rememberSaveable { mutableStateOf(true) }
val subtitleIsChecked = rememberSaveable { mutableStateOf(true) }
val button1IsChecked = rememberSaveable { mutableStateOf(true) }
val button2IsChecked = rememberSaveable { mutableStateOf(true) }
val cardCustomizationState = rememberCardCustomizationState()

ComponentCustomizationBottomSheetScaffold(
bottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
bottomSheetContent = {
SwitchListItem(labelRes = R.string.component_element_thumbnail, checked = thumbnailIsChecked)
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleIsChecked)
SwitchListItem(labelRes = R.string.component_element_text, checked = textIsChecked)
SwitchListItem(labelRes = R.string.component_element_button1, checked = button1IsChecked)
SwitchListItem(labelRes = R.string.component_element_button2, checked = button2IsChecked)
}) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(dimensionResource(id = R.dimen.spacing_m))
.verticalScroll(state = rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(dimensionResource(id = R.dimen.spacing_m))
) {
val button1Text = stringResource(id = R.string.component_element_button1)
val button2Text = stringResource(id = R.string.component_element_button2)
val cardContainerText = stringResource(id = R.string.component_card_element_container)
with(cardCustomizationState) {
ComponentCustomizationBottomSheetScaffold(
bottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
bottomSheetContent = {
SwitchListItem(labelRes = R.string.component_element_thumbnail, checked = thumbnailChecked)
SwitchListItem(labelRes = R.string.component_element_subtitle, checked = subtitleChecked)
SwitchListItem(labelRes = R.string.component_element_text, checked = textChecked)
SwitchListItem(labelRes = R.string.component_element_button1, checked = button1Checked)
SwitchListItem(labelRes = R.string.component_element_button2, checked = button2Checked)
}) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(dimensionResource(id = R.dimen.spacing_m))
.verticalScroll(state = rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(dimensionResource(id = R.dimen.spacing_m))
) {
val button1Text = stringResource(id = R.string.component_element_button1)
val button2Text = stringResource(id = R.string.component_element_button2)
val cardContainerText = stringResource(id = R.string.component_card_element_container)

OdsCardTitleFirst(
title = stringResource(id = R.string.component_element_title),
image = painterResource(id = R.drawable.placeholder),
thumbnail = if (thumbnailIsChecked.value) painterResource(id = R.drawable.placeholder) else null,
subtitle = if (subtitleIsChecked.value) stringResource(id = R.string.component_element_subtitle) else null,
text = if (textIsChecked.value) stringResource(id = R.string.component_element_text_value) else null,
onCardClick = { clickOnElement(context, cardContainerText) },
button1Text = if (button1IsChecked.value) button1Text else null,
onButton1Click = { clickOnElement(context, button1Text) },
button2Text = if (button2IsChecked.value) button2Text else null,
onButton2Click = { clickOnElement(context, button2Text) }
)
OdsCardTitleFirst(
title = stringResource(id = R.string.component_element_title),
image = painterResource(id = R.drawable.placeholder),
thumbnail = if (hasThumbnail) painterResource(id = R.drawable.placeholder) else null,
subtitle = if (hasSubtitle) stringResource(id = R.string.component_element_subtitle) else null,
text = if (hasText) stringResource(id = R.string.component_element_text_value) else null,
onCardClick = { clickOnElement(context, cardContainerText) },
button1Text = if (hasButton1) button1Text else null,
onButton1Click = { clickOnElement(context, button1Text) },
button2Text = if (hasButton2) button2Text else null,
onButton2Click = { clickOnElement(context, button2Text) }
)
}
}
}
}

0 comments on commit c2ce5f0

Please sign in to comment.