1 /*
<lambda>null2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.android.providers.media.tools.photopickerv2.navigation
17
18 import androidx.compose.foundation.layout.padding
19 import androidx.compose.runtime.Composable
20 import androidx.compose.ui.Modifier
21 import androidx.compose.ui.graphics.vector.ImageVector
22 import androidx.navigation.compose.NavHost
23 import androidx.navigation.compose.composable
24 import androidx.navigation.compose.rememberNavController
25 import com.android.providers.media.tools.photopickerv2.R
26 import com.android.providers.media.tools.photopickerv2.photopicker.PhotoPickerScreen
27 import com.android.providers.media.tools.photopickerv2.docsui.DocsUIScreen
28 import com.android.providers.media.tools.photopickerv2.pickerchoice.PickerChoiceScreen
29 import androidx.compose.material.icons.outlined.Folder
30 import androidx.compose.material.icons.outlined.PhoneAndroid
31 import androidx.compose.material.icons.outlined.PhotoLibrary
32 import androidx.annotation.StringRes
33 import androidx.compose.material.icons.Icons
34 import androidx.compose.material3.Scaffold
35 import androidx.compose.runtime.getValue
36 import androidx.navigation.NavHostController
37 import androidx.navigation.compose.currentBackStackEntryAsState
38 import com.android.providers.media.tools.photopickerv2.utils.NavigationComponent
39
40 /**
41 * MainScreen sets up the Scaffold with a bottom navigation bar
42 * and hosts the NavGraph for navigation between the tabs.
43 */
44 @Composable
45 fun MainScreen() {
46 val navController = rememberNavController()
47 val pickerRoutes = listOf(
48 NavigationItem.PhotoPicker,
49 NavigationItem.DocsUI,
50 NavigationItem.PickerChoice
51 )
52 val navBackStackEntry by navController.currentBackStackEntryAsState()
53 val currentRoute = navBackStackEntry?.destination?.route ?: NavigationItem.PhotoPicker.route
54
55 Scaffold(
56 /**
57 * This navigation bar is to navigate between the three tabs of the app :
58 * PhotoPicker
59 * DocsUI
60 * PickerChoice
61 **/
62 bottomBar = {
63 NavigationComponent(
64 navController = navController,
65 items = pickerRoutes,
66 currentRoute = currentRoute
67 )
68 }
69 ) { innerPadding ->
70 NavGraph(navController = navController, modifier = Modifier.padding(innerPadding))
71 }
72 }
73
74 /**
75 * NavGraph is the main navigation graph of the app.
76 * It contains the three tabs of the app :
77 * PhotoPicker
78 * DocsUI
79 * PickerChoice
80 */
81 @Composable
NavGraphnull82 fun NavGraph(navController: NavHostController, modifier: Modifier = Modifier) {
83 NavHost(
84 navController = navController,
85 startDestination = NavigationItem.PhotoPicker.route,
86 modifier = modifier
87 ) {
88 composable(NavigationItem.PhotoPicker.route) { PhotoPickerScreen() }
89 composable(NavigationItem.DocsUI.route) { DocsUIScreen() }
90 composable(NavigationItem.PickerChoice.route) { PickerChoiceScreen() }
91 }
92 }
93
94 enum class NavigationItem(val route: String, val icon: ImageVector, @StringRes val label: Int) {
95 PhotoPicker("photopicker", Icons.Outlined.PhotoLibrary, R.string.tab_photopicker),
96 DocsUI("docsui", Icons.Outlined.Folder, R.string.tab_docsui),
97 PickerChoice("pickerchoice", Icons.Outlined.PhoneAndroid, R.string.tab_pickerchoice)
98 }
99