diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c819e0a7..ebe41dcd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] minSdk = "26" targetSdk = "34" -versionCode = "34" -versionName = "1.10.1" +versionCode = "36" +versionName = "1.10.0" packageName = "com.nexters.boolti" compileSdk = "34" targetJvm = "17" diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/QrScanActivity.kt b/presentation/src/main/java/com/nexters/boolti/presentation/QrScanActivity.kt index 66dd29b4..59cb9fed 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/QrScanActivity.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/QrScanActivity.kt @@ -1,5 +1,6 @@ package com.nexters.boolti.presentation +import android.Manifest import android.graphics.Color import android.hardware.Camera import android.os.Bundle @@ -19,6 +20,7 @@ import com.journeyapps.barcodescanner.BarcodeCallback import com.journeyapps.barcodescanner.BarcodeResult import com.journeyapps.barcodescanner.DecoratedBarcodeView import com.journeyapps.barcodescanner.DefaultDecoderFactory +import com.nexters.boolti.presentation.extension.requestPermission import com.nexters.boolti.presentation.extension.vibrator import com.nexters.boolti.presentation.screen.qr.QrScanScreen import com.nexters.boolti.presentation.theme.BooltiTheme @@ -65,6 +67,8 @@ class QrScanActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + requestPermission(Manifest.permission.CAMERA, 100) + enableEdgeToEdge( statusBarStyle = SystemBarStyle.dark(Color.TRANSPARENT), navigationBarStyle = SystemBarStyle.dark(0xFF090A0B.toInt()) diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/gift/GiftScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/gift/GiftScreen.kt index 2183d852..99287ca7 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/gift/GiftScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/gift/GiftScreen.kt @@ -242,7 +242,7 @@ fun GiftScreen( modifier = Modifier .fillMaxWidth() .background(MaterialTheme.colorScheme.background) - .padding(start = 20.dp, end = 20.dp, top = 8.dp, bottom = 24.dp), + .padding(start = 20.dp, end = 20.dp, top = 8.dp, bottom = 20.dp), enabled = uiState.isComplete, label = stringResource( R.string.ticketing_payment_button_label, diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/giftcomplete/GiftCompleteScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/giftcomplete/GiftCompleteScreen.kt index 562c0e28..1f6557c0 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/giftcomplete/GiftCompleteScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/giftcomplete/GiftCompleteScreen.kt @@ -7,6 +7,7 @@ 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.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -26,6 +27,9 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -52,6 +56,7 @@ import com.nexters.boolti.presentation.R import com.nexters.boolti.presentation.component.BtCircularProgressIndicator import com.nexters.boolti.presentation.component.SecondaryButton import com.nexters.boolti.presentation.component.ShowItem +import com.nexters.boolti.presentation.component.TopGradientBackground import com.nexters.boolti.presentation.component.dummyReservationDetail import com.nexters.boolti.presentation.extension.cardCodeToCompanyName import com.nexters.boolti.presentation.screen.payment.PaymentToolbar @@ -102,6 +107,7 @@ fun GiftCompleteScreen( reservation: ReservationDetail, ) { val context = LocalContext.current + var bottomButtonHeight by remember { mutableStateOf(0.dp) } BackHandler(onBack = onClickClose) @@ -188,15 +194,21 @@ fun GiftCompleteScreen( ShowInformation( reservation = reservation ) + Spacer(modifier = Modifier.height(bottomButtonHeight)) } - SecondaryButton( - modifier = Modifier - .align(Alignment.BottomCenter) - .fillMaxWidth() - .padding(top = 16.dp, bottom = 20.dp), - label = stringResource(R.string.show_reservation), + TopGradientBackground( + modifier = Modifier.align(Alignment.BottomCenter), + onHeightChanged = { bottomButtonHeight = it }, ) { - navigateToReservation(reservation) + SecondaryButton( + modifier = Modifier + .align(Alignment.BottomCenter) + .fillMaxWidth() + .padding(bottom = 20.dp), + label = stringResource(R.string.show_reservation), + ) { + navigateToReservation(reservation) + } } } } @@ -392,6 +404,7 @@ private fun ShowInformation( } @Composable +@Preview(device = "spec:width=1080px,height=1340px,dpi=440") @Preview fun GiftCompleteScreenPreview( ) { diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/login/LoginScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/login/LoginScreen.kt index f3bde41b..323950b9 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/login/LoginScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/login/LoginScreen.kt @@ -172,9 +172,7 @@ private fun SignUpBottomSheet( MainButton( modifier = Modifier .fillMaxWidth() - .padding(top = 18.dp) - .padding(vertical = 8.dp) - .padding(bottom = 20.dp), + .padding(top = 18.dp, bottom = 20.dp), label = stringResource(id = R.string.signup_with_agreement), onClick = signUp, ) diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/payment/PaymentCompleteScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/payment/PaymentCompleteScreen.kt index 7108b258..caf3835d 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/payment/PaymentCompleteScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/payment/PaymentCompleteScreen.kt @@ -7,8 +7,10 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState @@ -20,6 +22,9 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -37,6 +42,7 @@ import com.nexters.boolti.presentation.component.BtAppBarDefaults import com.nexters.boolti.presentation.component.MainButton import com.nexters.boolti.presentation.component.SecondaryButton import com.nexters.boolti.presentation.component.ShowItem +import com.nexters.boolti.presentation.component.TopGradientBackground import com.nexters.boolti.presentation.extension.cardCodeToCompanyName import com.nexters.boolti.presentation.theme.BooltiTheme import com.nexters.boolti.presentation.theme.Grey15 @@ -80,6 +86,7 @@ private fun PaymentCompleteScreen( ) { val context = LocalContext.current val scrollState = rememberScrollState() + var bottomButtonHeight by remember { mutableStateOf(0.dp) } Box( modifier = modifier.fillMaxSize(), @@ -161,27 +168,35 @@ private fun PaymentCompleteScreen( showName = reservation.showName, showDate = reservation.showDate, ) + + Spacer(modifier = Modifier.height(bottomButtonHeight)) } - Row( + TopGradientBackground( modifier = Modifier - .fillMaxWidth() - .align(Alignment.BottomCenter) - .padding(horizontal = marginHorizontal) - .padding(bottom = 20.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp), + .align(Alignment.BottomCenter), + onHeightChanged = { bottomButtonHeight = it }, ) { - SecondaryButton( - modifier = Modifier.weight(1f), - label = stringResource(R.string.show_reservation), - ) { - navigateToReservation(reservation) - } - MainButton( - modifier = Modifier.weight(1f), - label = stringResource(R.string.show_ticket), + Row( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.BottomCenter) + .padding(horizontal = marginHorizontal) + .padding(bottom = 20.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), ) { - navigateToTicketDetail(reservation) + SecondaryButton( + modifier = Modifier.weight(1f), + label = stringResource(R.string.show_reservation), + ) { + navigateToReservation(reservation) + } + MainButton( + modifier = Modifier.weight(1f), + label = stringResource(R.string.show_ticket), + ) { + navigateToTicketDetail(reservation) + } } } } diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profile/ProfileScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profile/ProfileScreen.kt index f073b18f..0f0d630b 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profile/ProfileScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profile/ProfileScreen.kt @@ -246,6 +246,8 @@ fun ProfileScreen( } } } + + Spacer(Modifier.size(32.dp)) } backDialogMessage?.let { msg -> diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/link/LinkEditScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/link/LinkEditScreen.kt index dd99367c..1b604ac1 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/link/LinkEditScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/link/LinkEditScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -34,6 +35,7 @@ import com.nexters.boolti.presentation.component.BTTextFieldDefaults import com.nexters.boolti.presentation.component.BtAppBar import com.nexters.boolti.presentation.component.BtAppBarDefaults import com.nexters.boolti.presentation.component.MainButton +import com.nexters.boolti.presentation.theme.BooltiTheme import com.nexters.boolti.presentation.theme.Grey30 import com.nexters.boolti.presentation.theme.Grey90 import com.nexters.boolti.presentation.theme.marginHorizontal @@ -113,9 +115,10 @@ fun LinkEditScreen( .padding(innerPadding), ) { Column( - modifier = Modifier.padding(20.dp), + modifier = Modifier.padding(horizontal = 20.dp), ) { Row( + modifier = Modifier.padding(top = 20.dp), verticalAlignment = Alignment.CenterVertically, ) { Text( @@ -141,7 +144,7 @@ fun LinkEditScreen( ) } Row( - modifier = Modifier.padding(top = 16.dp), + modifier = Modifier.padding(top = 16.dp, bottom = 20.dp), verticalAlignment = Alignment.CenterVertically, ) { Text( @@ -172,7 +175,7 @@ fun LinkEditScreen( MainButton( modifier = Modifier .align(Alignment.BottomCenter) - .padding(marginHorizontal) + .padding(horizontal = marginHorizontal) .padding(bottom = 20.dp) .fillMaxWidth(), label = stringResource(R.string.link_remove), @@ -201,3 +204,20 @@ fun LinkEditScreen( } } } + +@Preview +@Composable +private fun LinkEditScreenPreview() { + BooltiTheme { + LinkEditScreen( + isEditMode = true, + linkName = "링크 이름", + linkUrl = "링크 URL", + onClickBack = {}, + onClickComplete = {}, + onChangeLinkName = {}, + onChangeLinkUrl = {}, + requireRemove = {}, + ) + } +} diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/sns/SnsEditScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/sns/SnsEditScreen.kt index 825bc231..072e47c0 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/sns/SnsEditScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/profileedit/sns/SnsEditScreen.kt @@ -123,11 +123,12 @@ private fun SnsEditScreen( .fillMaxSize(), ) { Column( - modifier = Modifier.padding(marginHorizontal), + modifier = Modifier.padding(horizontal = marginHorizontal), verticalArrangement = Arrangement.spacedBy(20.dp), ) { // SNS Row( + modifier = Modifier.padding(top = 20.dp), verticalAlignment = Alignment.CenterVertically, ) { Label(stringResource(R.string.sns)) @@ -147,7 +148,9 @@ private fun SnsEditScreen( } // Username - Row { + Row( + modifier = Modifier.padding(bottom = 20.dp), + ) { Label( label = stringResource(R.string.username), modifier = Modifier.centerToTop(top = 24.dp), diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/qr/QrScanScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/qr/QrScanScreen.kt index 6fc7d4f8..d1d5c3e7 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/qr/QrScanScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/qr/QrScanScreen.kt @@ -39,6 +39,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp @@ -236,8 +237,10 @@ private fun QrScanBottombar(onClick: () -> Unit) { ) Row( modifier = Modifier - .clickable(onClick = onClick) - .padding(top = 20.dp, bottom = 32.dp), + .padding(bottom = 12.dp) + .clip(MaterialTheme.shapes.medium) + .clickable(onClick = onClick, role = Role.Button) + .padding(vertical = 20.dp, horizontal = 10.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center, ) { diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/refund/RefundInfoPage.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/refund/RefundInfoPage.kt index d0a25bec..8ddca435 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/refund/RefundInfoPage.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/refund/RefundInfoPage.kt @@ -136,7 +136,7 @@ fun RefundInfoPage( modifier = Modifier .fillMaxWidth() .padding(horizontal = marginHorizontal) - .padding(top = 16.dp, bottom = 20.dp), + .padding(top = 16.dp, bottom = 32.dp), onClick = onRequest, enabled = uiState.isAbleToRequest, label = stringResource(id = R.string.refund_button) diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/reservationdetail/ReservationDetailScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/reservationdetail/ReservationDetailScreen.kt index ed6921a4..e4c1c6b4 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/reservationdetail/ReservationDetailScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/reservationdetail/ReservationDetailScreen.kt @@ -146,7 +146,7 @@ fun ReservationDetailScreen( MainButton( modifier = modifier .padding(horizontal = marginHorizontal) - .padding(top = 8.dp, bottom = 20.dp) + .padding(top = 8.dp, bottom = 32.dp) .fillMaxWidth(), colors = MainButtonDefaults.buttonColors( containerColor = Grey15, @@ -161,9 +161,9 @@ fun ReservationDetailScreen( } } ) + } else { + Spacer(Modifier.size(32.dp)) } - - Spacer(Modifier.size(32.dp)) } if (showRefundDialog) { diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailButtons.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailButtons.kt index 27d60431..2aaddcf6 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailButtons.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailButtons.kt @@ -1,15 +1,14 @@ package com.nexters.boolti.presentation.screen.showdetail -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp @@ -20,7 +19,6 @@ import com.nexters.boolti.presentation.component.MainButton import com.nexters.boolti.presentation.component.MainButtonDefaults import com.nexters.boolti.presentation.component.TopGradientBackground import com.nexters.boolti.presentation.extension.asString -import com.nexters.boolti.presentation.extension.toDp import com.nexters.boolti.presentation.theme.BooltiTheme import com.nexters.boolti.presentation.theme.Grey50 import com.nexters.boolti.presentation.theme.Grey80 @@ -34,18 +32,14 @@ fun ShowDetailButtons( onGiftClicked: () -> Unit, onHeightChanged: (height: Dp) -> Unit = {}, ) { - val density = LocalDensity.current TopGradientBackground( - modifier = Modifier.onGloballyPositioned { coord -> - onHeightChanged(coord.size.height.toDp(density)) - } + onHeightChanged = onHeightChanged, ) { Row( modifier = Modifier .fillMaxWidth() - .background(color = MaterialTheme.colorScheme.background) .padding(horizontal = marginHorizontal) - .padding(top = 8.dp, bottom = 20.dp), + .padding(bottom = 20.dp), horizontalArrangement = Arrangement.spacedBy(9.dp), ) { if (showState == ShowState.TicketingInProgress) { @@ -114,11 +108,14 @@ private fun TicketingButton( @Composable fun ShowDetailButtonsPreview() { BooltiTheme { - ShowDetailButtons( - showState = ShowState.TicketingInProgress, - onTicketingClicked = {}, - onGiftClicked = {} - ) + Column { + Spacer(Modifier.weight(1f)) + ShowDetailButtons( + showState = ShowState.TicketingInProgress, + onTicketingClicked = {}, + onGiftClicked = {} + ) + } } } @@ -126,12 +123,15 @@ fun ShowDetailButtonsPreview() { @Composable fun ShowDetailButtonsBeforeTicketingPreview() { BooltiTheme { - ShowDetailButtons( - showState = ShowState.WaitingTicketing( - Duration.ofSeconds(1 * 86400 + 2 * 3600 + 17) - ), - onTicketingClicked = {}, - onGiftClicked = {} - ) + Column { + Spacer(Modifier.weight(1f)) + ShowDetailButtons( + showState = ShowState.WaitingTicketing( + Duration.ofSeconds(1 * 86400 + 2 * 3600 + 17) + ), + onTicketingClicked = {}, + onGiftClicked = {} + ) + } } } \ No newline at end of file diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailScreen.kt index 6d23c32f..4d13ce62 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/showdetail/ShowDetailScreen.kt @@ -231,7 +231,7 @@ fun ShowDetailScreen( var showBottomSheet by remember { mutableStateOf(null) } Box( - modifier = Modifier.fillMaxSize(), + modifier = modifier.fillMaxSize(), ) { val showCountdownBanner = showDetail.salesEndDateTime.toLocalDate() == LocalDate.now() @@ -248,7 +248,7 @@ fun ShowDetailScreen( val paddingTop = if (showCountdownBanner) (38 + 40).dp else 16.dp Poster( - modifier = modifier + modifier = Modifier .fillMaxWidth() .clip( shape = RoundedCornerShape( diff --git a/presentation/src/main/java/com/nexters/boolti/presentation/screen/ticketing/TicketingScreen.kt b/presentation/src/main/java/com/nexters/boolti/presentation/screen/ticketing/TicketingScreen.kt index 9be2d0ff..4b1b952f 100644 --- a/presentation/src/main/java/com/nexters/boolti/presentation/screen/ticketing/TicketingScreen.kt +++ b/presentation/src/main/java/com/nexters/boolti/presentation/screen/ticketing/TicketingScreen.kt @@ -39,6 +39,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -153,6 +154,8 @@ private fun TicketingScreen( val context = LocalContext.current var bottomButtonHeight by remember { mutableStateOf(0.dp) } + val uiState by rememberUpdatedState(uiState) + val paymentLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> when (result.resultCode) { @@ -318,7 +321,7 @@ private fun TicketingScreen( modifier = Modifier .fillMaxWidth() .background(MaterialTheme.colorScheme.background) - .padding(start = 20.dp, end = 20.dp, top = 8.dp, bottom = 24.dp), + .padding(start = 20.dp, end = 20.dp, top = 8.dp, bottom = 20.dp), enabled = uiState.reservationButtonEnabled, label = stringResource( R.string.ticketing_payment_button_label,