Skip to content

Commit 0d38ad1

Browse files
committed
[ISSUE-35] - Adicionando topbar no projeto
1 parent 409a7cb commit 0d38ad1

File tree

9 files changed

+161
-1
lines changed

9 files changed

+161
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.ui.graphics.Color
66

77
object Colors {
88
val DarkDeepGray = Color(0xFF262626)
9+
val Dark80 = Color(0xCC000000)
910

1011
val LightColors = lightColorScheme(
1112
primary = Color(0xFFE50914),
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package com.codandotv.streamplayerapp.core_shared_ui.widget
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.Spacer
8+
import androidx.compose.foundation.layout.WindowInsets
9+
import androidx.compose.foundation.layout.fillMaxHeight
10+
import androidx.compose.foundation.layout.height
11+
import androidx.compose.foundation.layout.padding
12+
import androidx.compose.foundation.shape.RoundedCornerShape
13+
import androidx.compose.material.icons.Icons
14+
import androidx.compose.material.icons.filled.Search
15+
import androidx.compose.material3.ExperimentalMaterial3Api
16+
import androidx.compose.material3.Icon
17+
import androidx.compose.material3.IconButton
18+
import androidx.compose.material3.Text
19+
import androidx.compose.material3.TopAppBar
20+
import androidx.compose.material3.TopAppBarDefaults
21+
import androidx.compose.material3.TopAppBarScrollBehavior
22+
import androidx.compose.material3.rememberTopAppBarState
23+
import androidx.compose.runtime.Composable
24+
import androidx.compose.ui.Modifier
25+
import androidx.compose.ui.draw.clip
26+
import androidx.compose.ui.graphics.Color
27+
import androidx.compose.ui.res.painterResource
28+
import androidx.compose.ui.res.stringResource
29+
import androidx.compose.ui.unit.dp
30+
import com.codandotv.streamplayerapp.core_shared_ui.R
31+
import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors
32+
import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview
33+
import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
34+
35+
@OptIn(ExperimentalMaterial3Api::class)
36+
@Composable
37+
fun StreamPlayerTopBar(scrollBehavior: TopAppBarScrollBehavior) {
38+
Box(modifier = Modifier.background(color = Colors.Dark80)) {
39+
StreamPlayerTopBar()
40+
StreamPlayerOptionsTopBar(modifier = Modifier.padding(top = 50.dp), scrollBehavior)
41+
}
42+
}
43+
44+
@Composable
45+
private fun StreamPlayerTopBar() {
46+
Row(
47+
modifier = Modifier
48+
.height(50.dp)
49+
) {
50+
IconButton(
51+
modifier = Modifier
52+
.fillMaxHeight()
53+
.padding(vertical = 4.dp),
54+
onClick = { /* todo */ }
55+
) {
56+
Icon(
57+
painter = painterResource(R.drawable.ic_netflix),
58+
contentDescription = stringResource(id = R.string.icon_netflix),
59+
tint = Color.Unspecified,
60+
)
61+
}
62+
Spacer(modifier = Modifier.weight(1f))
63+
64+
IconButton(
65+
modifier = Modifier.fillMaxHeight(),
66+
onClick = { /* todo */ }
67+
) {
68+
Icon(
69+
imageVector = Icons.Default.Search,
70+
contentDescription = stringResource(id = R.string.icon_search),
71+
tint = Color.White,
72+
)
73+
}
74+
75+
76+
IconButton(
77+
modifier = Modifier.fillMaxHeight(),
78+
onClick = { /* todo */ }
79+
) {
80+
Icon(
81+
modifier = Modifier
82+
.height(24.dp)
83+
.clip(RoundedCornerShape(4.dp)),
84+
painter = painterResource(R.drawable.perfil_fake),
85+
contentDescription = stringResource(id = R.string.icon_profile),
86+
tint = Color.Unspecified,
87+
)
88+
}
89+
}
90+
}
91+
92+
@OptIn(ExperimentalMaterial3Api::class)
93+
@Composable
94+
private fun StreamPlayerOptionsTopBar(modifier: Modifier, scrollBehavior: TopAppBarScrollBehavior) {
95+
TopAppBar(
96+
modifier = modifier,
97+
windowInsets = WindowInsets(top = 0.dp),
98+
title = {},
99+
scrollBehavior = scrollBehavior,
100+
actions = {
101+
Row(
102+
horizontalArrangement = Arrangement.SpaceEvenly,
103+
modifier = Modifier.padding(horizontal = 40.dp)
104+
) {
105+
Text(
106+
text = stringResource(id = R.string.topbar_shows),
107+
modifier = Modifier.weight(1f),
108+
color = Color.White
109+
)
110+
Text(
111+
text = stringResource(id = R.string.topbar_movies),
112+
modifier = Modifier.weight(1f),
113+
color = Color.White
114+
)
115+
Text(
116+
text = stringResource(id = R.string.topbar_categories),
117+
modifier = Modifier.weight(1f),
118+
color = Color.White
119+
)
120+
}
121+
}, colors = TopAppBarDefaults.smallTopAppBarColors(containerColor = Color.Transparent)
122+
)
123+
}
124+
125+
@OptIn(ExperimentalMaterial3Api::class)
126+
@ThemePreviews
127+
@Composable
128+
fun StreamPlayerTopBarPreview() {
129+
ThemePreview {
130+
StreamPlayerTopBar(
131+
scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
132+
rememberTopAppBarState()
133+
)
134+
)
135+
}
136+
}
30.8 KB
Loading
2.9 KB
Loading
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string name="icon_netflix">Ícone Netflix</string>
4+
<string name="icon_profile">Ícone Perfil</string>
5+
<string name="icon_search">Ícone Buscar</string>
6+
</resources>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
<resources>
22
<string name="app_name">StreamPlayerApp</string>
3+
4+
<!-- region Topbar -->
5+
<string name="topbar_shows">Séries</string>
6+
<string name="topbar_movies">Filmes</string>
7+
<string name="topbar_categories">Categorias</string>
8+
<!-- endregion Topbar -->
9+
310
</resources>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fun DetailStreamToolbar(navController : NavController) {
3939
}
4040
IconButton(onClick = { }) {
4141
Image(
42-
painter = painterResource(id = R.drawable.perfil_fake),
42+
painter = painterResource(id = com.codandotv.streamplayerapp.core_shared_ui.R.drawable.perfil_fake),
4343
contentDescription = null
4444
)
4545
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,20 @@ import androidx.compose.material3.CircularProgressIndicator
99
import androidx.compose.material3.ExperimentalMaterial3Api
1010
import androidx.compose.material3.MaterialTheme
1111
import androidx.compose.material3.Scaffold
12+
import androidx.compose.material3.TopAppBarDefaults
13+
import androidx.compose.material3.rememberTopAppBarState
1214
import androidx.compose.runtime.*
1315
import androidx.compose.ui.Alignment
1416
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.input.nestedscroll.nestedScroll
1518
import androidx.compose.ui.platform.LocalLifecycleOwner
1619
import androidx.compose.ui.unit.dp
1720
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1821
import androidx.navigation.NavController
1922
import androidx.navigation.compose.rememberNavController
2023
import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation
2124
import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
25+
import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamPlayerTopBar
2226
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets.StreamsCarousel
2327
import org.koin.androidx.compose.koinViewModel
2428

@@ -33,6 +37,8 @@ fun ListStreamsScreen(
3337
) {
3438
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
3539
val lifecycleOwner = LocalLifecycleOwner.current
40+
val scrollBehavior =
41+
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
3642

3743
DisposableEffect(lifecycleOwner) {
3844
val lifecycle = lifecycleOwner.lifecycle
@@ -46,6 +52,10 @@ fun ListStreamsScreen(
4652
}
4753

4854
Scaffold(
55+
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
56+
topBar = {
57+
StreamPlayerTopBar(scrollBehavior)
58+
},
4959
bottomBar = {
5060
StreamPlayerBottomNavigation(navController = navController)
5161
}

0 commit comments

Comments
 (0)