diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/MainActivity.kt b/app/src/main/java/de/jeanlucmakiola/calendula/MainActivity.kt index 9787511..06a0fdd 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/MainActivity.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/MainActivity.kt @@ -4,19 +4,10 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview import dagger.hilt.android.AndroidEntryPoint +import de.jeanlucmakiola.calendula.ui.RootScreen import de.jeanlucmakiola.calendula.ui.theme.CalendulaTheme @AndroidEntryPoint @@ -26,34 +17,8 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { CalendulaTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - PlaceholderScreen(modifier = Modifier.padding(innerPadding)) - } + RootScreen(modifier = Modifier.fillMaxSize()) } } } } - -@Composable -private fun PlaceholderScreen(modifier: Modifier = Modifier) { - Column( - modifier = modifier.fillMaxSize(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Text( - text = stringResource(R.string.app_name), - style = MaterialTheme.typography.displayMedium, - ) - Text( - text = stringResource(R.string.app_tagline), - style = MaterialTheme.typography.bodyLarge, - ) - } -} - -@Preview(showBackground = true) -@Composable -private fun PlaceholderPreview() { - CalendulaTheme { PlaceholderScreen() } -} diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt new file mode 100644 index 0000000..2f171b5 --- /dev/null +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt @@ -0,0 +1,55 @@ +package de.jeanlucmakiola.calendula.ui + +import android.Manifest +import android.content.pm.PackageManager +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +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.lifecycle.compose.LocalLifecycleOwner +import androidx.core.content.ContextCompat +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import de.jeanlucmakiola.calendula.ui.debug.DebugScreen +import de.jeanlucmakiola.calendula.ui.permission.PermissionScreen + +@Composable +fun RootScreen(modifier: Modifier = Modifier) { + val context = LocalContext.current + var hasPermission by remember { + mutableStateOf( + ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR) + == PackageManager.PERMISSION_GRANTED + ) + } + + val lifecycle = LocalLifecycleOwner.current.lifecycle + DisposableEffect(lifecycle) { + val obs = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + hasPermission = ContextCompat.checkSelfPermission( + context, Manifest.permission.READ_CALENDAR + ) == PackageManager.PERMISSION_GRANTED + } + } + lifecycle.addObserver(obs) + onDispose { lifecycle.removeObserver(obs) } + } + + Scaffold(modifier = modifier) { innerPadding -> + if (hasPermission) { + DebugScreen(modifier = Modifier.padding(innerPadding)) + } else { + PermissionScreen( + onGranted = { hasPermission = true }, + modifier = Modifier.padding(innerPadding), + ) + } + } +}