nova-shell-android/app/src/main/java/space/darkest/nova/android/MainActivity.kt

72 lines
2.5 KiB
Kotlin

package space.darkest.nova.android
import android.Manifest
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import space.darkest.nova.android.data.AgendaDay
import space.darkest.nova.android.data.CalendarRepository
import space.darkest.nova.android.ui.AgendaScreen
import space.darkest.nova.android.ui.SettingsScreen
import space.darkest.nova.android.ui.theme.NovaTheme
class MainActivity : ComponentActivity() {
private var agenda by mutableStateOf(emptyList<AgendaDay>())
private val calendarPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted ->
if (granted) refreshAgenda()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
calendarPermission.launch(Manifest.permission.READ_CALENDAR)
setContent {
NovaTheme {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "agenda",
enterTransition = { slideInHorizontally { it } },
exitTransition = { slideOutHorizontally { -it } },
popEnterTransition = { slideInHorizontally { -it } },
popExitTransition = { slideOutHorizontally { it } },
) {
composable("agenda") {
AgendaScreen(
agenda = agenda,
onSettingsClick = { navController.navigate("settings") },
)
}
composable("settings") {
SettingsScreen(onBack = { navController.popBackStack() })
}
}
}
}
}
override fun onResume() {
super.onResume()
refreshAgenda()
}
private fun refreshAgenda() {
agenda = CalendarRepository.getAgenda(this, 14)
}
}