@@ -25,6 +25,7 @@ import androidx.compose.runtime.mutableStateOf
2525import androidx.compose.runtime.remember
2626import androidx.compose.runtime.setValue
2727import androidx.compose.ui.Modifier
28+ import androidx.compose.ui.res.stringResource
2829import androidx.compose.ui.tooling.preview.Preview
2930import androidx.hilt.navigation.compose.hiltViewModel
3031import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -47,6 +48,8 @@ import com.pira.gnetp.ui.theme.ThemeManager
4748import com.pira.gnetp.ui.theme.ThemeSettings
4849import dagger.hilt.android.AndroidEntryPoint
4950import javax.inject.Inject
51+ import com.pira.gnetp.R
52+ import com.pira.gnetp.ui.about.AboutScreen
5053
5154@AndroidEntryPoint
5255class MainActivity : ComponentActivity () {
@@ -81,18 +84,11 @@ fun MainApp(logRepository: LogRepository) {
8184 modifier = Modifier .fillMaxSize(),
8285 color = MaterialTheme .colorScheme.background
8386 ) {
84- Scaffold (
85- bottomBar = {
86- BottomNavigationBar (navController)
87- }
88- ) { innerPadding ->
89- MainNavHost (
90- navController = navController,
91- logRepository = logRepository,
92- modifier = Modifier .padding(innerPadding),
93- onThemeSettingsChanged = ::updateThemeSettings
94- )
95- }
87+ MainNavHost (
88+ navController = navController,
89+ logRepository = logRepository,
90+ onThemeSettingsChanged = ::updateThemeSettings
91+ )
9692 }
9793 }
9894}
@@ -101,50 +97,67 @@ fun MainApp(logRepository: LogRepository) {
10197fun MainNavHost (
10298 navController : NavHostController ,
10399 logRepository : LogRepository ,
104- modifier : Modifier = Modifier ,
105100 onThemeSettingsChanged : (ThemeSettings ) -> Unit = {}
106101) {
107- // Create a single instance of the HomeViewModel to be shared between HomeScreen and HotspotScreen
108102 val homeViewModel = hiltViewModel<HomeViewModel >()
109103 val homeUiState by homeViewModel.uiState.collectAsStateWithLifecycle()
104+ val navBackStackEntry by navController.currentBackStackEntryAsState()
105+ val currentDestination = navBackStackEntry?.destination
106+ val isAboutScreen = currentDestination?.route == Screen .About .route
110107
111- NavHost (
112- navController = navController,
113- startDestination = Screen .Home .route,
114- modifier = modifier
115- ) {
116- composable(Screen .Home .route) {
117- HomeScreen (
118- uiState = homeUiState,
119- onStartProxy = { homeViewModel.startProxy() },
120- onStopProxy = { homeViewModel.stopProxy() },
121- onNavigateToSettings = { navController.navigate(Screen .Settings .route) },
122- onNavigateToHotspot = { navController.navigate(Screen .Hotspot .route) },
123- onNavigateToLogs = { navController.navigate(Screen .Logs .route) },
124- onVpnPermissionRequest = { },
125- onSelectIpAddress = { ip -> homeViewModel.selectIpAddress(ip) }
126- )
127- }
128-
129- composable(Screen .Settings .route) {
130- SettingsScreen (
131- onNavigateBack = { navController.popBackStack() },
132- onThemeSettingsChanged = onThemeSettingsChanged
133- )
134- }
135-
136- composable(Screen .Hotspot .route) {
137- HotspotScreen (
138- uiState = homeUiState,
139- onNavigateBack = { navController.popBackStack() }
140- )
108+ Scaffold (
109+ topBar = {},
110+ bottomBar = {
111+ if (! isAboutScreen) {
112+ BottomNavigationBar (navController)
113+ }
141114 }
142-
143- composable(Screen .Logs .route) {
144- LogsScreen (
145- onNavigateBack = { navController.popBackStack() },
146- logRepository = logRepository
147- )
115+ ) { innerPadding ->
116+ NavHost (
117+ navController = navController,
118+ startDestination = Screen .Home .route,
119+ modifier = Modifier .padding(innerPadding)
120+ ) {
121+ composable(Screen .Home .route) {
122+ HomeScreen (
123+ uiState = homeUiState,
124+ onStartProxy = { homeViewModel.startProxy() },
125+ onStopProxy = { homeViewModel.stopProxy() },
126+ onNavigateToSettings = { navController.navigate(Screen .Settings .route) },
127+ onNavigateToHotspot = { navController.navigate(Screen .Hotspot .route) },
128+ onNavigateToLogs = { navController.navigate(Screen .Logs .route) },
129+ onVpnPermissionRequest = { },
130+ onSelectIpAddress = { ip -> homeViewModel.selectIpAddress(ip) }
131+ )
132+ }
133+
134+ composable(Screen .Settings .route) {
135+ SettingsScreen (
136+ onNavigateBack = { navController.popBackStack() },
137+ onNavigateToAbout = { navController.navigate(Screen .About .route) },
138+ onThemeSettingsChanged = onThemeSettingsChanged
139+ )
140+ }
141+
142+ composable(Screen .Hotspot .route) {
143+ HotspotScreen (
144+ uiState = homeUiState,
145+ onNavigateBack = { navController.popBackStack() }
146+ )
147+ }
148+
149+ composable(Screen .Logs .route) {
150+ LogsScreen (
151+ onNavigateBack = { navController.popBackStack() },
152+ logRepository = logRepository
153+ )
154+ }
155+
156+ composable(Screen .About .route) {
157+ AboutScreen (
158+ onNavigateBack = { navController.popBackStack() }
159+ )
160+ }
148161 }
149162 }
150163}
@@ -171,14 +184,14 @@ fun BottomNavigationBar(navController: NavHostController) {
171184 Screen .Settings -> Icons .Default .Settings
172185 Screen .Hotspot -> Icons .Default .Info
173186 Screen .Logs -> Icons .AutoMirrored .Filled .List
187+ Screen .About -> Icons .Default .Info
174188 },
175189 contentDescription = null
176190 )
177191 },
178192 label = { Text (getScreenTitle(screen)) },
179193 selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true ,
180194 onClick = {
181- // Special handling for Home screen to ensure proper navigation
182195 if (screen == Screen .Home ) {
183196 navController.navigate(screen.route) {
184197 popUpTo(navController.graph.findStartDestination().id) {
@@ -201,12 +214,15 @@ fun BottomNavigationBar(navController: NavHostController) {
201214 }
202215}
203216
217+ @Composable
204218fun getScreenTitle (screen : Screen ): String {
205219 return when (screen) {
206- Screen .Home -> " Home"
207- Screen .Settings -> " Settings"
208- Screen .Hotspot -> " Hotspot"
209- Screen .Logs -> " Logs"
220+ Screen .Home -> stringResource(R .string.home)
221+ Screen .Settings -> stringResource(R .string.settings)
222+ Screen .Hotspot -> stringResource(R .string.hotspot)
223+ Screen .Logs -> stringResource(R .string.logs)
224+ Screen .About -> stringResource(R .string.about)
225+ else -> " "
210226 }
211227}
212228
0 commit comments