| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package com.hzliuzhi.applet.container
- import android.annotation.SuppressLint
- import android.os.Bundle
- import android.view.KeyEvent
- import androidx.activity.ComponentActivity
- import androidx.activity.compose.LocalActivity
- import androidx.activity.compose.setContent
- import androidx.activity.enableEdgeToEdge
- import androidx.compose.foundation.layout.padding
- import androidx.compose.material3.Scaffold
- import androidx.compose.runtime.rememberCoroutineScope
- import androidx.compose.ui.Modifier
- import androidx.navigation.NavHostController
- import androidx.navigation.compose.rememberNavController
- import com.hzliuzhi.applet.browser.webview.WebViewBridge
- import com.hzliuzhi.applet.container.navigation.Host
- import com.hzliuzhi.applet.container.scanner.ScannerListener
- import com.hzliuzhi.applet.container.scanner.rememberScannerListener
- import com.hzliuzhi.applet.core.shared.Event
- import com.hzliuzhi.applet.core.shared.Payload
- import com.hzliuzhi.applet.core.shared.SharedFlowHub
- import com.hzliuzhi.applet.core.theme.SixTheme
- import com.hzliuzhi.applet.device.pulse.PulseEventHandle
- class MainActivity : ComponentActivity() {
- private var navController: NavHostController? = null
- private var scanner: ScannerListener? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- setContent {
- navController = rememberNavController().also {
- SixTheme {
- Scaffold() { padding ->
- Host(
- navController = it,
- modifier = Modifier.padding(padding)
- )
- }
- }
- }
- LocalActivity.current?.also {
- scanner = rememberScannerListener { result ->
- val code = result.code
- code.takeIf { code.isNotEmpty() }?.also {
- val message = Payload.data(data = result).toEvent()?.let { payload ->
- WebViewBridge.Message(type = "scan", payload = payload)
- }?.let { message ->
- Event<WebViewBridge.Message, String>(
- type = "${SharedFlowHub.WEBVIEW_BRIDGE_EVENT}:js",
- payload = message
- )
- }?.let { event ->
- SharedFlowHub.emit(event)
- }
- }
- }
- PulseEventHandle(it, rememberCoroutineScope())
- }
- }
- }
- @SuppressLint("RestrictedApi")
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- return scanner?.dispatchKeyEvent(event)?.takeIf { it } ?: super.dispatchKeyEvent(event)
- }
- }
|