Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private data class CreditCard(val type: CreditCardTypes, val lastDigits: String)
- @Composable
- fun CardSelectionScreen(onCardSelected: () -> Unit) {
- Column(
- horizontalAlignment = Alignment.CenterHorizontally,
- modifier = Modifier
- .padding(vertical = 24.dp, horizontal = 16.dp)
- .verticalScroll(rememberScrollState())
- ) {
- var selectedCardIndex by remember { mutableStateOf(0) }
- val cardList = listOf(
- CreditCard(CreditCardTypes.MASTERCARD, "3429"),
- CreditCard(CreditCardTypes.VISA, "3429"),
- CreditCard(CreditCardTypes.MASTERCARD, "3429")
- )
- TopBarPadding(true)
- Spacer(modifier = Modifier.height(10.dp))
- RaisedCard() {
- Column(
- modifier = Modifier.padding(vertical = 20.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp),
- ) {
- Text(
- text = stringResource(id = R.string.please_select_a_card),
- fontSize = 16.sp,
- fontWeight = FontWeight.Bold,
- textAlign = TextAlign.Start
- )
- Spacer(modifier = Modifier.height(9.dp))
- for (i in cardList.indices) {
- CreditCardItem(cardList[i],
- isSelected = selectedCardIndex == i, onItemSelected = { ->
- selectedCardIndex = i
- })
- }
- ShadowWrapper( // This is the item's layout
- cardElevation = 1.dp,
- shadowElevation = 3.dp
- ) {
- Column(
- modifier = Modifier
- .animateContentSize()
- ) {
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clip(RoundedCornerShape(6.dp))
- .background(
- if (selectedCardIndex == cardList.size) colorResource(
- id = R.color.bottom_modal_drawer_background
- ) else Color.White
- )
- .padding(horizontal = 16.dp, vertical = 16.dp)
- .clickable(
- indication = null,
- interactionSource = MutableInteractionSource()
- ) { // this does not register at all, tried with Log.d
- selectedCardIndex = cardList.size
- },
- verticalAlignment = Alignment.CenterVertically
- ) {
- Image(
- painter = painterResource(id = R.drawable.ic_add_credit_card),
- contentDescription = "Add credit card icon"
- )
- Spacer(modifier = Modifier.width(13.dp))
- Text(
- stringResource(id = R.string.new_card_addition),
- textAlign = TextAlign.Start,
- fontSize = 16.sp,
- fontWeight = FontWeight.Normal,
- color = colorResource(id = R.color.Orange_100)
- )
- }
- if (selectedCardIndex == cardList.size) {
- Column(
- modifier = Modifier.padding(
- horizontal = 16.dp
- )
- ) {
- Spacer(modifier = Modifier.padding(22.fixedDp()))
- Text(
- text = LocalContext.current.getString(R.string.add_credit_card_top_msg),
- fontSize = 16.sp,
- fontWeight = FontWeight.Bold,
- color = colorResource(id = R.color.Black_100)
- )
- Spacer(modifier = Modifier.padding(10.dp))
- InputField(label = LocalContext.current.getString(R.string.owner_name))
- Spacer(modifier = Modifier.padding(18.fixedDp()))
- InputField(label = LocalContext.current.getString(R.string.credit_card_number))
- Spacer(modifier = Modifier.padding(18.fixedDp()))
- Row() {
- Box(
- modifier = Modifier
- .weight(1.5f)
- ) {
- InputField(label = LocalContext.current.getString(R.string.expiration_date))
- }
- Spacer(modifier = Modifier.padding(6.fixedDp()))
- Box(
- modifier = Modifier
- .weight(1f)
- ) {
- InputField(
- label = LocalContext.current.getString(R.string.cvv),
- isPassword = true,
- placeholder = ""
- )
- }
- }
- Spacer(modifier = Modifier.height(34.fixedDp()))
- Row() {
- MyCheckbox(
- modifier = Modifier.padding(top = 3.dp),
- isCheckedInitially = true
- )
- Spacer(modifier = Modifier.width(13.dp))
- Text(
- stringResource(id = R.string.save_card_for_future_transactions),
- fontSize = 14.sp,
- fontWeight = FontWeight.Normal,
- color = colorResource(id = R.color.Black_100)
- )
- }
- Spacer(modifier = Modifier.padding(22.fixedDp()))
- }
- }
- }
- }
- Spacer(modifier = Modifier.height(2.dp))
- }
- }
- Spacer(modifier = Modifier.height(32.dp))
- MyButton(
- text = stringResource(id = R.string.continue_text),
- MyButtonType.PRIMARY,
- onClick = { onCardSelected() }
- )
- Spacer(modifier = Modifier.height(20.dp))
- AcceptedCardsFooter()
- BottomBarPadding(true)
- }
- }
- @Composable
- private fun CreditCardItem(
- cardDetails: CreditCard,
- isSelected: Boolean,
- onItemSelected: () -> Unit
- ) {
- ShadowWrapper(cardElevation = 1.dp, shadowElevation = 3.dp) {
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clip(RoundedCornerShape(6.dp))
- .background(if (isSelected) colorResource(id = R.color.bottom_modal_drawer_background) else Color.White)
- .padding(horizontal = 16.dp, vertical = 15.dp)
- .clickable(indication = null, interactionSource = MutableInteractionSource()) {
- onItemSelected()
- },
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically
- ) {
- Row(verticalAlignment = Alignment.CenterVertically) {
- MyRadioButton(label = "", selected = isSelected)
- Spacer(modifier = Modifier.width(16.dp))
- Box(
- modifier = Modifier
- .width(43.dp)
- .height(33.dp)
- .clip(RoundedCornerShape(4.dp))
- .background(colorResource(id = R.color.Grey_10))
- .padding(horizontal = 6.dp, vertical = 7.dp)
- ) {
- Image(
- painter = painterResource(id = cardDetails.type.icon),
- contentDescription = "",
- modifier = Modifier.align(Alignment.Center)
- )
- }
- Spacer(modifier = Modifier.padding(8.fixedDp()))
- Text(
- text = "${cardDetails.type.prefix}****${cardDetails.lastDigits}",
- fontSize = 16.sp,
- color = colorResource(id = R.color.Black_100)
- )
- }
- }
- }
- }
- @Composable
- fun RaisedCard(
- modifier: Modifier = Modifier,
- mainBody: @Composable () -> Unit
- ) {
- Card(
- shape = RoundedCornerShape(13.dp),
- elevation = 10.dp,
- modifier = modifier
- .fillMaxWidth()
- .wrapContentHeight()
- ) {
- Column(
- modifier = Modifier
- .background(Color.White)
- .padding(horizontal = 16.dp)
- ) {
- mainBody()
- }
- }
- }
- @Preview(widthDp = 300, heightDp = 500)
- @Composable
- private fun TopUpCardViewPreview() {
- Column(
- modifier = Modifier.padding(horizontal = 16.dp, vertical = 25.dp)
- ) {
- RaisedCard() {
- Text("Your main layout goes here")
- }
- }
- }
- @Composable
- fun ShadowWrapper(
- modifier: Modifier = Modifier,
- border: BorderStroke = BorderStroke(0.dp, Color.Transparent),
- cardElevation: Dp = 2.dp,
- shadowElevation: Dp = 1.dp,
- shadowShapeRadius: Dp = 6.dp,
- content: @Composable () -> Unit,
- ) {
- Card(
- elevation = cardElevation,
- border = border,
- shape = RoundedCornerShape(shadowShapeRadius),
- modifier = modifier.shadow(shadowElevation, RoundedCornerShape(shadowShapeRadius)).wrapContentHeight()
- ) {
- content()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment