From 923f4ff124377acb368fd816452b8edac4f9a033 Mon Sep 17 00:00:00 2001 From: MTing Date: Thu, 18 Sep 2025 17:28:49 +0800 Subject: [PATCH] enable ab add --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 153 +++++++++++---------- 1 file changed, 83 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index f471029..731e00e 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -730,71 +730,79 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi gateABController = GateABController.getInstance(); gateABController.initialize(this); - // 设置门状态监听器(触发时机1) - gateABController.setGateStateListener(new GateABController.GateUnavailableListener() { - @Override - public void onGateStateChanged(GateABController.GateABState state) { - LogManager.logInfo(TAG, "门状态发生变化: " + state.toString()); - } - - @Override - public void onGateUnavailable(String reason) { - LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机1): " + reason); - - // 检查是否应该显示弹窗 - boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); - if (shouldShow) { - // 获取当前门状态信息 - GateABController.GateABState currentState = gateABController.getCurrentGateState(); - // 如果已有弹窗存在,更新内容(带门状态信息);如果没有,显示新弹窗 - gateUnavailableDialog.updateGateStateError(reason, - currentState.gateAOpen, - currentState.gateBOpen, - currentState.udpConnected); - - pauseCamera(); - LogManager.logInfo(TAG, " pauseCamera 已更新门禁不可用弹窗内容: " + reason); - } else { - LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + // 检查是否开启AB门检测 + checkGateCheckEnabled(); + + // 只有当AB门检测开启时才设置门状态监听器(触发时机1) + if (isGateCheckEnabled) { + // 设置门状态监听器(触发时机1) + gateABController.setGateStateListener(new GateABController.GateUnavailableListener() { + @Override + public void onGateStateChanged(GateABController.GateABState state) { + LogManager.logInfo(TAG, "门状态发生变化: " + state.toString()); } - } - - @Override - public void onGateAvailable() { - LogManager.logInfo(TAG, "门禁恢复可用,隐藏弹窗并恢复摄像头预览"); - // 隐藏门禁不可用弹窗 - if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { - gateUnavailableDialog.hide(); + @Override + public void onGateUnavailable(String reason) { + LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机1): " + reason); + + // 检查是否应该显示弹窗 + boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); + if (shouldShow) { + // 获取当前门状态信息 + GateABController.GateABState currentState = gateABController.getCurrentGateState(); + // 如果已有弹窗存在,更新内容(带门状态信息);如果没有,显示新弹窗 + gateUnavailableDialog.updateGateStateError(reason, + currentState.gateAOpen, + currentState.gateBOpen, + currentState.udpConnected); + + pauseCamera(); + LogManager.logInfo(TAG, " pauseCamera 已更新门禁不可用弹窗内容: " + reason); + } else { + LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); + } } - // 恢复摄像头预览(与弹窗的onDialogHide回调保持一致) - resumeCamera(); - } - - @Override - public void onGateStatusUpdate(boolean gateAOpen, boolean gateBOpen, boolean udpConnected) { - // 实时更新弹窗中的门状态显示 - if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { - LogManager.logInfo(TAG, "更新弹窗中的门状态显示: A门-" + - (gateAOpen ? "开启" : "关闭") + ", B门-" + - (gateBOpen ? "开启" : "关闭") + ", UDP-" + - (udpConnected ? "正常" : "异常")); + @Override + public void onGateAvailable() { + LogManager.logInfo(TAG, "门禁恢复可用,隐藏弹窗并恢复摄像头预览"); + + // 隐藏门禁不可用弹窗 + if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + gateUnavailableDialog.hide(); + } - // 更新弹窗中的门状态显示(保持原有消息不变) - String currentReason = getCurrentDialogReason(); - gateUnavailableDialog.updateGateStateError(currentReason, gateAOpen, gateBOpen, udpConnected); + // 恢复摄像头预览(与弹窗的onDialogHide回调保持一致) + resumeCamera(); } - // 特别处理:如果A门和B门都关闭且UDP正常,且有弹窗正在显示,应该关闭弹窗 -// if (!gateAOpen && !gateBOpen && udpConnected && -// gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { -// LogManager.logInfo(TAG, "A门和B门都关闭且UDP正常,关闭门禁不可用弹窗"); -// gateUnavailableDialog.hide(); -// resumeCamera(); -// } - } - }); + @Override + public void onGateStatusUpdate(boolean gateAOpen, boolean gateBOpen, boolean udpConnected) { + // 实时更新弹窗中的门状态显示 + if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + LogManager.logInfo(TAG, "更新弹窗中的门状态显示: A门-" + + (gateAOpen ? "开启" : "关闭") + ", B门-" + + (gateBOpen ? "开启" : "关闭") + ", UDP-" + + (udpConnected ? "正常" : "异常")); + + // 更新弹窗中的门状态显示(保持原有消息不变) + String currentReason = getCurrentDialogReason(); + gateUnavailableDialog.updateGateStateError(currentReason, gateAOpen, gateBOpen, udpConnected); + } + + // 特别处理:如果A门和B门都关闭且UDP正常,且有弹窗正在显示,应该关闭弹窗 + // if (!gateAOpen && !gateBOpen && udpConnected && + // gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) { + // LogManager.logInfo(TAG, "A门和B门都关闭且UDP正常,关闭门禁不可用弹窗"); + // gateUnavailableDialog.hide(); + // resumeCamera(); + // } + } + }); + } else { + LogManager.logInfo(TAG, "AB门检测已关闭,跳过设置门状态监听器(触发时机1)"); + } // 初始化门禁不可用弹窗 gateUnavailableDialog = new GateUnavailableDialog(this); @@ -874,16 +882,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } }); - // 检查是否开启AB门检测 - checkGateCheckEnabled(); - LogManager.logInfo(TAG, "AB门禁管理和不可用弹窗初始化完成"); } catch (Exception e) { LogManager.logError(TAG, "AB门禁管理和不可用弹窗初始化失败", e); } } - + /** * 显示新的门禁不可用弹窗 * @param reason 不可用原因 @@ -943,13 +948,22 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private void checkGateCheckEnabled() { try { // 从配置中获取AB门检测是否开启 - // 这里可以根据实际业务需要添加配置检查逻辑 - // 例如:从 DeviceSelectDataManager 获取相关配置 + boolean gateCheckEnabled = false; + + // 获取门禁配置信息 + com.ouxuan.oxface.utils.VenueSceneUtils.GateConfig gateConfig = + com.ouxuan.oxface.utils.VenueSceneUtils.getGateConfig(this); - // 暂时默认开启,后续可以根据实际需要调整 - isGateCheckEnabled = true; + if (gateConfig != null) { + gateCheckEnabled = gateConfig.gateAbEnable; + LogManager.logInfo(TAG, "从配置获取AB门检测状态: " + (gateCheckEnabled ? "已开启" : "已关闭")); + } else { + LogManager.logWarning(TAG, "无法获取门禁配置,AB门检测默认关闭"); + gateCheckEnabled = false; + } - LogManager.logInfo(TAG, "AB门检测状态: " + (isGateCheckEnabled ? "已开启" : "已关闭")); + isGateCheckEnabled = gateCheckEnabled; + LogManager.logInfo(TAG, "AB门检测最终状态: " + (isGateCheckEnabled ? "已开启" : "已关闭")); } catch (Exception e) { LogManager.logError(TAG, "检查AB门检测状态失败", e); @@ -1825,9 +1839,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { // 离场场景:检查gate_enter_open_enable配置 VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(OXFaceOnlineActivity.this); -// gateOpenEnable - if (gateConfig != null && gateConfig.gateOpenEnable) { - // 如果 gate_open_enable 为 true,直接开门不进行网络核销 + if (gateConfig != null && gateConfig.gateEnterOpenEnable) { + // 如果 gate_enter_open_enable 为 true,直接开门不进行网络核销 LogManager.logInfo(TAG, "检测到离场场景,gate_enter_open_enable为true,直接开启B门"); showLoadingStatus("门已打开,请直接离场");