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