diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 42da77a..91bd366 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -699,20 +699,14 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi public void onGateUnavailable(String reason) { LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机1): " + reason); - // 先检查并取消已存在的弹窗,避免重复弹窗 - if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { - LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示新弹窗"); - gateUnavailableDialog.hide(); - // 等待一小段时间,确保旧弹窗完全关闭 - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - showNewGateUnavailableDialog(reason); - } - }, 100); + // 检查是否应该显示弹窗 + boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); + if (shouldShow) { + // 如果已有弹窗存在,更新内容;如果没有,显示新弹窗 + gateUnavailableDialog.updateGateStateError(reason); + LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason); } else { - // 没有已存在的弹窗,直接显示新弹窗 - showNewGateUnavailableDialog(reason); + LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); } } @@ -769,9 +763,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 执行checkShow()判断是否显示弹窗 boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); if (shouldShow) { - // 显示门状态异常弹窗 - gateUnavailableDialog.showGateStateError(reason); - LogManager.logInfo(TAG, "已显示门禁不可用弹窗: " + reason); + // 如果已有弹窗存在,更新内容;如果没有,显示新弹窗 + gateUnavailableDialog.updateGateStateError(reason); + LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason); } else { LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); } @@ -790,8 +784,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 执行checkShow()判断是否显示弹窗 boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); if (shouldShow) { - // 显示人数异常弹窗 - gateUnavailableDialog.showPeopleCountError(isLeaveScene, peopleNum); + // 如果已有弹窗存在,更新内容;如果没有,显示新弹窗 + gateUnavailableDialog.updatePeopleCountError(isLeaveScene, peopleNum); LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机2): 人数异常, 场景=" + (isLeaveScene ? "离场" : "进场") + ", 人数=" + peopleNum); } else { LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); @@ -1575,42 +1569,16 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi gateABController.get485PeopleNum(new GateABController.PeopleNumCallback() { @Override public void onSuccess(int 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 { - // 没有已存在的弹窗,直接显示新弹窗 - showNewPeopleCountDialog(isLeaveScene, peopleNum); - } + // 直接更新弹窗内容,不需要检查重复弹窗 + showNewPeopleCountDialog(isLeaveScene, peopleNum); } @Override public void onError(String errorMessage) { LogManager.logError(TAG, "获取人数失败,无法显示具体人数: " + errorMessage); - // 先检查并取消已存在的弹窗,避免重复弹窗 - if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { - LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示通用人数异常弹窗"); - gateUnavailableDialog.hide(); - // 等待一小段时间,确保旧弹窗完全关闭 - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - showNewGateUnavailableDialog("门禁内人数不符合要求,请等待"); - } - }, 100); - } else { - // 没有已存在的弹窗,直接显示新弹窗 - showNewGateUnavailableDialog("门禁内人数不符合要求,请等待"); - } + // 直接更新弹窗内容,不需要检查重复弹窗 + 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 f4a184e..5931686 100644 --- a/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java +++ b/app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java @@ -137,39 +137,51 @@ public class GateUnavailableDialog { } /** - * 显示门状态异常弹窗 - * @param reason 不可用原因 + * 更新弹窗内容 + * 如果弹窗正在显示,直接更新内容;如果没有显示,则显示弹窗 + * @param reason 新的不可用原因 */ - public void showGateStateError(String reason) { - LogManager.logInfo(TAG, "显示门状态异常弹窗: " + reason); + public void updateGateStateError(String reason) { + LogManager.logInfo(TAG, "更新门状态异常弹窗内容: " + reason); tvTitle.setText("门禁不可用"); tvMessage.setText(reason); - show(); + // 如果弹窗未显示,则显示弹窗 + if (!isShowing) { + show(); + } else { + LogManager.logInfo(TAG, "弹窗已显示,仅更新内容"); + } } /** - * 显示人数异常弹窗 + * 更新人数异常弹窗内容 + * 如果弹窗正在显示,直接更新内容;如果没有显示,则显示弹窗 * @param isLeaveScene 是否为离场场景 * @param peopleCount 门内人数 */ - public void showPeopleCountError(boolean isLeaveScene, int peopleCount) { + public void updatePeopleCountError(boolean isLeaveScene, int peopleCount) { String message; if (isLeaveScene) { // 离场场景:检测到门内有人 message = "AB门离场:检测到门内有 " + peopleCount + " 人\n请等待门禁内人员离开后操作"; - LogManager.logInfo(TAG, "显示离场人数异常弹窗,门内人数: " + peopleCount); + LogManager.logInfo(TAG, "更新离场人数异常弹窗内容,门内人数: " + peopleCount); } else { // 进场场景:检测到门内人数大于1 message = "AB门进场:检测到门内有 " + peopleCount + " 人\n请一次一人进场,确保门禁内只有一人时操作"; - LogManager.logInfo(TAG, "显示进场人数异常弹窗,门内人数: " + peopleCount); + LogManager.logInfo(TAG, "更新进场人数异常弹窗内容,门内人数: " + peopleCount); } tvTitle.setText("门禁不可用"); tvMessage.setText(message); - show(); + // 如果弹窗未显示,则显示弹窗 + if (!isShowing) { + show(); + } else { + LogManager.logInfo(TAG, "弹窗已显示,仅更新内容"); + } } /**