package com.ouxuan.oxface.abgate; import android.content.Context; import com.ouxuan.oxface.utils.LogManager; /** * GateUnavailableDialog使用示例 * 演示新增的进场和离场场景人数异常弹窗关闭逻辑 * * @author AI Assistant * @version 1.0 * @date 2024/09/15 */ public class GateUnavailableDialogUsageExample { private static final String TAG = "GateUnavailableDialogUsageExample"; private Context context; private GateUnavailableDialog gateUnavailableDialog; public GateUnavailableDialogUsageExample(Context context) { this.context = context; this.gateUnavailableDialog = new GateUnavailableDialog(context); // 设置弹窗监听器 gateUnavailableDialog.setDialogListener(new GateUnavailableDialog.GateUnavailableDialogListener() { @Override public void onDialogShow() { LogManager.logInfo(TAG, "弹窗显示,暂停摄像头和其他操作"); // 在这里实现暂停摄像头的逻辑 } @Override public void onDialogHide() { LogManager.logInfo(TAG, "弹窗隐藏,恢复摄像头和其他操作"); // 在这里实现恢复摄像头的逻辑 } }); } /** * 演示进场场景人数异常弹窗 * 当检测到门内人数大于1时,显示弹窗并启动A门开关监听 */ public void demonstrateEnterScenePeopleCountError() { LogManager.logInfo(TAG, "演示进场场景人数异常弹窗"); // 模拟检测到门内有2人(进场场景不允许) boolean isLeaveScene = false; // 进场场景 int peopleCount = 2; // 显示人数异常弹窗 gateUnavailableDialog.updatePeopleCountError(isLeaveScene, peopleCount); LogManager.logInfo(TAG, "进场场景人数异常弹窗已显示"); LogManager.logInfo(TAG, "弹窗关闭条件:"); LogManager.logInfo(TAG, "1. A、B门都关闭时弹窗不再允许关闭"); LogManager.logInfo(TAG, "2. 启动A门开关监听器checkAGateOpenClose"); LogManager.logInfo(TAG, "3. 当检测到A门由开启变为关闭时,触发udpLoopCheckNum()函数"); LogManager.logInfo(TAG, "4. 启动20次UDP轮询人数检测,每1.5秒检测1次"); LogManager.logInfo(TAG, "5. 当连续3次检测到门内人数为1人且A、B门均关闭时,弹窗关闭"); LogManager.logInfo(TAG, "6. 达到20次轮询上限时,自动关闭弹窗"); LogManager.logInfo(TAG, "7. 如果A门监听器被再次触发,会重置UDP轮询"); } /** * 演示离场场景人数异常弹窗 * 当检测到门内有人时,显示弹窗并启动5秒倒计时 */ public void demonstrateLeaveScenePeopleCountError() { LogManager.logInfo(TAG, "演示离场场景人数异常弹窗"); // 模拟检测到门内有1人(离场场景不允许) boolean isLeaveScene = true; // 离场场景 int peopleCount = 1; // 显示人数异常弹窗 gateUnavailableDialog.updatePeopleCountError(isLeaveScene, peopleCount); LogManager.logInfo(TAG, "离场场景人数异常弹窗已显示"); LogManager.logInfo(TAG, "弹窗关闭条件:"); LogManager.logInfo(TAG, "1. A、B门都关闭时弹窗不再允许关闭"); LogManager.logInfo(TAG, "2. 弹窗右上角显示倒计时"); LogManager.logInfo(TAG, "3. 5秒后自动关闭弹窗"); } /** * 演示门状态异常弹窗(保持原有逻辑) */ public void demonstrateGateStateError() { LogManager.logInfo(TAG, "演示门状态异常弹窗"); // 显示门状态异常弹窗 String reason = "检测到A门开启,门禁不可用"; boolean gateAOpen = true; boolean gateBOpen = false; boolean udpConnected = true; gateUnavailableDialog.updateGateStateError(reason, gateAOpen, gateBOpen, udpConnected); LogManager.logInfo(TAG, "门状态异常弹窗已显示,保持原有关闭逻辑"); } /** * 模拟A门状态变化(用于测试进场场景) */ public void simulateAGateStateChange() { LogManager.logInfo(TAG, "模拟A门状态变化"); // 这里可以模拟A门从开启变为关闭的状态变化 // 在实际应用中,这将通过UDP监听器自动触发 LogManager.logInfo(TAG, "模拟A门由开启变为关闭,应该触发UDP轮询人数检测"); } /** * 清理资源 */ public void cleanup() { if (gateUnavailableDialog != null) { gateUnavailableDialog.release(); gateUnavailableDialog = null; } LogManager.logInfo(TAG, "GateUnavailableDialog示例资源已清理"); } }