MainActivity.kt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package com.hzliuzhi.applet.container
  2. import android.annotation.SuppressLint
  3. import android.os.Bundle
  4. import android.view.KeyEvent
  5. import android.widget.Toast
  6. import androidx.activity.ComponentActivity
  7. import androidx.activity.compose.LocalActivity
  8. import androidx.activity.compose.setContent
  9. import androidx.activity.enableEdgeToEdge
  10. import androidx.compose.foundation.layout.padding
  11. import androidx.compose.material3.Scaffold
  12. import androidx.compose.runtime.rememberCoroutineScope
  13. import androidx.compose.ui.Modifier
  14. import androidx.compose.ui.platform.LocalContext
  15. import androidx.lifecycle.compose.LocalLifecycleOwner
  16. import androidx.navigation.NavHostController
  17. import androidx.navigation.compose.rememberNavController
  18. import com.hzliuzhi.applet.browser.webview.WebViewBridge
  19. import com.hzliuzhi.applet.container.navigation.Host
  20. import com.hzliuzhi.applet.core.shared.Payload
  21. import com.hzliuzhi.applet.core.shared.SharedFlowHub
  22. import com.hzliuzhi.applet.core.theme.SixTheme
  23. import com.hzliuzhi.applet.scanner.Scanner
  24. class MainActivity : ComponentActivity() {
  25. private var navController: NavHostController? = null
  26. override fun onCreate(savedInstanceState: Bundle?) {
  27. super.onCreate(savedInstanceState)
  28. enableEdgeToEdge()
  29. setContent {
  30. navController = rememberNavController().also {
  31. SixTheme {
  32. Scaffold() { padding ->
  33. Host(
  34. navController = it,
  35. modifier = Modifier.padding(padding)
  36. )
  37. }
  38. }
  39. }
  40. val context = LocalContext.current
  41. val owner = LocalLifecycleOwner.current
  42. Scanner.getInstance(context).observe(owner) { result ->
  43. if (result == null) {
  44. Payload.error<Unit>(message = "扫码失败: 结果为空").toJson()
  45. } else {
  46. Toast.makeText(context, result.message, Toast.LENGTH_SHORT).show()
  47. when {
  48. result.code.startsWith("six:") -> null
  49. else -> Payload.data(data = result).toJson()
  50. }
  51. }?.also {
  52. val event = WebViewBridge.Message(type = "scan", payload = it).toEvent()
  53. SharedFlowHub.emit(event)
  54. }
  55. }
  56. Scanner.getInstance(context).eventHandle(rememberCoroutineScope())
  57. val tag = context.resources.getString(R.string.app_id)
  58. when {
  59. tag.startsWith("AIO") -> run {
  60. LocalActivity.current?.also {
  61. com.hzliuzhi.applet.device.pulse.PulseEventHandle(it, rememberCoroutineScope())
  62. }
  63. }
  64. }
  65. }
  66. }
  67. @SuppressLint("RestrictedApi")
  68. override fun dispatchKeyEvent(event: KeyEvent): Boolean {
  69. val context = applicationContext
  70. return Scanner.getInstance(context).dispatchKeyEvent(event).takeIf { it } ?: super.dispatchKeyEvent(event)
  71. }
  72. }