diff --git a/app/src/main/assets/print_demo.html b/app/src/main/assets/print_demo.html
index d29e545..3080ef6 100644
--- a/app/src/main/assets/print_demo.html
+++ b/app/src/main/assets/print_demo.html
@@ -112,6 +112,22 @@
+
+
App 弹窗交互
+
+
+
+
+
+ 提示标题:
+
+ 提示内容:
+
+ JSON 数据:
+
+
+
+
@@ -399,6 +415,31 @@
}
}
+ function triggerRestartDialog() {
+ if (window.android && window.android.showRestartDialog) {
+ var msg = document.getElementById('dialog-msg').value;
+ var title = document.getElementById('dialog-title').value;
+ window.android.showRestartDialog(msg, title);
+ } else {
+ alert("showRestartDialog 接口不可用");
+ }
+ }
+
+ function triggerJsonDialog() {
+ if (window.android && window.android.showJsonDialog) {
+ var json = document.getElementById('dialog-json').value;
+ try {
+ JSON.parse(json);
+ } catch(e) {
+ alert("JSON 格式错误: " + e.message);
+ return;
+ }
+ window.android.showJsonDialog(json);
+ } else {
+ alert("showJsonDialog 接口不可用");
+ }
+ }
+
// 调用系统打印
function callSystemPrint() {
if (window.android && window.android.printPage) {
diff --git a/app/src/main/java/com/stand/standapp/AndroidInterface.kt b/app/src/main/java/com/stand/standapp/AndroidInterface.kt
index 1215bb9..c15eb3e 100644
--- a/app/src/main/java/com/stand/standapp/AndroidInterface.kt
+++ b/app/src/main/java/com/stand/standapp/AndroidInterface.kt
@@ -81,6 +81,8 @@ class AndroidInterface(private val activity: MainActivity) {
"getMessages" -> getMessages()
"clearMessages" -> { clearMessages(); "" }
"onPageFinished" -> { onPageFinished(); "" }
+ "showRestartDialog" -> { showRestartDialog(args.optString(0, ""), args.optString(1, "提示")); "" }
+ "showJsonDialog" -> { showJsonDialog(args.optString(0, "")); "" }
else -> {
Timber.tag("Bridge").w("Unknown method: $method")
""
@@ -422,17 +424,44 @@ class AndroidInterface(private val activity: MainActivity) {
activity.cancelTimeoutTimer()
activity.findViewById(R.id.loading_layout)?.visibility = android.view.View.GONE
- // 正式界面模式下,页面加载完成后传递 token 给前端
+ // 正式界面模式下,页面加载完成后传递登录数据给前端
val isOfficial = activity.isOfficialMode()
- val token = activity.getEssToken()
- Timber.tag("AndroidInterface").d("onPageFinished: isOfficial=$isOfficial, token=$token")
- if (isOfficial && token.isNotEmpty()) {
- com.stand.standapp.MainActivity.executeJs("if(window.setAppToken){window.setAppToken('$token');}")
- Timber.tag("AndroidInterface").d("Called setAppToken with token")
+ val data = activity.getLoginData()
+ Timber.tag("AndroidInterface").d("onPageFinished: isOfficial=$isOfficial, data=$data")
+ if (isOfficial && data.isNotEmpty()) {
+ val escaped = data.replace("'", "\\'").replace("\n", "\\n")
+ com.stand.standapp.MainActivity.executeJs("if(window.appLogin){window.appLogin('$escaped');}")
+ Timber.tag("AndroidInterface").d("Called appLogin")
}
} catch (e: Exception) {
Timber.tag("UI").e(e, "隐藏加载布局失败")
}
}
}
+
+ fun showRestartDialog(message: String, title: String) {
+ Handler(Looper.getMainLooper()).post {
+ com.stand.standapp.MainActivity.showPttUpdateDialog(message, title)
+ }
+ }
+
+ fun showJsonDialog(jsonStr: String) {
+ Handler(Looper.getMainLooper()).post {
+ try {
+ val formatted = try {
+ val obj = org.json.JSONObject(jsonStr)
+ obj.toString(2)
+ } catch (_: Exception) {
+ jsonStr
+ }
+ androidx.appcompat.app.AlertDialog.Builder(activity)
+ .setTitle("JSON 数据")
+ .setMessage(formatted)
+ .setPositiveButton("确认", null)
+ .show()
+ } catch (e: Exception) {
+ Timber.tag("UI").e(e, "showJsonDialog error")
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/stand/standapp/LoginActivity.kt b/app/src/main/java/com/stand/standapp/LoginActivity.kt
index 3e10ed1..317ebe9 100644
--- a/app/src/main/java/com/stand/standapp/LoginActivity.kt
+++ b/app/src/main/java/com/stand/standapp/LoginActivity.kt
@@ -151,9 +151,9 @@ class LoginActivity : AppCompatActivity() {
AppConfig.setSavedPassword(this@LoginActivity, "")
}
- // 提取 token
+ // 提取登录数据
val data = json.optJSONObject("data")
- val essToken = data?.optString("access_token", "") ?: ""
+ val loginData = data?.toString() ?: "{}"
Toast.makeText(this@LoginActivity, "登录成功", Toast.LENGTH_SHORT).show()
@@ -187,10 +187,10 @@ class LoginActivity : AppCompatActivity() {
// 3. 初始化打印机 (异步)
PrinterManager.init(this@LoginActivity)
- // 4. 启动 MainActivity,传递登录模式和 token
+ // 4. 启动 MainActivity,传递登录模式和数据
val intent = Intent(this@LoginActivity, MainActivity::class.java)
intent.putExtra("official_mode", officialMode)
- intent.putExtra("ess_token", essToken)
+ intent.putExtra("login_data", loginData)
startActivity(intent)
finish()
} else {
diff --git a/app/src/main/java/com/stand/standapp/MainActivity.kt b/app/src/main/java/com/stand/standapp/MainActivity.kt
index 29f5124..59be8ed 100644
--- a/app/src/main/java/com/stand/standapp/MainActivity.kt
+++ b/app/src/main/java/com/stand/standapp/MainActivity.kt
@@ -125,7 +125,7 @@ class MainActivity : AppCompatActivity() {
private lateinit var geckoView: GeckoView
private var officialMode = false
- private var essToken = ""
+ private var loginData = ""
private val mHandler = android.os.Handler(android.os.Looper.getMainLooper())
private val TIMEOUT_MS = 10000L
@@ -139,9 +139,9 @@ class MainActivity : AppCompatActivity() {
instance = this
showPendingDialogIfNeeded()
- // 读取登录模式和 token
+ // 读取登录模式和数据
officialMode = intent.getBooleanExtra("official_mode", false)
- essToken = intent.getStringExtra("ess_token") ?: ""
+ loginData = intent.getStringExtra("login_data") ?: ""
try {
setContentView(R.layout.activity_main)
@@ -248,12 +248,13 @@ class MainActivity : AppCompatActivity() {
override fun onPageStop(session: GeckoSession, success: Boolean) {
Timber.tag("MainActivity").d("Page stopped, success: $success")
- // 正式界面模式下,页面加载完成后传递 token 给前端
-// if (success && officialMode && essToken.isNotEmpty()) {
+ // 正式界面模式下,页面加载完成后传递登录数据给前端
+// if (success && officialMode && loginData.isNotEmpty()) {
// // 延迟 500ms 确保 JS 上下文就绪
// mHandler.postDelayed({
-// executeJs("if(window.setAppToken){window.setAppToken('$essToken');}")
-// Timber.tag("MainActivity").d("Called setAppToken via onPageStop")
+// val escaped = loginData.replace("'", "\\'").replace("\n", "\\n")
+// executeJs("if(window.appLogin){window.appLogin('$escaped');}")
+// Timber.tag("MainActivity").d("Called appLogin with loginData")
// }, 500)
// }
}
@@ -461,7 +462,7 @@ class MainActivity : AppCompatActivity() {
fun isOfficialMode(): Boolean = officialMode
- fun getEssToken(): String = essToken
+ fun getLoginData(): String = loginData
private fun showErrorPage() {
findViewById(R.id.loading_layout)?.visibility = android.view.View.GONE