add setup wizard, remove stoage api permission since root is used for that
This commit is contained in:
@@ -1,17 +1,10 @@
|
||||
package sh.sar.isodroid
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
@@ -20,7 +13,6 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
@@ -28,39 +20,14 @@ 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 hasStoragePermission by mutableStateOf(false)
|
||||
|
||||
private val requestPermissionLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.RequestMultiplePermissions()
|
||||
) { permissions ->
|
||||
hasStoragePermission = permissions.values.all { it }
|
||||
if (hasStoragePermission) {
|
||||
viewModel.refresh()
|
||||
}
|
||||
}
|
||||
|
||||
private val notificationPermissionLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.RequestPermission()
|
||||
) { /* Notification permission result - we continue regardless */ }
|
||||
|
||||
private val manageStorageLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) {
|
||||
hasStoragePermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
Environment.isExternalStorageManager()
|
||||
} else {
|
||||
true
|
||||
}
|
||||
if (hasStoragePermission) {
|
||||
viewModel.refresh()
|
||||
}
|
||||
}
|
||||
private var setupComplete by mutableStateOf(false)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -68,7 +35,13 @@ class MainActivity : ComponentActivity() {
|
||||
|
||||
viewModel = ViewModelProvider(this)[MainViewModel::class.java]
|
||||
|
||||
checkAndRequestPermissions()
|
||||
// Check if setup was completed previously
|
||||
setupComplete = isSetupComplete()
|
||||
|
||||
// Initialize ViewModel if setup is already complete
|
||||
if (setupComplete) {
|
||||
viewModel.initialize()
|
||||
}
|
||||
|
||||
setContent {
|
||||
ISODroidTheme {
|
||||
@@ -76,50 +49,30 @@ class MainActivity : ComponentActivity() {
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
color = MaterialTheme.colorScheme.background
|
||||
) {
|
||||
ISODroidNavHost(viewModel = viewModel)
|
||||
if (setupComplete) {
|
||||
ISODroidNavHost(viewModel = viewModel)
|
||||
} else {
|
||||
SetupWizardScreen(
|
||||
onSetupComplete = {
|
||||
markSetupComplete()
|
||||
setupComplete = true
|
||||
viewModel.initialize()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkAndRequestPermissions() {
|
||||
// Request notification permission on Android 13+
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
if (ContextCompat.checkSelfPermission(
|
||||
this,
|
||||
Manifest.permission.POST_NOTIFICATIONS
|
||||
) != PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
|
||||
}
|
||||
}
|
||||
private fun isSetupComplete(): Boolean {
|
||||
val prefs = getSharedPreferences("iso_drive_prefs", Context.MODE_PRIVATE)
|
||||
return prefs.getBoolean("setup_complete", false)
|
||||
}
|
||||
|
||||
// Request storage permission
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if (!Environment.isExternalStorageManager()) {
|
||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).apply {
|
||||
data = Uri.parse("package:$packageName")
|
||||
}
|
||||
manageStorageLauncher.launch(intent)
|
||||
} else {
|
||||
hasStoragePermission = true
|
||||
}
|
||||
} else {
|
||||
val permissions = arrayOf(
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
)
|
||||
|
||||
val needsPermission = permissions.any {
|
||||
ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
|
||||
if (needsPermission) {
|
||||
requestPermissionLauncher.launch(permissions)
|
||||
} else {
|
||||
hasStoragePermission = true
|
||||
}
|
||||
}
|
||||
private fun markSetupComplete() {
|
||||
val prefs = getSharedPreferences("iso_drive_prefs", Context.MODE_PRIVATE)
|
||||
prefs.edit().putBoolean("setup_complete", true).apply()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user