package com.hzliuzhi.applet.container import android.annotation.SuppressLint import android.view.KeyEvent import android.widget.Toast import androidx.activity.compose.LocalActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController import com.hzliuzhi.applet.container.navigation.Host import com.hzliuzhi.applet.core.shared.Message 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.printer.Printer import com.hzliuzhi.applet.scanner.Scanner class MainActivity : AndroidActivity() { private var navController: NavHostController? = null @SuppressLint("RestrictedApi") override fun dispatchKeyEvent(event: KeyEvent): Boolean { val context = applicationContext return Scanner.getInstance(context).dispatchKeyEvent(event).takeIf { it } ?: super.dispatchKeyEvent(event) } override fun setContent() { super.setContent() setContent { navController = rememberNavController().also { SixTheme { Scaffold() { padding -> Host( navController = it, modifier = Modifier.padding(padding) ) } } } val context = LocalContext.current val owner = LocalLifecycleOwner.current Scanner.getInstance(context).observe(owner) { result -> if (result == null) { Payload.error(message = "扫码失败: 结果为空").toJson() } else { Toast.makeText(context, result.message, Toast.LENGTH_SHORT).show() when { result.code.startsWith("six:") -> null else -> Payload.data(data = result).toJson() } }?.also { val event = Message(type = "scan", payload = it).toWebEvent() SharedFlowHub.emit(event) } } Scanner.getInstance(context).eventHandle(rememberCoroutineScope()) LocalActivity.current?.also { Printer.getInstance(it).eventHandle(rememberCoroutineScope()) } val tag = context.resources.getString(R.string.app_id) when { tag.startsWith("AIO") -> run { LocalActivity.current?.also { com.hzliuzhi.applet.device.pulse.PulseEventHandle(it, rememberCoroutineScope()) } } } } } }