diff --git a/Jetsnack/app/build.gradle.kts b/Jetsnack/app/build.gradle.kts index b66ac2188..0fca21037 100644 --- a/Jetsnack/app/build.gradle.kts +++ b/Jetsnack/app/build.gradle.kts @@ -119,7 +119,6 @@ dependencies { implementation(libs.androidx.lifecycle.viewModelCompose) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.navigation.compose) - implementation(libs.androidx.constraintlayout.compose) implementation(libs.androidx.compose.runtime) implementation(libs.androidx.compose.foundation) diff --git a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/cart/Cart.kt b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/cart/Cart.kt index d62a31d20..6a70cfbe9 100644 --- a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/cart/Cart.kt +++ b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/cart/Cart.kt @@ -65,8 +65,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import androidx.constraintlayout.compose.ChainStyle -import androidx.constraintlayout.compose.ConstraintLayout import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.example.jetsnack.R @@ -298,106 +296,77 @@ fun CartItem( modifier: Modifier = Modifier, ) { val snack = orderLine.snack - ConstraintLayout( + Column( modifier = modifier .fillMaxWidth() .clickable { onSnackClick(snack.id, "cart") } .background(JetsnackTheme.colors.uiBackground) - .padding(horizontal = 24.dp), - + .padding(horizontal = 24.dp) ) { - val (divider, image, name, tag, priceSpacer, price, remove, quantity) = createRefs() - createVerticalChain(name, tag, priceSpacer, price, chainStyle = ChainStyle.Packed) - SnackImage( - imageRes = snack.imageRes, - contentDescription = null, - modifier = Modifier - .size(100.dp) - .constrainAs(image) { - top.linkTo(parent.top, margin = 16.dp) - bottom.linkTo(parent.bottom, margin = 16.dp) - start.linkTo(parent.start) - }, - ) - Text( - text = snack.name, - style = MaterialTheme.typography.titleMedium, - color = JetsnackTheme.colors.textSecondary, - modifier = Modifier.constrainAs(name) { - linkTo( - start = image.end, - startMargin = 16.dp, - end = remove.start, - endMargin = 16.dp, - bias = 0f, - ) - }, - ) - IconButton( - onClick = { removeSnack(snack.id) }, - modifier = Modifier - .constrainAs(remove) { - top.linkTo(parent.top) - end.linkTo(parent.end) - } - .padding(top = 12.dp), + Row( + modifier = Modifier.fillMaxWidth() ) { - Icon( - painter = painterResource(id = R.drawable.ic_close), - tint = JetsnackTheme.colors.iconSecondary, - contentDescription = stringResource(R.string.label_remove), + SnackImage( + imageRes = snack.imageRes, + contentDescription = null, + modifier = Modifier + .padding(vertical = 16.dp) + .size(100.dp) ) - } - Text( - text = snack.tagline, - style = MaterialTheme.typography.bodyLarge, - color = JetsnackTheme.colors.textHelp, - modifier = Modifier.constrainAs(tag) { - linkTo( - start = image.end, - startMargin = 16.dp, - end = parent.end, - endMargin = 16.dp, - bias = 0f, - ) - }, - ) - Spacer( - Modifier - .height(8.dp) - .constrainAs(priceSpacer) { - linkTo(top = tag.bottom, bottom = price.top) - }, - ) - Text( - text = formatPrice(snack.price), - style = MaterialTheme.typography.titleMedium, - color = JetsnackTheme.colors.textPrimary, - modifier = Modifier.constrainAs(price) { - linkTo( - start = image.end, - end = quantity.start, - startMargin = 16.dp, - endMargin = 16.dp, - bias = 0f, + Column( + modifier = Modifier + .weight(1f) + .padding(start = 16.dp) + ) { + Row(modifier = Modifier.fillMaxWidth()) { + Text( + text = snack.name, + style = MaterialTheme.typography.titleMedium, + color = JetsnackTheme.colors.textSecondary, + modifier = Modifier + .weight(1f) + .padding(top = 16.dp, end = 16.dp) + ) + IconButton( + onClick = { removeSnack(snack.id) }, + modifier = Modifier.padding(top = 12.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.ic_close), + tint = JetsnackTheme.colors.iconSecondary, + contentDescription = stringResource(R.string.label_remove), + ) + } + } + Text( + text = snack.tagline, + style = MaterialTheme.typography.bodyLarge, + color = JetsnackTheme.colors.textHelp, + modifier = Modifier.padding(end = 16.dp) ) - }, - ) - QuantitySelector( - count = orderLine.count, - decreaseItemCount = { decreaseItemCount(snack.id) }, - increaseItemCount = { increaseItemCount(snack.id) }, - modifier = Modifier.constrainAs(quantity) { - baseline.linkTo(price.baseline) - end.linkTo(parent.end) - }, - ) - JetsnackDivider( - Modifier.constrainAs(divider) { - linkTo(start = parent.start, end = parent.end) - top.linkTo(parent.bottom) - }, - ) + Spacer(Modifier.height(8.dp)) + Row( + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = formatPrice(snack.price), + style = MaterialTheme.typography.titleMedium, + color = JetsnackTheme.colors.textPrimary, + modifier = Modifier + .weight(1f) + .padding(end = 16.dp) + .alignBy(LastBaseline) + ) + QuantitySelector( + count = orderLine.count, + decreaseItemCount = { decreaseItemCount(snack.id) }, + increaseItemCount = { increaseItemCount(snack.id) }, + modifier = Modifier.alignBy(LastBaseline) + ) + } + } + } + JetsnackDivider() } } diff --git a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/search/Results.kt b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/search/Results.kt index 828c8328a..87f0e88a5 100644 --- a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/search/Results.kt +++ b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/search/Results.kt @@ -19,8 +19,10 @@ package com.example.jetsnack.ui.home.search import android.content.res.Configuration import androidx.compose.foundation.Image import androidx.compose.foundation.clickable +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 @@ -42,8 +44,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.constraintlayout.compose.ChainStyle -import androidx.constraintlayout.compose.ConstraintLayout import com.example.jetsnack.R import com.example.jetsnack.model.Snack import com.example.jetsnack.model.snacks @@ -72,102 +72,65 @@ fun SearchResults(searchResults: List, onSnackClick: (Long, String) -> Un } @Composable -private fun SearchResult(snack: Snack, onSnackClick: (Long, String) -> Unit, showDivider: Boolean, modifier: Modifier = Modifier) { - ConstraintLayout( +private fun SearchResult( + snack: Snack, + onSnackClick: (Long, String) -> Unit, + showDivider: Boolean, + modifier: Modifier = Modifier +) { + Box( modifier = modifier .fillMaxWidth() .clickable { onSnackClick(snack.id, "search") } - .padding(horizontal = 24.dp), + .padding(horizontal = 24.dp) ) { - val (divider, image, name, tag, priceSpacer, price, add) = createRefs() - createVerticalChain(name, tag, priceSpacer, price, chainStyle = ChainStyle.Packed) if (showDivider) { JetsnackDivider( - Modifier.constrainAs(divider) { - linkTo(start = parent.start, end = parent.end) - top.linkTo(parent.top) - }, + Modifier.align(Alignment.TopCenter) ) } - SnackImage( - imageRes = snack.imageRes, - contentDescription = null, - modifier = Modifier - .size(100.dp) - .constrainAs(image) { - linkTo( - top = parent.top, - topMargin = 16.dp, - bottom = parent.bottom, - bottomMargin = 16.dp, - ) - start.linkTo(parent.start) - }, - ) - Text( - text = snack.name, - style = MaterialTheme.typography.titleMedium, - color = JetsnackTheme.colors.textSecondary, - modifier = Modifier.constrainAs(name) { - linkTo( - start = image.end, - startMargin = 16.dp, - end = add.start, - endMargin = 16.dp, - bias = 0f, + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(vertical = 16.dp) + ) { + SnackImage( + imageRes = snack.imageRes, + contentDescription = null, + modifier = Modifier.size(100.dp) + ) + Column( + modifier = Modifier + .weight(1f) + .padding(start = 16.dp, end = 16.dp) + ) { + Text( + text = snack.name, + style = MaterialTheme.typography.titleMedium, + color = JetsnackTheme.colors.textSecondary, ) - }, - ) - Text( - text = snack.tagline, - style = MaterialTheme.typography.bodyLarge, - color = JetsnackTheme.colors.textHelp, - modifier = Modifier.constrainAs(tag) { - linkTo( - start = image.end, - startMargin = 16.dp, - end = add.start, - endMargin = 16.dp, - bias = 0f, + Text( + text = snack.tagline, + style = MaterialTheme.typography.bodyLarge, + color = JetsnackTheme.colors.textHelp, ) - }, - ) - Spacer( - Modifier - .height(8.dp) - .constrainAs(priceSpacer) { - linkTo(top = tag.bottom, bottom = price.top) - }, - ) - Text( - text = formatPrice(snack.price), - style = MaterialTheme.typography.titleMedium, - color = JetsnackTheme.colors.textPrimary, - modifier = Modifier.constrainAs(price) { - linkTo( - start = image.end, - startMargin = 16.dp, - end = add.start, - endMargin = 16.dp, - bias = 0f, + Spacer(Modifier.height(8.dp)) + Text( + text = formatPrice(snack.price), + style = MaterialTheme.typography.titleMedium, + color = JetsnackTheme.colors.textPrimary, ) - }, - ) - JetsnackButton( - onClick = { /* todo */ }, - shape = CircleShape, - contentPadding = PaddingValues(0.dp), - modifier = Modifier - .size(36.dp) - .constrainAs(add) { - linkTo(top = parent.top, bottom = parent.bottom) - end.linkTo(parent.end) - }, - ) { - Icon( - painter = painterResource(id = R.drawable.ic_add), - contentDescription = stringResource(R.string.label_add), - ) + } + JetsnackButton( + onClick = { /* todo */ }, + shape = CircleShape, + contentPadding = PaddingValues(0.dp), + modifier = Modifier.size(36.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.ic_add), + contentDescription = stringResource(R.string.label_add), + ) + } } } } diff --git a/Jetsnack/gradle/libs.versions.toml b/Jetsnack/gradle/libs.versions.toml index 9b01ac78d..8558dce51 100644 --- a/Jetsnack/gradle/libs.versions.toml +++ b/Jetsnack/gradle/libs.versions.toml @@ -5,7 +5,6 @@ androidGradlePlugin = "9.0.0" androidx-activity-compose = "1.12.3" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.01.01" -androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" androidx-glance = "1.2.0-rc01" @@ -85,7 +84,6 @@ androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" } androidx-compose-ui-viewbinding = { module = "androidx.compose.ui:ui-viewbinding" } -androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout" } androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-corektx" } androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-core-splashscreen" } androidx-glance = { module = "androidx.glance:glance", version.ref = "androidx-glance" }