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( 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) } }