MainActivity.kt 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package com.hzliuzhi.applet.container
  2. import android.annotation.SuppressLint
  3. import android.os.Bundle
  4. import android.view.KeyEvent
  5. import androidx.activity.ComponentActivity
  6. import androidx.activity.compose.LocalActivity
  7. import androidx.activity.compose.setContent
  8. import androidx.activity.enableEdgeToEdge
  9. import androidx.compose.foundation.layout.padding
  10. import androidx.compose.material3.Scaffold
  11. import androidx.compose.runtime.rememberCoroutineScope
  12. import androidx.compose.ui.Modifier
  13. import androidx.navigation.NavHostController
  14. import androidx.navigation.compose.rememberNavController
  15. import com.hzliuzhi.applet.browser.webview.WebViewBridge
  16. import com.hzliuzhi.applet.container.navigation.Host
  17. import com.hzliuzhi.applet.container.scanner.ScannerListener
  18. import com.hzliuzhi.applet.container.scanner.rememberScannerListener
  19. import com.hzliuzhi.applet.core.shared.Event
  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.device.pulse.PulseEventHandle
  24. class MainActivity : ComponentActivity() {
  25. private var navController: NavHostController? = null
  26. private var scanner: ScannerListener? = null
  27. override fun onCreate(savedInstanceState: Bundle?) {
  28. super.onCreate(savedInstanceState)
  29. enableEdgeToEdge()
  30. setContent {
  31. navController = rememberNavController().also {
  32. SixTheme {
  33. Scaffold() { padding ->
  34. Host(
  35. navController = it,
  36. modifier = Modifier.padding(padding)
  37. )
  38. }
  39. }
  40. }
  41. LocalActivity.current?.also {
  42. scanner = rememberScannerListener { result ->
  43. val code = result.code
  44. code.takeIf { code.isNotEmpty() }?.also {
  45. val message = Payload.data(data = result).toEvent()?.let { payload ->
  46. WebViewBridge.Message(type = "scan", payload = payload)
  47. }?.let { message ->
  48. Event<WebViewBridge.Message, String>(
  49. type = "${SharedFlowHub.WEBVIEW_BRIDGE_EVENT}:js",
  50. payload = message
  51. )
  52. }?.let { event ->
  53. SharedFlowHub.emit(event)
  54. }
  55. }
  56. }
  57. PulseEventHandle(it, rememberCoroutineScope())
  58. }
  59. }
  60. }
  61. @SuppressLint("RestrictedApi")
  62. override fun dispatchKeyEvent(event: KeyEvent): Boolean {
  63. return scanner?.dispatchKeyEvent(event)?.takeIf { it } ?: super.dispatchKeyEvent(event)
  64. }
  65. }