Skip to content

Commit 5583007

Browse files
committed
Add new features
- Bottom app bar - Init Titles screen
1 parent 08ff46d commit 5583007

File tree

11 files changed

+115
-33
lines changed

11 files changed

+115
-33
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package st.slex.csplashscreen.data.titles
2+
3+
class TitlesPagingSource
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package st.slex.csplashscreen.data.titles
2+
3+
interface TitlesRepository
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package st.slex.csplashscreen.data.titles
2+
3+
interface TitlesService

app/src/main/java/st/slex/csplashscreen/ui/MainActivity.kt

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,26 @@ package st.slex.csplashscreen.ui
33
import android.os.Bundle
44
import androidx.activity.ComponentActivity
55
import androidx.activity.compose.setContent
6-
import androidx.compose.material.ExperimentalMaterialApi
7-
import androidx.compose.material.Scaffold
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.material.*
8+
import androidx.compose.material.icons.Icons
9+
import androidx.compose.material.icons.filled.Home
10+
import androidx.compose.material.icons.filled.Search
11+
import androidx.compose.material.icons.filled.Star
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.runtime.mutableStateOf
14+
import androidx.compose.runtime.remember
15+
import androidx.compose.ui.Modifier
816
import androidx.lifecycle.ViewModelProvider
17+
import androidx.navigation.NavController
18+
import androidx.navigation.compose.rememberNavController
919
import coil.annotation.ExperimentalCoilApi
1020
import com.google.accompanist.insets.ProvideWindowInsets
1121
import com.google.accompanist.pager.ExperimentalPagerApi
1222
import dagger.Lazy
1323
import kotlinx.coroutines.ExperimentalCoroutinesApi
1424
import st.slex.csplashscreen.appComponent
25+
import st.slex.csplashscreen.ui.navigation.NavDest
1526
import st.slex.csplashscreen.ui.navigation.NavHost
1627
import st.slex.csplashscreen.ui.theme.CSplashScreenTheme
1728
import javax.inject.Inject
@@ -28,13 +39,64 @@ class MainActivity : ComponentActivity() {
2839
override fun onCreate(savedInstanceState: Bundle?) {
2940
appComponent.inject(this)
3041
super.onCreate(savedInstanceState)
42+
3143
setContent {
3244
CSplashScreenTheme {
45+
val navController = rememberNavController()
3346
ProvideWindowInsets {
34-
Scaffold { NavHost() }
47+
Scaffold(
48+
bottomBar = { MainBottomAppBar(navController = navController) }
49+
) { NavHost(navController = navController) }
3550
}
3651
}
52+
}
53+
}
54+
}
55+
56+
@ExperimentalCoilApi
57+
@Composable
58+
private fun MainBottomAppBar(navController: NavController) {
59+
BottomAppBar(modifier = Modifier.fillMaxWidth()) {
60+
61+
val selectedItem = remember { mutableStateOf("home") }
3762

63+
BottomNavigation {
64+
BottomNavigationItem(
65+
icon = {
66+
Icon(Icons.Filled.Star, "Titles")
67+
},
68+
label = { Text(text = "titles") },
69+
selected = selectedItem.value == "titles",
70+
onClick = {
71+
selectedItem.value = "titles"
72+
navController.navigate(NavDest.TitlesScreen.destination)
73+
},
74+
alwaysShowLabel = false
75+
)
76+
BottomNavigationItem(
77+
icon = {
78+
Icon(Icons.Filled.Home, "Home")
79+
},
80+
label = { Text(text = "home") },
81+
selected = selectedItem.value == "home",
82+
onClick = {
83+
selectedItem.value = "home"
84+
navController.navigate(NavDest.MainScreen.destination)
85+
},
86+
alwaysShowLabel = false
87+
)
88+
BottomNavigationItem(
89+
icon = {
90+
Icon(Icons.Filled.Search, "")
91+
},
92+
label = { Text(text = "search") },
93+
selected = selectedItem.value == "search",
94+
onClick = {
95+
selectedItem.value = "search"
96+
navController.navigate("${NavDest.SearchPhotosScreen.destination}/ ")
97+
},
98+
alwaysShowLabel = false
99+
)
38100
}
39101
}
40102
}

app/src/main/java/st/slex/csplashscreen/ui/navigation/NavDest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,8 @@ sealed interface NavDest {
5252
override val args: List<NamedNavArgument> =
5353
listOf(navArgument(arguments[0]) { type = NavType.StringType })
5454
}
55+
56+
object TitlesScreen : NavDest {
57+
override val destination: String = "titles"
58+
}
5559
}

