Browse Source

fix 7.1

dev
赵明涛 9 hours ago
parent
commit
e724cc75ee
  1. 44
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
  2. 61
      app/src/main/java/com/ouxuan/oxface/abgate/GateUnavailableDialog.java
  3. 29
      app/src/main/java/com/ouxuan/oxface/device/GateABController.java

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

@ -702,8 +702,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
// 检查是否应该显示弹窗 // 检查是否应该显示弹窗
boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable()); boolean shouldShow = gateUnavailableDialog.checkShow(OXFaceOnlineActivity.this, isNetworkAvailable());
if (shouldShow) { if (shouldShow) {
// 如果已有弹窗存在更新内容如果没有显示新弹窗
gateUnavailableDialog.updateGateStateError(reason);
// 获取当前门状态信息
GateABController.GateABState currentState = gateABController.getCurrentGateState();
// 如果已有弹窗存在更新内容带门状态信息如果没有显示新弹窗
gateUnavailableDialog.updateGateStateError(reason,
currentState.gateAOpen,
currentState.gateBOpen,
currentState.udpConnected);
LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason); LogManager.logInfo(TAG, "已更新门禁不可用弹窗内容: " + reason);
} else { } else {
LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗"); LogManager.logInfo(TAG, "根据业务规则,不显示门禁不可用弹窗");
@ -722,6 +727,29 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
// 恢复摄像头预览与弹窗的onDialogHide回调保持一致 // 恢复摄像头预览与弹窗的onDialogHide回调保持一致
resumeCamera(); 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();
}
}
}); });
// 初始化门禁不可用弹窗 // 初始化门禁不可用弹窗
@ -775,6 +803,18 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
} }
/** /**
* 获取当前弹窗的原因消息用于状态更新时保持原有消息
* @return 当前弹窗的原因消息
*/
private String getCurrentDialogReason() {
if (gateABController != null) {
GateABController.GateABState currentState = gateABController.getCurrentGateState();
return currentState.getUnavailableReason();
}
return "门禁状态异常"; // 默认消息
}
/**
* 显示新的人数异常弹窗 * 显示新的人数异常弹窗
* @param isLeaveScene 是否为离场场景 * @param isLeaveScene 是否为离场场景
* @param peopleNum 门内人数 * @param peopleNum 门内人数

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

@ -101,9 +101,18 @@ public class GateUnavailableDialog {
tvMessage.setGravity(Gravity.CENTER); tvMessage.setGravity(Gravity.CENTER);
tvMessage.setLineSpacing(5, 1.2f); tvMessage.setLineSpacing(5, 1.2f);
// 门状态显示
tvGateStatus = new TextView(context);
tvGateStatus.setTextSize(14);
tvGateStatus.setTextColor(Color.parseColor("#666666"));
tvGateStatus.setGravity(Gravity.CENTER);
tvGateStatus.setPadding(0, 10, 0, 0);
tvGateStatus.setText("门状态:A门-未知, B门-未知"); // 默认状态
// 添加视图到容器 // 添加视图到容器
contentLayout.addView(tvTitle); contentLayout.addView(tvTitle);
contentLayout.addView(tvMessage); contentLayout.addView(tvMessage);
contentLayout.addView(tvGateStatus); // 添加门状态显示
// 设置内容布局参数 // 设置内容布局参数
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
@ -137,8 +146,51 @@ public class GateUnavailableDialog {
} }
/** /**
* 更新弹窗内容
* 如果弹窗正在显示直接更新内容如果没有显示则显示弹窗
* 更新门状态显示
* @param gateAOpen A门是否开启
* @param gateBOpen B门是否开启
* @param udpConnected UDP连接状态
*/
private void updateGateStatusDisplay(boolean gateAOpen, boolean gateBOpen, boolean udpConnected) {
String gateAStatus = gateAOpen ? "开启" : "关闭";
String gateBStatus = gateBOpen ? "开启" : "关闭";
String udpStatus = udpConnected ? "正常" : "异常";
String statusText = "门状态:A门-" + gateAStatus + ", B门-" + gateBStatus + " | UDP-" + udpStatus;
tvGateStatus.setText(statusText);
LogManager.logInfo(TAG, "更新门状态显示: " + statusText);
}
/**
* 更新门状态异常弹窗内容带门状态信息
* @param reason 新的不可用原因
* @param gateAOpen A门是否开启
* @param gateBOpen B门是否开启
* @param udpConnected UDP连接状态
*/
public void updateGateStateError(String reason, boolean gateAOpen, boolean gateBOpen, boolean udpConnected) {
LogManager.logInfo(TAG, "更新门状态异常弹窗内容: " + reason +
", A门: " + (gateAOpen ? "开启" : "关闭") +
", B门: " + (gateBOpen ? "开启" : "关闭") +
", UDP: " + (udpConnected ? "正常" : "异常"));
tvTitle.setText("门禁不可用");
tvMessage.setText(reason);
// 更新门状态显示
updateGateStatusDisplay(gateAOpen, gateBOpen, udpConnected);
// 如果弹窗未显示则显示弹窗
if (!isShowing) {
show();
} else {
LogManager.logInfo(TAG, "弹窗已显示,仅更新内容");
}
}
/**
* 更新门状态异常弹窗内容简化版不显示门状态
* @param reason 新的不可用原因 * @param reason 新的不可用原因
*/ */
public void updateGateStateError(String reason) { public void updateGateStateError(String reason) {
@ -147,6 +199,8 @@ public class GateUnavailableDialog {
tvTitle.setText("门禁不可用"); tvTitle.setText("门禁不可用");
tvMessage.setText(reason); tvMessage.setText(reason);
// 不更新门状态显示保持之前的状态
// 如果弹窗未显示则显示弹窗 // 如果弹窗未显示则显示弹窗
if (!isShowing) { if (!isShowing) {
show(); show();
@ -157,7 +211,6 @@ public class GateUnavailableDialog {
/** /**
* 更新人数异常弹窗内容 * 更新人数异常弹窗内容
* 如果弹窗正在显示直接更新内容如果没有显示则显示弹窗
* @param isLeaveScene 是否为离场场景 * @param isLeaveScene 是否为离场场景
* @param peopleCount 门内人数 * @param peopleCount 门内人数
*/ */
@ -176,6 +229,8 @@ public class GateUnavailableDialog {
tvTitle.setText("门禁不可用"); tvTitle.setText("门禁不可用");
tvMessage.setText(message); tvMessage.setText(message);
// 不更新门状态显示保持之前的状态
// 如果弹窗未显示则显示弹窗 // 如果弹窗未显示则显示弹窗
if (!isShowing) { if (!isShowing) {
show(); show();

29
app/src/main/java/com/ouxuan/oxface/device/GateABController.java

@ -1005,6 +1005,11 @@ public class GateABController {
if (gateStateListener instanceof GateUnavailableListener) { if (gateStateListener instanceof GateUnavailableListener) {
GateUnavailableListener unavailableListener = (GateUnavailableListener) gateStateListener; GateUnavailableListener unavailableListener = (GateUnavailableListener) gateStateListener;
// 先触发门状态实时更新回调用于更新弹窗中的门状态显示
unavailableListener.onGateStatusUpdate(currentGateState.gateAOpen,
currentGateState.gateBOpen,
currentGateState.udpConnected);
// 如果需要显示弹窗触发不可用回调 // 如果需要显示弹窗触发不可用回调
if (finalShouldShowDialog) { if (finalShouldShowDialog) {
unavailableListener.onGateUnavailable(currentGateState.getUnavailableReason()); unavailableListener.onGateUnavailable(currentGateState.getUnavailableReason());
@ -1014,9 +1019,23 @@ public class GateABController {
LogManager.logInfo(TAG, "触发门禁恢复可用回调,隐藏弹窗并恢复摄像头"); LogManager.logInfo(TAG, "触发门禁恢复可用回调,隐藏弹窗并恢复摄像头");
unavailableListener.onGateAvailable(); unavailableListener.onGateAvailable();
} }
// 特别处理如果A门和B门都关闭且有弹窗正在显示应该关闭弹窗
else if (!currentGateState.gateAOpen && !currentGateState.gateBOpen && currentGateState.udpConnected) {
LogManager.logInfo(TAG, "A门和B门都关闭,触发门禁恢复可用回调");
unavailableListener.onGateAvailable();
}
} }
}); });
} }
// 即使状态没有变化也要触发实时状态更新用于更新弹窗显示
else if (gateStateListener instanceof GateUnavailableListener) {
GateUnavailableListener unavailableListener = (GateUnavailableListener) gateStateListener;
syncHandler.post(() -> {
unavailableListener.onGateStatusUpdate(currentGateState.gateAOpen,
currentGateState.gateBOpen,
currentGateState.udpConnected);
});
}
} }
/** /**
@ -1034,6 +1053,16 @@ public class GateABController {
* 门禁恢复可用状态时触发 * 门禁恢复可用状态时触发
*/ */
void onGateAvailable(); void onGateAvailable();
/**
* 门状态实时更新时触发用于更新弹窗中的门状态显示
* @param gateAOpen A门是否开启
* @param gateBOpen B门是否开启
* @param udpConnected UDP连接状态
*/
default void onGateStatusUpdate(boolean gateAOpen, boolean gateBOpen, boolean udpConnected) {
// 默认空实现子类可选择实现
}
} }
} }
Loading…
Cancel
Save