oxFaceAndroid
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
4.9 KiB

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示例资源已清理");
}
}