Skip to content

Commit cde374c

Browse files
#31 - create call to create detail screen and some improvements
1 parent 65521a7 commit cde374c

File tree

7 files changed

+128
-78
lines changed

7 files changed

+128
-78
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.ui.Alignment
1111
import androidx.compose.ui.Modifier
1212
import androidx.compose.ui.graphics.Color
1313
import androidx.compose.ui.graphics.vector.ImageVector
14+
import androidx.compose.ui.text.font.FontWeight
1415
import androidx.compose.ui.unit.dp
1516
import androidx.compose.ui.unit.sp
1617

@@ -28,9 +29,12 @@ fun IconWithText(
2829
)
2930
Spacer(modifier = Modifier.height(4.dp))
3031
Text(
31-
text = text, style = MaterialTheme.typography.headlineMedium.copy(
32-
fontSize = 12.sp
33-
), color = textColor
32+
text = text,
33+
style = MaterialTheme.typography.headlineMedium.copy(
34+
fontSize = 12.sp,
35+
fontWeight = FontWeight.Bold,
36+
),
37+
color = textColor
3438
)
3539
}
3640
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/detail/presentation/navigation/DetailStreamNavigation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.navigation
22

3-
import androidx.activity.compose.BackHandler
43
import androidx.navigation.NavGraphBuilder
54
import androidx.navigation.NavHostController
65
import androidx.navigation.compose.composable
@@ -21,7 +20,8 @@ fun NavGraphBuilder.detailStreamNavGraph(navController: NavHostController) {
2120
DetailStreamScreen(
2221
koinViewModel {
2322
parametersOf(nav.arguments?.getString(ID) ?: DEFAULT_ID)
24-
}
23+
},
24+
navController
2525
) {
2626
unloadKoinModules(DetailStreamModule.module)
2727
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package 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
45
import androidx.compose.foundation.layout.*
5-
import androidx.compose.foundation.shape.CircleShape
66
import androidx.compose.material.icons.Icons
77
import androidx.compose.material.icons.filled.*
88
import androidx.compose.material3.*
@@ -12,8 +12,6 @@ import androidx.compose.runtime.remember
1212
import androidx.compose.ui.Alignment
1313
import androidx.compose.ui.Modifier
1414
import androidx.compose.ui.graphics.Color
15-
import androidx.compose.ui.graphics.vector.ImageVector
16-
import androidx.compose.ui.layout.ContentScale
1715
import androidx.compose.ui.platform.LocalLifecycleOwner
1816
import androidx.compose.ui.res.painterResource
1917
import androidx.compose.ui.res.stringResource
@@ -22,23 +20,18 @@ import androidx.compose.ui.unit.dp
2220
import androidx.compose.ui.unit.em
2321
import androidx.compose.ui.unit.sp
2422
import androidx.lifecycle.LifecycleOwner
25-
import coil.compose.AsyncImage
23+
import androidx.navigation.NavController
2624
import 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
3025
import com.codandotv.streamplayerapp.feature_list_streams.R
3126
import 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.*
3628
import org.koin.androidx.compose.koinViewModel
37-
import kotlin.reflect.full.createType
3829

3930
@Composable
4031
fun 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
}

feature-list-streams/src/main/java/com/codandotv/streamplayerapp/feature_list_streams/detail/presentation/widget/DetailStreamImagePreview.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ fun DetailStreamImagePreview(uiState: DetailStreamsLoadedUIState) {
3131
)
3232
Box(
3333
modifier = Modifier
34-
.background(Color.DarkGray.copy(alpha = 0.5f), CircleShape)
34+
.background(Color.Black.copy(alpha = 0.5f), CircleShape)
3535
.size(50.dp)
3636
.align(Alignment.Center),
3737
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.codandotv.streamplayerapp.feature_list_streams.detail.presentation.widget
2+
3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.layout.height
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.material.icons.Icons
7+
import androidx.compose.material.icons.filled.ArrowBack
8+
import androidx.compose.material.icons.filled.Search
9+
import androidx.compose.material3.*
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.graphics.Color
13+
import androidx.compose.ui.res.painterResource
14+
import androidx.compose.ui.res.stringResource
15+
import androidx.compose.ui.unit.dp
16+
import androidx.navigation.NavController
17+
import com.codandotv.streamplayerapp.feature_list_streams.R
18+
19+
@OptIn(ExperimentalMaterial3Api::class)
20+
@Composable
21+
fun DetailStreamToolbar(navController : NavController) {
22+
TopAppBar(
23+
title = { Text(text = "") },
24+
modifier = Modifier.height(56.dp),
25+
navigationIcon = {
26+
IconButton(onClick = { navController.navigateUp() }) {
27+
Icon(
28+
imageVector = Icons.Filled.ArrowBack,
29+
contentDescription = stringResource(id = R.string.detail_back)
30+
)
31+
}
32+
}, actions = {
33+
IconButton(onClick = { }) {
34+
Icon(
35+
imageVector = Icons.Default.Search,
36+
tint = Color.White,
37+
contentDescription = stringResource(id = R.string.detail_search)
38+
)
39+
}
40+
IconButton(onClick = { }) {
41+
Image(
42+
painter = painterResource(id = R.drawable.perfil_fake),
43+
contentDescription = null
44+
)
45+
}
46+
})
47+
}
40 KB
Loading

feature-list-streams/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@
77
<string name="detail_classification">Classificar</string>
88
<string name="detail_share">Compartilhar</string>
99
<string name="detail_download">Baixar completo</string>
10+
<string name="detail_search">Pesquisar</string>
11+
<string name="detail_back">Voltar</string>
1012
</resources>

0 commit comments

Comments
 (0)