MainActivity.kt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package org.mjdev.desktop.activity
  2. import android.graphics.Color
  3. import android.os.Bundle
  4. import android.view.WindowManager
  5. import androidx.activity.ComponentActivity
  6. import androidx.activity.SystemBarStyle
  7. import androidx.activity.compose.setContent
  8. import androidx.activity.enableEdgeToEdge
  9. import androidx.compose.foundation.layout.Box
  10. import androidx.compose.foundation.layout.WindowInsets
  11. import androidx.compose.foundation.layout.consumeWindowInsets
  12. import androidx.compose.foundation.layout.fillMaxSize
  13. import androidx.compose.foundation.layout.padding
  14. import androidx.compose.foundation.layout.safeDrawing
  15. import androidx.compose.foundation.layout.windowInsetsPadding
  16. import androidx.compose.material.Scaffold
  17. import androidx.compose.runtime.Composable
  18. import androidx.compose.runtime.CompositionLocalProvider
  19. import androidx.compose.ui.Modifier
  20. import androidx.compose.ui.tooling.preview.Preview
  21. import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
  22. import androidx.core.view.WindowCompat
  23. import androidx.core.view.WindowInsetsCompat
  24. import androidx.core.view.WindowInsetsControllerCompat
  25. import com.google.accompanist.permissions.ExperimentalPermissionsApi
  26. import org.mjdev.desktop.main.MainView
  27. import org.mjdev.desktop.context.DesktopContext.Companion.rememberDesktopContext
  28. import org.mjdev.desktop.context.LocalDesktopContext
  29. import org.mjdev.desktop.extensions.Compose.preview
  30. import org.mjdev.desktop.helpers.permission.rememberPermissionManager
  31. import org.mjdev.desktop.helpers.theme.DesktopTheme
  32. import org.mjdev.desktop.helpers.WakeLockHelper
  33. @OptIn(ExperimentalPermissionsApi::class)
  34. class MainActivity : ComponentActivity() {
  35. val wakeLockHelper by lazy { WakeLockHelper(this) }
  36. // @Suppress("OVERRIDE_DEPRECATION")
  37. // override fun onBackPressed() {
  38. // // Disable back button
  39. // }
  40. override fun onCreate(savedInstanceState: Bundle?) {
  41. wakeLockHelper.acquireWakeLock()
  42. installSplashScreen()
  43. setKeepScreenOn()
  44. super.onCreate(savedInstanceState)
  45. enableEdgeToEdge(
  46. statusBarStyle = SystemBarStyle.dark(Color.TRANSPARENT),
  47. navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT)
  48. )
  49. WindowCompat.getInsetsController(window, window.decorView).apply {
  50. hide(WindowInsetsCompat.Type.statusBars())
  51. hide(WindowInsetsCompat.Type.navigationBars())
  52. systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
  53. }
  54. setContent {
  55. rememberPermissionManager()
  56. CompositionLocalProvider(
  57. LocalDesktopContext provides rememberDesktopContext(baseContext)
  58. ) {
  59. ActivityMain()
  60. }
  61. }
  62. }
  63. override fun onDestroy() {
  64. super.onDestroy()
  65. resetKeepScreenOn()
  66. wakeLockHelper.releaseWakeLock()
  67. }
  68. private fun ComponentActivity.setKeepScreenOn() {
  69. window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  70. }
  71. private fun ComponentActivity.resetKeepScreenOn() {
  72. window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  73. }
  74. }
  75. @OptIn(ExperimentalPermissionsApi::class)
  76. @Composable
  77. private fun ActivityMain() {
  78. DesktopTheme {
  79. Scaffold(
  80. modifier = Modifier.fillMaxSize()
  81. ) { paddingValues ->
  82. Box(
  83. modifier = Modifier
  84. .fillMaxSize()
  85. .padding(paddingValues)
  86. .consumeWindowInsets(paddingValues)
  87. .windowInsetsPadding(
  88. WindowInsets.safeDrawing
  89. )
  90. ) {
  91. MainView()
  92. }
  93. }
  94. }
  95. }
  96. @Preview
  97. @Composable
  98. fun MainActivityPreview() = preview {
  99. ActivityMain()
  100. }