Skip to content

Commit 02104a4

Browse files
Merge pull request #55 from CodandoTV/feature/43_highlightcard
[ISSUE-43] HighlightBanner card
2 parents 0b48c17 + 6ba9bfd commit 02104a4

File tree

17 files changed

+415
-20
lines changed

17 files changed

+415
-20
lines changed

app/src/main/java/com/codandotv/streamplayerapp/MainActivity.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import androidx.activity.ComponentActivity
55
import androidx.activity.compose.setContent
66
import androidx.compose.runtime.Composable
77
import androidx.navigation.compose.rememberNavController
8-
import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation
9-
import com.codandotv.streamplayerapp.core_navigation.helper.currentRoute
10-
import com.codandotv.streamplayerapp.core_navigation.routes.Routes
118
import com.codandotv.streamplayerapp.core_shared_ui.theme.StreamPlayerTheme
129
import com.codandotv.streamplayerapp.navigation.NavigationGraph
1310

core-shared-ui/src/main/java/com/codandotv/streamplayerapp/core_shared_ui/resources/Colors.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@ import androidx.compose.material3.lightColorScheme
55
import androidx.compose.ui.graphics.Color
66

77
object Colors {
8-
val DarkDeepGray = Color(0xFF262626)
9-
val Dark80 = Color(0xCC000000)
8+
val Dark10 = Color(0x1A000000)
109

1110
val LightColors = lightColorScheme(
1211
primary = Color(0xFFE50914),
1312
secondary = Color(0xFFF5F5F1),
14-
background = Color(0xFFFFFFFF),
15-
onBackground = Color(0xFF070707),
16-
surface = Color(0xFFFFFFFF),
17-
onSurface = Color(0xFF121212),
18-
onSurfaceVariant = Color(0xFF9B9B9B),
13+
background = Color(0xFF000000),
14+
onBackground = Color(0xFFFFFFFF),
15+
surface = Color(0xFF121212),
16+
onSurface = Color(0xFFF5F5F1),
17+
onSurfaceVariant = Color(0XFF7b7b7b)
1918
)
2019

2120
val DarkColors = darkColorScheme(

core-shared-ui/src/main/java/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBar.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
3535
@OptIn(ExperimentalMaterial3Api::class)
3636
@Composable
3737
fun StreamPlayerTopBar(scrollBehavior: TopAppBarScrollBehavior) {
38-
Box(modifier = Modifier.background(color = Colors.Dark80)) {
38+
Box(modifier = Modifier.background(color = Colors.Dark10)) {
3939
StreamPlayerTopBar()
4040
StreamPlayerOptionsTopBar(modifier = Modifier.padding(top = 50.dp), scrollBehavior)
4141
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M450,760L450,510L200,510L200,450L450,450L450,200L510,200L510,450L760,450L760,510L510,510L510,760L450,760Z"/>
10+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M453,680L513,680L513,440L453,440L453,680ZM479.98,366Q494,366 503.5,356.8Q513,347.6 513,334Q513,319.55 503.52,309.78Q494.04,300 480.02,300Q466,300 456.5,309.78Q447,319.55 447,334Q447,347.6 456.48,356.8Q465.96,366 479.98,366ZM480.27,880Q397.53,880 324.77,848.5Q252,817 197.5,762.5Q143,708 111.5,635.16Q80,562.32 80,479.5Q80,396.68 111.5,323.84Q143,251 197.5,197Q252,143 324.84,111.5Q397.68,80 480.5,80Q563.32,80 636.16,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,479.73Q880,562.47 848.5,635.23Q817,708 763,762.32Q709,816.63 636,848.32Q563,880 480.27,880ZM480.5,820Q622,820 721,720.5Q820,621 820,479.5Q820,338 721.19,239Q622.38,140 480,140Q339,140 239.5,238.81Q140,337.63 140,480Q140,621 239.5,720.5Q339,820 480.5,820ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
10+
</vector>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/black"
9+
android:pathData="M320,760L320,200L760,480L320,760Z"/>
10+
</vector>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.codandotv.streamplayerapp.feature_list_streams.core
2+
3+
import androidx.annotation.StringRes
4+
import com.codandotv.streamplayerapp.feature_list_streams.R
5+
6+
enum class ContentType(@StringRes val contentName: Int, @StringRes val contentNameAsPlural: Int) {
7+
SHOW(R.string.list_content_type_show, R.string.list_content_type_show_plural),
8+
FILM(R.string.list_content_type_film, R.string.list_content_type_film_plural);
9+
10+
companion object {
11+
fun getContentName(contentType: ContentType) =
12+
values().first { contentType == it }.contentName
13+
14+
fun getContentNameAsPlural(contentType: ContentType) =
15+
values().first { contentType == it }.contentNameAsPlural
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.codandotv.streamplayerapp.feature_list_streams.list.domain.model
2+
3+
import android.os.Parcelable
4+
import androidx.annotation.DrawableRes
5+
import androidx.annotation.StringRes
6+
import kotlinx.parcelize.Parcelize
7+
8+
@Parcelize
9+
data class HighlightBanner(
10+
val name: String,
11+
val imageUrl: String,
12+
val contentType: Int,
13+
val contentTypeAsPlural: Int,
14+
val extraInfo: IconAndTextInfo,
15+
val leftButton: IconAndTextInfo,
16+
val centralButton: IconAndTextInfo,
17+
val rightButton: IconAndTextInfo
18+
) : Parcelable
19+
20+
@Parcelize
21+
data class IconAndTextInfo(
22+
@DrawableRes val icon: Int,
23+
@StringRes val text: Int
24+
) : Parcelable
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.list.presentation
22

33
import android.content.res.Resources
4+
import com.codandotv.streamplayerapp.core_shared_ui.R.*
5+
import com.codandotv.streamplayerapp.feature_list_streams.R
6+
import com.codandotv.streamplayerapp.feature_list_streams.core.ContentType
7+
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.HighlightBanner
8+
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.IconAndTextInfo
49
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.ListStream
510
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.CarouselData
611
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamsUIState
@@ -17,14 +22,36 @@ class ListStreamUiModelImpl(
1722
return ListStreamsUIState(
1823
isLoading = false,
1924
carousels = listStream.map {
20-
CarouselData(categoryName = it.categoryName,
21-
cards = it.streams.map { stream ->
22-
StreamsCardContent(
23-
contentDescription = stream.name,
24-
url = stream.posterPathUrl,
25-
id = stream.id
26-
)
27-
})
28-
})
25+
CarouselData(categoryName = it.categoryName,
26+
cards = it.streams.map { stream ->
27+
StreamsCardContent(
28+
contentDescription = stream.name,
29+
url = stream.posterPathUrl,
30+
id = stream.id
31+
)
32+
})
33+
},
34+
highlightBanner = getHighlightBanner(listStream)
35+
)
36+
}
37+
38+
private fun getHighlightBanner(listStream: List<ListStream>): HighlightBanner? {
39+
if (listStream.isEmpty()) return null
40+
41+
val item = listStream.random().streams.random()
42+
43+
return HighlightBanner(
44+
name = item.name,
45+
imageUrl = item.posterPathUrl,
46+
contentType = ContentType.getContentName(ContentType.FILM),
47+
contentTypeAsPlural = ContentType.getContentNameAsPlural(ContentType.FILM),
48+
extraInfo = IconAndTextInfo(
49+
R.drawable.ic_top_10,
50+
R.string.list_highlight_banner_stream_ranking
51+
),
52+
leftButton = IconAndTextInfo(drawable.ic_add, R.string.list_highlight_banner_add),
53+
centralButton = IconAndTextInfo(drawable.ic_play, R.string.list_highlight_banner_watch),
54+
rightButton = IconAndTextInfo(drawable.ic_info, R.string.list_highlight_banner_info),
55+
)
2956
}
3057
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsScreen.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.navigation.compose.rememberNavController
2323
import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation
2424
import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
2525
import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamPlayerTopBar
26+
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets.HighlightBanner
2627
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets.StreamsCarousel
2728
import org.koin.androidx.compose.koinViewModel
2829

@@ -78,6 +79,7 @@ fun ListStreamsScreen(
7879
.align(Alignment.TopCenter)
7980
.verticalScroll(rememberScrollState())
8081
) {
82+
HighlightBanner(data = uiState.highlightBanner)
8183
uiState.carousels.forEach {
8284
StreamsCarousel(
8385
title = it.categoryName,

0 commit comments

Comments
 (0)