From 55891ee1ace60acb79a026c4483b08cc7e007913 Mon Sep 17 00:00:00 2001 From: MT <3075067877@qq.com> Date: Sun, 14 Sep 2025 18:37:27 +0800 Subject: [PATCH] fix 5 alert --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 100 +++++++++++++++++---- .../oxface/abgate/GateUnavailableDialog.java | 8 -- 2 files changed, 81 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index e99a02b..42da77a 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -699,13 +699,20 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi public void onGateUnavailable(String reason) { LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机1): " + reason); - // 执行checkShow()判断是否显示弹窗 - boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); - if (shouldShow) { - // 显示门状态异常弹窗 - gateUnavailableDialog.showGateStateError(reason); + // 先检查并取消已存在的弹窗,避免重复弹窗 + if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示新弹窗"); + gateUnavailableDialog.hide(); + // 等待一小段时间,确保旧弹窗完全关闭 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + showNewGateUnavailableDialog(reason); + } + }, 100); } else { - LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + // 没有已存在的弹窗,直接显示新弹窗 + showNewGateUnavailableDialog(reason); } } @@ -754,6 +761,47 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } /** + * 显示新的门禁不可用弹窗 + * @param reason 不可用原因 + */ + private void showNewGateUnavailableDialog(String reason) { + try { + // 执行checkShow()判断是否显示弹窗 + boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); + if (shouldShow) { + // 显示门状态异常弹窗 + gateUnavailableDialog.showGateStateError(reason); + LogManager.logInfo(TAG, "已显示门禁不可用弹窗: " + reason); + } else { + LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + } + } catch (Exception e) { + LogManager.logError(TAG, "显示门禁不可用弹窗失败", e); + } + } + + /** + * 显示新的人数异常弹窗 + * @param isLeaveScene 是否为离场场景 + * @param peopleNum 门内人数 + */ + private void showNewPeopleCountDialog(boolean isLeaveScene, int peopleNum) { + try { + // 执行checkShow()判断是否显示弹窗 + boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); + if (shouldShow) { + // 显示人数异常弹窗 + gateUnavailableDialog.showPeopleCountError(isLeaveScene, peopleNum); + LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机2): 人数异常, 场景=" + (isLeaveScene ? "离场" : "进场") + ", 人数=" + peopleNum); + } else { + LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + } + } catch (Exception e) { + LogManager.logError(TAG, "显示人数异常弹窗失败", e); + } + } + + /** * 检查是否开启AB门检测 */ private void checkGateCheckEnabled() { @@ -1527,14 +1575,20 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi gateABController.get485PeopleNum(new GateABController.PeopleNumCallback() { @Override public void onSuccess(int peopleNum) { - // 执行checkShow()判断是否显示弹窗 - boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); - if (shouldShow) { - // 显示人数异常弹窗 - gateUnavailableDialog.showPeopleCountError(isLeaveScene, peopleNum); - LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机2): 人数异常, 场景=" + (isLeaveScene ? "离场" : "进场") + ", 人数=" + peopleNum); + // 先检查并取消已存在的弹窗,避免重复弹窗 + if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示人数弹窗"); + gateUnavailableDialog.hide(); + // 等待一小段时间,确保旧弹窗完全关闭 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + showNewPeopleCountDialog(isLeaveScene, peopleNum); + } + }, 100); } else { - LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + // 没有已存在的弹窗,直接显示新弹窗 + showNewPeopleCountDialog(isLeaveScene, peopleNum); } } @@ -1542,12 +1596,20 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi public void onError(String errorMessage) { LogManager.logError(TAG, "获取人数失败,无法显示具体人数: " + errorMessage); - // 即使获取人数失败,也可以显示一个通用的人数异常弹窗 - boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); - if (shouldShow) { - String reason = "门禁内人数不符合要求,请等待"; - gateUnavailableDialog.showGateStateError(reason); - LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机2): " + reason); + // 先检查并取消已存在的弹窗,避免重复弹窗 + if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示通用人数异常弹窗"); + gateUnavailableDialog.hide(); + // 等待一小段时间,确保旧弹窗完全关闭 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + showNewGateUnavailableDialog("门禁内人数不符合要求,请等待"); + } + }, 100); + } else { + // 没有已存在的弹窗,直接显示新弹窗 + showNewGateUnavailableDialog("门禁内人数不符合要求,请等待"); } } }); diff --git a/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java b/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java index c3f6f3c..f4a184e 100644 --- a/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java +++ b/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java @@ -141,10 +141,6 @@ public class GateUnavailableDialog { * @param reason 不可用原因 */ public void showGateStateError(String reason) { - if (isShowing) { - return; - } - LogManager.logInfo(TAG, "显示门状态异常弹窗: " + reason); tvTitle.setText("门禁不可用"); @@ -159,10 +155,6 @@ public class GateUnavailableDialog { * @param peopleCount 门内人数 */ public void showPeopleCountError(boolean isLeaveScene, int peopleCount) { - if (isShowing) { - return; - } - String message; if (isLeaveScene) { // 离场场景:检测到门内有人