赵明涛 9 hours ago
parent
commit
dfb545ec45
  1. 60
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
  2. 28
      app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java

60
app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java

@ -699,20 +699,14 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
public void onGateUnavailable(String reason) {
LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机1): " + reason);
// 先检查并取消已存在的弹窗避免重复弹窗
if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) {
LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示新弹窗");
gateUnavailableDialog.hide();
// 等待一小段时间确保旧弹窗完全关闭
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showNewGateUnavailableDialog(reason);
}
}, 100);
// 检查是否应该显示弹窗
boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable());
if (shouldShow) {
// 如果已有弹窗存在更新内容如果没有显示新弹窗
gateUnavailableDialog.updateGateStateError(reason);
LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason);
} else {
// 没有已存在的弹窗直接显示新弹窗
showNewGateUnavailableDialog(reason);
LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗");
}
}
@ -769,9 +763,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
// 执行checkShow()判断是否显示弹窗
boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable());
if (shouldShow) {
// 显示门状态异常弹窗
gateUnavailableDialog.showGateStateError(reason);
LogManager.logInfo(TAG, "已显示门禁不可用弹窗: " + reason);
// 如果已有弹窗存在更新内容如果没有显示新弹窗
gateUnavailableDialog.updateGateStateError(reason);
LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason);
} else {
LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗");
}
@ -790,8 +784,8 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
// 执行checkShow()判断是否显示弹窗
boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable());
if (shouldShow) {
// 显示人数异常弹窗
gateUnavailableDialog.showPeopleCountError(isLeaveScene, peopleNum);
// 如果已有弹窗存在更新内容如果没有显示新弹窗
gateUnavailableDialog.updatePeopleCountError(isLeaveScene, peopleNum);
LogManager.logWarning(TAG, "触发门禁不可用弹窗(触发时机2): 人数异常, 场景=" + (isLeaveScene ? "离场" : "进场") + ", 人数=" + peopleNum);
} else {
LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗");
@ -1575,43 +1569,17 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
gateABController.get485PeopleNum(new GateABController.PeopleNumCallback() {
@Override
public void onSuccess(int peopleNum) {
// 先检查并取消已存在的弹窗避免重复弹窗
if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) {
LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示人数弹窗");
gateUnavailableDialog.hide();
// 等待一小段时间确保旧弹窗完全关闭
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 直接更新弹窗内容不需要检查重复弹窗
showNewPeopleCountDialog(isLeaveScene, peopleNum);
}
}, 100);
} else {
// 没有已存在的弹窗直接显示新弹窗
showNewPeopleCountDialog(isLeaveScene, peopleNum);
}
}
@Override
public void onError(String errorMessage) {
LogManager.logError(TAG, "获取人数失败,无法显示具体人数: " + errorMessage);
// 先检查并取消已存在的弹窗避免重复弹窗
if (gateUnavailableDialog != null && gateUnavailableDialog.isShowing()) {
LogManager.logInfo(TAG, "检测到已有门禁不可用弹窗,先取消后显示通用人数异常弹窗");
gateUnavailableDialog.hide();
// 等待一小段时间确保旧弹窗完全关闭
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showNewGateUnavailableDialog("门禁内人数不符合要求,请等待");
}
}, 100);
} else {
// 没有已存在的弹窗直接显示新弹窗
// 直接更新弹窗内容不需要检查重复弹窗
showNewGateUnavailableDialog("门禁内人数不符合要求,请等待");
}
}
});
} catch (Exception e) {

28
app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java

@ -137,39 +137,51 @@ public class GateUnavailableDialog {
}
/**
* 显示门状态异常弹窗
* @param reason 不可用原因
* 更新弹窗内容
* 如果弹窗正在显示直接更新内容如果没有显示则显示弹窗
* @param reason 新的不可用原因
*/
public void showGateStateError(String reason) {
LogManager.logInfo(TAG, "显示门状态异常弹窗: " + reason);
public void updateGateStateError(String reason) {
LogManager.logInfo(TAG, "更新门状态异常弹窗内容: " + reason);
tvTitle.setText("门禁不可用");
tvMessage.setText(reason);
// 如果弹窗未显示则显示弹窗
if (!isShowing) {
show();
} else {
LogManager.logInfo(TAG, "弹窗已显示,仅更新内容");
}
}
/**
* 显示人数异常弹窗
* 更新人数异常弹窗内容
* 如果弹窗正在显示直接更新内容如果没有显示则显示弹窗
* @param isLeaveScene 是否为离场场景
* @param peopleCount 门内人数
*/
public void showPeopleCountError(boolean isLeaveScene, int peopleCount) {
public void updatePeopleCountError(boolean isLeaveScene, int peopleCount) {
String message;
if (isLeaveScene) {
// 离场场景检测到门内有人
message = "AB门离场:检测到门内有 " + peopleCount + " 人\n请等待门禁内人员离开后操作";
LogManager.logInfo(TAG, "显示离场人数异常弹窗,门内人数: " + peopleCount);
LogManager.logInfo(TAG, "更新离场人数异常弹窗内容,门内人数: " + peopleCount);
} else {
// 进场场景检测到门内人数大于1
message = "AB门进场:检测到门内有 " + peopleCount + " 人\n请一次一人进场,确保门禁内只有一人时操作";
LogManager.logInfo(TAG, "显示进场人数异常弹窗,门内人数: " + peopleCount);
LogManager.logInfo(TAG, "更新进场人数异常弹窗内容,门内人数: " + peopleCount);
}
tvTitle.setText("门禁不可用");
tvMessage.setText(message);
// 如果弹窗未显示则显示弹窗
if (!isShowing) {
show();
} else {
LogManager.logInfo(TAG, "弹窗已显示,仅更新内容");
}
}
/**

Loading…
Cancel
Save