Files
ISODroid/app/src/main/java/sh/sar/isodroid/MainActivity.kt

120 lines
3.7 KiB
Kotlin

/*
* SPDX-FileCopyrightText: 2026 Shiham Abdul Rahman <shihaam@shihaam.dev>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package sh.sar.isodroid
import android.content.Context
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import sh.sar.isodroid.ui.screens.DownloadsScreen
import sh.sar.isodroid.ui.screens.MainScreen
import sh.sar.isodroid.ui.screens.SettingsScreen
import sh.sar.isodroid.ui.screens.SetupWizardScreen
import sh.sar.isodroid.ui.theme.ISODroidTheme
import sh.sar.isodroid.viewmodel.MainViewModel
class MainActivity : ComponentActivity() {
private lateinit var viewModel: MainViewModel
private var setupComplete by mutableStateOf(false)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
viewModel = ViewModelProvider(this)[MainViewModel::class.java]
// Check if setup was completed previously
setupComplete = isSetupComplete()
// Initialize ViewModel if setup is already complete
if (setupComplete) {
viewModel.initialize()
}
setContent {
ISODroidTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
if (setupComplete) {
ISODroidNavHost(viewModel = viewModel)
} else {
SetupWizardScreen(
onSetupComplete = {
markSetupComplete()
setupComplete = true
viewModel.initialize()
}
)
}
}
}
}
}
private fun isSetupComplete(): Boolean {
val prefs = getSharedPreferences("iso_drive_prefs", Context.MODE_PRIVATE)
return prefs.getBoolean("setup_complete", false)
}
private fun markSetupComplete() {
val prefs = getSharedPreferences("iso_drive_prefs", Context.MODE_PRIVATE)
prefs.edit().putBoolean("setup_complete", true).apply()
}
}
@Composable
fun ISODroidNavHost(viewModel: MainViewModel) {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "main"
) {
composable("main") {
MainScreen(
viewModel = viewModel,
onNavigateToDownloads = {
navController.navigate("downloads")
},
onNavigateToSettings = {
navController.navigate("settings")
}
)
}
composable("downloads") {
DownloadsScreen(
onNavigateBack = {
navController.popBackStack()
}
)
}
composable("settings") {
SettingsScreen(
viewModel = viewModel,
onNavigateBack = {
navController.popBackStack()
}
)
}
}
}