MainActivity.kt 2.6 KB

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