ComponentActivity.kt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package org.mjdev.desktop.extensions
  2. import android.view.WindowManager
  3. import androidx.activity.compose.BackHandler
  4. import androidx.compose.runtime.Composable
  5. import androidx.compose.ui.graphics.Color
  6. import androidx.compose.ui.graphics.toArgb
  7. import androidx.core.app.ComponentActivity
  8. import androidx.core.graphics.drawable.toDrawable
  9. import androidx.core.view.WindowCompat
  10. import androidx.core.view.WindowInsetsCompat
  11. import androidx.core.view.WindowInsetsControllerCompat
  12. import org.mjdev.desktop.BuildConfig
  13. import org.mjdev.desktop.helpers.WakeLockHelper
  14. import org.mjdev.desktop.log.Log
  15. @Suppress("unused", "MemberVisibilityCanBePrivate")
  16. object ComponentActivityExt {
  17. const val WAKE_LOCK_TAG = 1
  18. val TRANSPARENT: Int = Color.Transparent.toArgb()
  19. val ComponentActivity.decorView
  20. get() = window.decorView
  21. val ComponentActivity.wakeLockHelper: WakeLockHelper
  22. get() = decorView.getTag(WAKE_LOCK_TAG) as? WakeLockHelper ?: WakeLockHelper(this)
  23. fun ComponentActivity.acquireWakeLock() {
  24. wakeLockHelper.acquireWakeLock()
  25. }
  26. fun ComponentActivity.releaseWakeLock() {
  27. wakeLockHelper.releaseWakeLock()
  28. }
  29. fun ComponentActivity.hideBars() {
  30. WindowCompat.getInsetsController(window, window.decorView).apply {
  31. hide(WindowInsetsCompat.Type.statusBars())
  32. hide(WindowInsetsCompat.Type.navigationBars())
  33. systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
  34. }
  35. }
  36. fun ComponentActivity.showBars() {
  37. WindowCompat.getInsetsController(window, window.decorView).apply {
  38. show(WindowInsetsCompat.Type.statusBars())
  39. show(WindowInsetsCompat.Type.navigationBars())
  40. systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT
  41. }
  42. }
  43. fun ComponentActivity.setKeepScreenOn() =
  44. with(window) {
  45. addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  46. }
  47. fun ComponentActivity.resetKeepScreenOn() =
  48. with(window) {
  49. clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  50. }
  51. // todo : black is white ?
  52. fun ComponentActivity.setBackgroundColor(color: Color = Color.Black) {
  53. decorView.background = color.toArgb().toDrawable()
  54. }
  55. @Composable
  56. fun OnBackPress(
  57. enabled: Boolean = !BuildConfig.DEBUG,
  58. action: () -> Unit = {
  59. Log.d("OnBackPressed")
  60. },
  61. ) = BackHandler(enabled, action)
  62. }