package com.sample.content.kotlin import android.Manifest import android.content.pm.PackageManager 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.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.core.content.ContextCompat import com.sample.content.kotlin.ui.components.FullScreenWebView import com.sample.content.kotlin.ui.components.SplashScreen import com.sample.content.kotlin.ui.theme.ContentAppTheme import com.sample.content.kotlin.utils.NetworkMonitor class MainActivity : ComponentActivity() { private val permissionLauncher = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> // Permissions granted, WebView will handle them } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Enable edge-to-edge display enableEdgeToEdge() // Request permissions requestPermissions() setContent { ContentAppTheme { ContentApp() } } } private fun requestPermissions() { val permissions = mutableListOf() if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.CAMERA) } if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.ACCESS_FINE_LOCATION) } if (android.os.Build.VERSION.SDK_INT >= 33) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.READ_MEDIA_IMAGES) permissions.add(Manifest.permission.READ_MEDIA_VIDEO) } } else { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE) permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE) } } if (permissions.isNotEmpty()) { permissionLauncher.launch(permissions.toTypedArray()) } } } @Composable fun ContentApp() { val context = androidx.compose.ui.platform.LocalContext.current val networkMonitor = remember { NetworkMonitor(context) } val isConnected by networkMonitor.isConnected.collectAsState(initial = networkMonitor.checkCurrentConnectivity()) Box(modifier = Modifier.fillMaxSize().systemBarsPadding()) { if (isConnected) { FullScreenWebView( url = "https://example.com", isConnected = isConnected ) } else { SplashScreen( isConnected = isConnected, onRetry = { // Connectivity state will update automatically via NetworkMonitor } ) } } }