11package com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.screens
22
3- import androidx.compose.foundation.background
3+ import android.annotation.SuppressLint
4+ import androidx.compose.foundation.Image
45import androidx.compose.foundation.layout.*
5- import androidx.compose.foundation.shape.CircleShape
66import androidx.compose.material.icons.Icons
77import androidx.compose.material.icons.filled.*
88import androidx.compose.material3.*
@@ -12,8 +12,6 @@ import androidx.compose.runtime.remember
1212import androidx.compose.ui.Alignment
1313import androidx.compose.ui.Modifier
1414import androidx.compose.ui.graphics.Color
15- import androidx.compose.ui.graphics.vector.ImageVector
16- import androidx.compose.ui.layout.ContentScale
1715import androidx.compose.ui.platform.LocalLifecycleOwner
1816import androidx.compose.ui.res.painterResource
1917import androidx.compose.ui.res.stringResource
@@ -22,23 +20,18 @@ import androidx.compose.ui.unit.dp
2220import androidx.compose.ui.unit.em
2321import androidx.compose.ui.unit.sp
2422import androidx.lifecycle.LifecycleOwner
25- import coil.compose.AsyncImage
23+ import androidx.navigation.NavController
2624import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors.DarkDeepGray
27- import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview
28- import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
29- import com.codandotv.streamplayerapp.core_shared_ui.widget.IconWithText
3025import com.codandotv.streamplayerapp.feature_list_streams.R
3126import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState
32- import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget.DetailStreamActionOption
33- import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget.DetailStreamButtonAction
34- import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget.DetailStreamImagePreview
35- import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget.DetailStreamRowHeader
27+ import com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget.*
3628import org.koin.androidx.compose.koinViewModel
37- import kotlin.reflect.full.createType
3829
3930@Composable
4031fun DetailStreamScreen (
41- viewModel : DetailStreamViewModel = koinViewModel(), disposable : () -> Unit = {}
32+ viewModel : DetailStreamViewModel = koinViewModel(),
33+ navController : NavController ,
34+ disposable : () -> Unit = {}
4235) {
4336 val uiStateRemember = remember {
4437 viewModel.uiState
@@ -50,7 +43,7 @@ fun DetailStreamScreen(
5043 Box (modifier = Modifier .fillMaxSize()) {
5144 when (val uiState = uiStateRemember.value) {
5245 is DetailStreamsLoadedUIState -> {
53- SetupDetailScreen (uiState)
46+ SetupDetailScreen (uiState, navController )
5447 }
5548 else -> {
5649 CircularProgressIndicator (
@@ -63,62 +56,74 @@ fun DetailStreamScreen(
6356 }
6457}
6558
59+ @OptIn(ExperimentalMaterial3Api ::class )
60+ @SuppressLint(" UnusedMaterial3ScaffoldPaddingParameter" )
6661@Composable
67- private fun SetupDetailScreen (uiState : DetailStreamsLoadedUIState ) {
68- Column {
69- DetailStreamImagePreview (uiState)
62+ private fun SetupDetailScreen (
63+ uiState : DetailStreamsLoadedUIState , navController : NavController
64+ ) {
65+ Scaffold (topBar = {
66+ DetailStreamToolbar (navController = navController)
67+ }, content = { innerPadding ->
7068 Column (
71- modifier = Modifier
69+ Modifier
7270 .fillMaxSize()
73- .padding(start = 16 .dp, end = 16 .dp, top = 8 .dp )
71+ .padding(innerPadding )
7472 ) {
75- DetailStreamRowHeader ()
76- Text (
77- text = uiState.detailStream.title,
78- style = MaterialTheme .typography.headlineMedium.copy(
79- color = Color .White , fontWeight = FontWeight .Bold , fontSize = 28 .sp
73+ DetailStreamImagePreview (uiState)
74+ Column (
75+ modifier = Modifier
76+ .fillMaxSize()
77+ .padding(start = 16 .dp, end = 16 .dp, top = 8 .dp)
78+ ) {
79+ DetailStreamRowHeader ()
80+ Text (
81+ text = uiState.detailStream.title,
82+ style = MaterialTheme .typography.headlineMedium.copy(
83+ color = Color .White , fontWeight = FontWeight .Bold , fontSize = 28 .sp
84+ )
85+ )
86+ Spacer (modifier = Modifier .height(8 .dp))
87+ Text (
88+ text = uiState.detailStream.releaseYear,
89+ style = MaterialTheme .typography.headlineMedium.copy(
90+ color = Color .Gray , fontSize = 14 .sp, fontWeight = FontWeight .Bold
91+ )
92+ )
93+ Spacer (modifier = Modifier .height(8 .dp))
94+ DetailStreamButtonAction (
95+ buttonsColors = ButtonDefaults .buttonColors(
96+ containerColor = Color .White
97+ ),
98+ imageVector = Icons .Filled .PlayArrow ,
99+ imageVectorColor = Color .Black ,
100+ text = stringResource(R .string.detail_watch_primary_button),
101+ textColor = Color .Black ,
102+ onClick = {},
103+ )
104+ Spacer (modifier = Modifier .height(4 .dp))
105+ DetailStreamButtonAction (
106+ buttonsColors = ButtonDefaults .buttonColors(
107+ containerColor = DarkDeepGray
108+ ),
109+ imageVector = Icons .Filled .FileDownload ,
110+ imageVectorColor = Color .White ,
111+ text = stringResource(id = R .string.detail_default_text_secondary_button),
112+ textColor = Color .White ,
113+ onClick = {},
80114 )
81- )
82- Spacer (modifier = Modifier .height( 8 .dp))
83- Text (
84- text = uiState.detailStream.releaseYear,
85- style = MaterialTheme .typography.headlineMedium.copy(
86- color = Color . Gray , fontSize = 14 .sp, fontWeight = FontWeight . Bold
115+ Text (
116+ text = uiState.detailStream.overview,
117+ style = MaterialTheme .typography.headlineMedium.copy (
118+ color = Color . White , fontSize = 16 .sp, lineHeight = 1.25 .em
119+ ),
120+ modifier = Modifier .padding(top = 8 .dp, bottom = 16 .dp)
87121 )
88- )
89- Spacer (modifier = Modifier .height(8 .dp))
90- DetailStreamButtonAction (
91- buttonsColors = ButtonDefaults .buttonColors(
92- containerColor = Color .White
93- ),
94- imageVector = Icons .Filled .PlayArrow ,
95- imageVectorColor = Color .Black ,
96- text = stringResource(R .string.detail_watch_primary_button),
97- textColor = Color .Black ,
98- onClick = {},
99- )
100- Spacer (modifier = Modifier .height(4 .dp))
101- DetailStreamButtonAction (
102- buttonsColors = ButtonDefaults .buttonColors(
103- containerColor = DarkDeepGray
104- ),
105- imageVector = Icons .Filled .FileDownload ,
106- imageVectorColor = Color .White ,
107- text = stringResource(id = R .string.detail_default_text_secondary_button),
108- textColor = Color .White ,
109- onClick = {},
110- )
111- Text (
112- text = uiState.detailStream.overview,
113- style = MaterialTheme .typography.headlineMedium.copy(
114- color = Color .White , fontSize = 16 .sp, lineHeight = 1.25 .em
115- ),
116- modifier = Modifier .padding(top = 8 .dp, bottom = 16 .dp)
117- )
118- Spacer (modifier = Modifier .height(8 .dp))
119- DetailStreamActionOption ()
122+ Spacer (modifier = Modifier .height(8 .dp))
123+ DetailStreamActionOption ()
124+ }
120125 }
121- }
126+ })
122127}
123128
124129@Composable
@@ -135,12 +140,4 @@ private fun lifecycle(
135140 disposable.invoke()
136141 }
137142 }
138- }
139-
140- @Composable
141- @ThemePreviews
142- fun DetailStreamScreenPreview () {
143- ThemePreview {
144- DetailStreamScreen ()
145- }
146143}
0 commit comments