|
@ -730,71 +730,79 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
gateABController = GateABController.getInstance(); |
|
|
gateABController = GateABController.getInstance(); |
|
|
gateABController.initialize(this); |
|
|
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); |
|
|
gateUnavailableDialog = new GateUnavailableDialog(this); |
|
@ -874,16 +882,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
// 检查是否开启AB门检测 |
|
|
|
|
|
checkGateCheckEnabled(); |
|
|
|
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "AB门禁管理和不可用弹窗初始化完成"); |
|
|
LogManager.logInfo(TAG, "AB门禁管理和不可用弹窗初始化完成"); |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
LogManager.logError(TAG, "AB门禁管理和不可用弹窗初始化失败", e); |
|
|
LogManager.logError(TAG, "AB门禁管理和不可用弹窗初始化失败", e); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 显示新的门禁不可用弹窗 |
|
|
* 显示新的门禁不可用弹窗 |
|
|
* @param reason 不可用原因 |
|
|
* @param reason 不可用原因 |
|
@ -943,13 +948,22 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
private void checkGateCheckEnabled() { |
|
|
private void checkGateCheckEnabled() { |
|
|
try { |
|
|
try { |
|
|
// 从配置中获取AB门检测是否开启 |
|
|
// 从配置中获取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) { |
|
|
} catch (Exception e) { |
|
|
LogManager.logError(TAG, "检查AB门检测状态失败", e); |
|
|
LogManager.logError(TAG, "检查AB门检测状态失败", e); |
|
@ -1825,9 +1839,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi |
|
|
if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { |
|
|
if (VenueSceneUtils.isLeaveScene(OXFaceOnlineActivity.this)) { |
|
|
// 离场场景:检查gate_enter_open_enable配置 |
|
|
// 离场场景:检查gate_enter_open_enable配置 |
|
|
VenueSceneUtils.GateConfig gateConfig = VenueSceneUtils.getGateConfig(OXFaceOnlineActivity.this); |
|
|
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门"); |
|
|
LogManager.logInfo(TAG, "检测到离场场景,gate_enter_open_enable为true,直接开启B门"); |
|
|
showLoadingStatus("门已打开,请直接离场"); |
|
|
showLoadingStatus("门已打开,请直接离场"); |
|
|
|
|
|
|
|
|