app/src/main/java/st/slex/csplashscreen/ui/navigation/NavHost.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.navigation.NavGraphBuilder
66
import androidx.navigation.NavHostController
77
import androidx.navigation.compose.NavHost
88
import androidx.navigation.compose.composable
9-
import androidx.navigation.compose.rememberNavController
109
import coil.annotation.ExperimentalCoilApi
1110
import com.google.accompanist.pager.ExperimentalPagerApi
1211
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -15,16 +14,15 @@ import st.slex.csplashscreen.ui.screens.detail.ImageDetailScreen
1514
import st.slex.csplashscreen.ui.screens.main.MainScreen
1615
import st.slex.csplashscreen.ui.screens.raw_image.RawImageScreen
1716
import st.slex.csplashscreen.ui.screens.search_photos.SearchPhotosScreen
17+
import st.slex.csplashscreen.ui.screens.titles.TitleScreen
1818
import st.slex.csplashscreen.ui.screens.user.UserScreen
1919

2020
@ExperimentalCoilApi
2121
@ExperimentalMaterialApi
2222
@ExperimentalPagerApi
2323
@ExperimentalCoroutinesApi
2424
@Composable
25-
fun NavHost(
26-
navController: NavHostController = rememberNavController()
27-
) {
25+
fun NavHost(navController: NavHostController) {
2826
NavHost(
2927
navController = navController,
3028
startDestination = NavDest.MainScreen.destination
@@ -47,6 +45,9 @@ fun NavHost(
4745
create(NavDest.UserScreen) {
4846
UserScreen(navController = navController, username = it[0])
4947
}
48+
create(NavDest.TitlesScreen) {
49+
TitleScreen(navController = navController)
50+
}
5051
}
5152
}
5253

app/src/main/java/st/slex/csplashscreen/ui/screens/main/MainScreen.kt

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import st.slex.csplashscreen.ui.MainActivity
3030
import st.slex.csplashscreen.ui.components.CollectionItem
3131
import st.slex.csplashscreen.ui.components.ImageItem
3232
import st.slex.csplashscreen.ui.components.checkState
33-
import st.slex.csplashscreen.ui.navigation.NavDest
3433
import st.slex.csplashscreen.ui.theme.Typography
3534
import st.slex.csplashscreen.utiles.GET_COLLECTIONS
3635

@@ -67,25 +66,16 @@ fun MainScreen(
6766

6867
val pages = listOf(PagerMainTab.Photos, PagerMainTab.Collections)
6968

70-
Scaffold(
71-
floatingActionButtonPosition = FabPosition.Center,
72-
floatingActionButton = {
73-
MainScreenFloatingActionButton {
74-
navController.navigate("${NavDest.SearchPhotosScreen.destination}/ ")
75-
}
76-
}
77-
) {
78-
Column {
79-
TabRow(pagerState = pagerState, pages = pages)
80-
Pager(
81-
lazyPagingPhotosItems = viewModel::photos.get().collectAsLazyPagingItems(),
82-
lazyPagingCollectionsItems = viewModel::collections.get()
83-
.collectAsLazyPagingItems(),
84-
navController = navController,
85-
pagerState = pagerState,
86-
pages = pages
87-
)
88-
}
69+
Column {
70+
TabRow(pagerState = pagerState, pages = pages)
71+
Pager(
72+
lazyPagingPhotosItems = viewModel::photos.get().collectAsLazyPagingItems(),
73+
lazyPagingCollectionsItems = viewModel::collections.get()
74+
.collectAsLazyPagingItems(),
75+
navController = navController,
76+
pagerState = pagerState,
77+
pages = pages
78+
)
8979
}
9080
}
9181

app/src/main/java/st/slex/csplashscreen/ui/screens/search_photos/SearchPhotosScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ private fun TopAppBarSearch(querySearch: String, search: (QuerySearch) -> Unit)
6666
label = { Text(text = "Input Search") },
6767
textStyle = Typography.body2
6868
)
69-
DisposableEffect(Unit) {
69+
/*DisposableEffect(Unit) {
7070
focusRequester.requestFocus()
7171
onDispose { }
72-
}
72+
}*/
7373
}
7474
}
7575

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package st.slex.csplashscreen.ui.screens.titles
2+
3+
import androidx.compose.material.Text
4+
import androidx.compose.runtime.Composable
5+
import androidx.navigation.NavController
6+
7+
8+
@Composable
9+
fun TitleScreen(navController: NavController) {
10+
Text(text = "Title")
11+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package st.slex.csplashscreen.ui.screens.titles
2+
3+
import androidx.lifecycle.ViewModel
4+
5+
class TitlesViewModel : ViewModel()

0 commit comments

Comments
 (0)