Initial import
This commit is contained in:
139
app/src/main/java/com/iiyh/emoneyinfo/ui/EmoneyInfoApp.kt
Normal file
139
app/src/main/java/com/iiyh/emoneyinfo/ui/EmoneyInfoApp.kt
Normal file
@ -0,0 +1,139 @@
|
||||
package com.iiyh.emoneyinfo.ui
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.CreditCard
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.NavigationBar
|
||||
import androidx.compose.material3.NavigationBarItem
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.iiyh.emoneyinfo.R
|
||||
import androidx.navigation.NavDestination.Companion.hierarchy
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.iiyh.emoneyinfo.nfc.UnifiedNfcReader
|
||||
import com.iiyh.emoneyinfo.ui.screens.AboutScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.FaqScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.HomeScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.HistoryScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.PrivacyPolicyScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.SettingsScreen
|
||||
import com.iiyh.emoneyinfo.ui.screens.TermsScreen
|
||||
|
||||
private data class BottomDestination(val route: String, val label: String)
|
||||
|
||||
@Composable
|
||||
fun EmoneyInfoApp(
|
||||
nfcReader: UnifiedNfcReader,
|
||||
adsEnabled: Boolean
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val navController = rememberNavController()
|
||||
val uiState by nfcReader.uiState.collectAsState()
|
||||
val preferences = remember(context) {
|
||||
context.getSharedPreferences("emoney_info_prefs", Context.MODE_PRIVATE)
|
||||
}
|
||||
var showCardNumber by remember(preferences) {
|
||||
mutableStateOf(preferences.getBoolean("masked", true))
|
||||
}
|
||||
|
||||
val bottomDestinations = listOf(
|
||||
BottomDestination("home", stringResource(R.string.tab_home)),
|
||||
BottomDestination("settings", stringResource(R.string.tab_settings))
|
||||
)
|
||||
|
||||
Scaffold(
|
||||
bottomBar = {
|
||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||
val currentDestination = navBackStackEntry?.destination
|
||||
val visible = currentDestination?.route in setOf("home", "settings")
|
||||
if (visible) {
|
||||
NavigationBar {
|
||||
bottomDestinations.forEach { destination ->
|
||||
NavigationBarItem(
|
||||
selected = currentDestination?.hierarchy?.any { it.route == destination.route } == true,
|
||||
onClick = {
|
||||
if (destination.route == "home") {
|
||||
navController.popBackStack("home", false)
|
||||
} else {
|
||||
navController.navigate(destination.route) {
|
||||
launchSingleTop = true
|
||||
}
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
Icon(
|
||||
imageVector = if (destination.route == "home") Icons.Default.CreditCard else Icons.Default.Settings,
|
||||
contentDescription = destination.label
|
||||
)
|
||||
},
|
||||
label = { Text(destination.label) }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
) { innerPadding ->
|
||||
NavHost(navController = navController, startDestination = "home", modifier = Modifier.padding(innerPadding)) {
|
||||
composable("home") {
|
||||
HomeScreen(
|
||||
state = uiState,
|
||||
adsEnabled = adsEnabled,
|
||||
showCardNumber = showCardNumber,
|
||||
onScanTapped = { nfcReader.startScan() },
|
||||
onViewHistoryTapped = { navController.navigate("history") },
|
||||
onSettingsTapped = { navController.navigate("settings") }
|
||||
)
|
||||
}
|
||||
composable("settings") {
|
||||
SettingsScreen(
|
||||
adsEnabled = adsEnabled,
|
||||
showCardNumber = showCardNumber,
|
||||
onShowCardNumberChanged = {
|
||||
showCardNumber = it
|
||||
preferences.edit().putBoolean("masked", it).apply()
|
||||
},
|
||||
onHelpCenterTapped = { navController.navigate("faq") },
|
||||
onAboutTapped = { navController.navigate("about") }
|
||||
)
|
||||
}
|
||||
composable("history") {
|
||||
HistoryScreen(
|
||||
state = uiState,
|
||||
adsEnabled = adsEnabled,
|
||||
onBack = { navController.popBackStack() }
|
||||
)
|
||||
}
|
||||
composable("faq") {
|
||||
FaqScreen(onBack = { navController.popBackStack() })
|
||||
}
|
||||
composable("about") {
|
||||
AboutScreen(
|
||||
onBack = { navController.popBackStack() },
|
||||
onTermsTapped = { navController.navigate("terms") },
|
||||
onPrivacyTapped = { navController.navigate("privacy") }
|
||||
)
|
||||
}
|
||||
composable("terms") {
|
||||
TermsScreen(onBack = { navController.popBackStack() })
|
||||
}
|
||||
composable("privacy") {
|
||||
PrivacyPolicyScreen(onBack = { navController.popBackStack() })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user