Skip to content

Commit 88d44da

Browse files
committed
feat(Explore): horizontal cards in horizontal orientation
1 parent 91ebcc2 commit 88d44da

File tree

3 files changed

+118
-11
lines changed

3 files changed

+118
-11
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package org.shirabox.app.ui.component.general
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.clickable
5+
import androidx.compose.foundation.layout.Arrangement
6+
import androidx.compose.foundation.layout.Box
7+
import androidx.compose.foundation.layout.Column
8+
import androidx.compose.foundation.layout.fillMaxSize
9+
import androidx.compose.foundation.layout.fillMaxWidth
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.shape.RoundedCornerShape
12+
import androidx.compose.material3.Surface
13+
import androidx.compose.material3.Text
14+
import androidx.compose.runtime.Composable
15+
import androidx.compose.ui.Alignment
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.graphics.Color
18+
import androidx.compose.ui.layout.ContentScale
19+
import androidx.compose.ui.text.font.FontWeight
20+
import androidx.compose.ui.text.style.TextAlign
21+
import androidx.compose.ui.text.style.TextOverflow
22+
import androidx.compose.ui.unit.dp
23+
import coil.compose.AsyncImage
24+
25+
@Composable
26+
fun HorizontalCard(
27+
modifier: Modifier = Modifier,
28+
title: String,
29+
subTitle: String,
30+
image: String,
31+
onClick: () -> Unit
32+
) {
33+
34+
Surface(
35+
modifier = modifier,
36+
shape = RoundedCornerShape(10),
37+
shadowElevation = 8.dp
38+
) {
39+
Box(
40+
modifier = Modifier.clickable { onClick() }
41+
) {
42+
AsyncImage(
43+
modifier = Modifier.fillMaxSize(),
44+
model = image,
45+
contentDescription = image,
46+
contentScale = ContentScale.Crop,
47+
alignment = Alignment.TopCenter
48+
)
49+
50+
Column(
51+
modifier = Modifier
52+
.fillMaxSize()
53+
.background(Color.Black.copy(0.5f)),
54+
verticalArrangement = Arrangement.Bottom,
55+
horizontalAlignment = Alignment.Start
56+
) {
57+
Column(
58+
modifier = Modifier.padding(16.dp),
59+
horizontalAlignment = Alignment.CenterHorizontally
60+
) {
61+
Column(
62+
modifier = Modifier.fillMaxWidth(),
63+
verticalArrangement = Arrangement.Bottom,
64+
horizontalAlignment = Alignment.Start
65+
) {
66+
Text(
67+
modifier = Modifier.fillMaxWidth(),
68+
text = title,
69+
color = Color.White,
70+
fontWeight = FontWeight.Bold,
71+
maxLines = 1,
72+
overflow = TextOverflow.Ellipsis,
73+
textAlign = TextAlign.Start
74+
)
75+
Text(
76+
modifier = Modifier.fillMaxWidth(),
77+
text = subTitle,
78+
color = Color.White,
79+
maxLines = 1,
80+
overflow = TextOverflow.Ellipsis,
81+
textAlign = TextAlign.Start
82+
)
83+
}
84+
}
85+
}
86+
}
87+
}
88+
}

app/src/main/java/org/shirabox/app/ui/component/general/ScheduleCard.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fun ScheduleCard(
4444
it.getDuration()
4545
}
4646

47-
"$firstTimeLabel".plus(secondTimeLabel?.let { " - $it" })
47+
firstTimeLabel.plus(secondTimeLabel?.let { " - $it" })
4848
}
4949

5050
Surface(

app/src/main/java/org/shirabox/app/ui/screen/explore/feed/primary/PrimaryPopularsFeed.kt

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.shirabox.app.R
2828
import org.shirabox.app.ui.activity.resource.ResourceActivity
2929
import org.shirabox.app.ui.component.general.BaseCard
3030
import org.shirabox.app.ui.component.general.ContentCardPlaceholder
31+
import org.shirabox.app.ui.component.general.HorizontalCard
3132
import org.shirabox.core.model.Content
3233
import org.shirabox.core.util.Util
3334

@@ -36,11 +37,15 @@ internal fun PrimaryPopularsFeed(isReady: Boolean, contents: List<Content>) {
3637
val context = LocalContext.current
3738
val configuration = LocalConfiguration.current
3839

39-
val cardWidth = 180
40-
val cardHeight = 240
41-
val columns = remember { configuration.screenWidthDp.floorDiv(cardWidth) }
40+
val cardWidth = remember(configuration.orientation) { if(configuration.orientation == 1) 180 else 260 }
41+
val cardHeight = remember(configuration.orientation) { if(configuration.orientation == 1) 240 else 180 }
4242

43-
val gridHeight by remember(contents) {
43+
val columns = remember(configuration.orientation) { configuration.screenWidthDp.floorDiv(cardWidth) }
44+
val placeholders = remember(configuration.orientation) {
45+
if (configuration.orientation == 2) 7 else 2
46+
}
47+
48+
val gridHeight by remember(contents, configuration.orientation) {
4449
derivedStateOf {
4550
Util.calcGridHeight(
4651
itemsCount = contents.size.plus(2),
@@ -73,11 +78,7 @@ internal fun PrimaryPopularsFeed(isReady: Boolean, contents: List<Content>) {
7378
userScrollEnabled = false
7479
) {
7580
items(contents) {
76-
BaseCard(
77-
modifier = Modifier
78-
.size(cardWidth.dp, cardHeight.dp),
79-
title = it.name, image = it.image, type = it.type
80-
) {
81+
val action = {
8182
context.startActivity(
8283
Intent(
8384
context,
@@ -88,9 +89,27 @@ internal fun PrimaryPopularsFeed(isReady: Boolean, contents: List<Content>) {
8889
}
8990
)
9091
}
92+
93+
if (configuration.orientation == 1) {
94+
BaseCard(
95+
modifier = Modifier.size(cardWidth.dp, cardHeight.dp),
96+
title = it.name,
97+
image = it.image,
98+
type = it.type,
99+
onClick = action
100+
)
101+
} else {
102+
HorizontalCard(
103+
modifier = Modifier.size(cardWidth.dp, cardHeight.dp),
104+
title = it.name,
105+
subTitle = it.enName,
106+
image = it.image,
107+
onClick = action
108+
)
109+
}
91110
}
92111

93-
items(2) {
112+
items(placeholders) {
94113
ContentCardPlaceholder(modifier = Modifier.size(cardWidth.dp, cardHeight.dp))
95114
}
96115
}

0 commit comments

Comments
 (0)