From 047921f9597fd5ac3b006aa11d3fc52e4340ce80 Mon Sep 17 00:00:00 2001 From: MTing Date: Mon, 8 Sep 2025 14:43:00 +0800 Subject: [PATCH] add OrderVerificationResultActivity --- app/src/main/AndroidManifest.xml | 6 + .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 51 +++++- .../orderOX/OrderVerificationResultActivity.java | 180 ++++++++++++++++++++ .../layout/activity_order_verification_result.xml | 185 +++++++++++++++++++++ 4 files changed, 421 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/ouxuan/oxface/orderOX/OrderVerificationResultActivity.java create mode 100644 app/src/main/res/layout/activity_order_verification_result.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 56e4ec8..cb243b6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,6 +120,12 @@ android:name=".orderOX.VerificationCodeActivity" android:exported="false" android:theme="@style/Theme.Transparent" /> + + + \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 2541405..70b4b52 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -40,6 +40,7 @@ import com.baidu.idl.face.main.finance.utils.TestPopWindow; import com.baidu.idl.main.facesdk.FaceInfo; import com.baidu.idl.main.facesdk.model.BDFaceImageInstance; import com.ouxuan.oxface.data.DeviceSelectDataManager; +import com.ouxuan.oxface.orderOX.OrderVerificationResultActivity; import com.ouxuan.oxface.orderOX.VerificationCodeActivity; import com.ouxuan.oxface.utils.LogManager; @@ -178,6 +179,9 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi loginDataManager = com.ouxuan.oxface.data.LoginDataManager.getInstance(this); initView(); + // 初始化并注册广播接收器 + initCameraControlReceiver(); + // 初始化人脸检测状态 lastFaceDetectedTime = System.currentTimeMillis(); isFaceDetected = false; @@ -823,6 +827,14 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi LogManager.logInfo(TAG, "用户点击扫码器开门"); Toast.makeText(this, "扫码器开门功能已触发", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(this, OrderVerificationResultActivity.class); + intent.putExtra("verification_type", 1); // 1-验证码验证, 4-扫码器验证 + intent.putExtra("order_no", "订单号"); + intent.putExtra("verification_code", "验证码"); + intent.putExtra("order_type", "订单类型"); + intent.putExtra("card_no", "卡号"); + intent.putExtra("status", "核销状态"); + startActivity(intent); // 这里可以添加实际的扫码器开门逻辑 // 例如:启动扫码器Activity或显示扫码器界面 @@ -862,7 +874,13 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi @Override protected void onDestroy() { super.onDestroy(); - + + // 注销广播接收器 + if (cameraControlReceiver != null) { + unregisterReceiver(cameraControlReceiver); + LogManager.logInfo(TAG, "摄像头控制广播接收器已注销"); + } + // 停止摄像头预览 if (CameraPreviewManager.getInstance() != null) { CameraPreviewManager.getInstance().stopPreview(); @@ -1790,4 +1808,35 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } }); } + + /** + * 初始化摄像头控制广播接收器 + */ + private void initCameraControlReceiver() { + cameraControlReceiver = new CameraControlReceiver(); + IntentFilter filter = new IntentFilter(); + filter.addAction("com.ouxuan.oxface.ACTION_PAUSE_CAMERA"); + filter.addAction("com.ouxuan.oxface.ACTION_RESUME_CAMERA"); + registerReceiver(cameraControlReceiver, filter); + LogManager.logInfo(TAG, "摄像头控制广播接收器已注册"); + } + + /** + * 摄像头控制广播接收器 + */ + private class CameraControlReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if ("com.ouxuan.oxface.ACTION_PAUSE_CAMERA".equals(action)) { + // 暂停摄像头预览 + isNeedCamera = false; + LogManager.logInfo(TAG, "接收到暂停摄像头预览广播 - isNeedCamera设置为false"); + } else if ("com.ouxuan.oxface.ACTION_RESUME_CAMERA".equals(action)) { + // 恢复摄像头预览 + isNeedCamera = true; + LogManager.logInfo(TAG, "接收到恢复摄像头预览广播 - isNeedCamera设置为true"); + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/ouxuan/oxface/orderOX/OrderVerificationResultActivity.java b/app/src/main/java/com/ouxuan/oxface/orderOX/OrderVerificationResultActivity.java new file mode 100644 index 0000000..fba5b61 --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/orderOX/OrderVerificationResultActivity.java @@ -0,0 +1,180 @@ +package com.ouxuan.oxface.orderOX; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.ouxuan.oxface.R; +import com.ouxuan.oxface.utils.LogManager; + +/** + * 订单核销结果Activity + * 提供一个覆盖在视频流上的弹窗界面,用于显示订单核销结果 + */ +public class OrderVerificationResultActivity extends AppCompatActivity { + + private static final String TAG = "OrderVerificationResultActivity"; + + private ImageButton btnClose; + private Button btnConfirm; + private TextView tvTitle, tvOrderNo, tvVerificationCode, tvOrderType, tvCardNo, tvStatus; + private String orderNo, verificationCode, orderType, cardNo, status; + private int verificationType; // 1-验证码验证, 4-扫码器验证 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // 设置无标题栏 + requestWindowFeature(Window.FEATURE_NO_TITLE); + + // 设置背景透明,实现弹窗效果 + getWindow().setBackgroundDrawableResource(android.R.color.transparent); + + setContentView(R.layout.activity_order_verification_result); + + // 设置窗口属性 + Window window = getWindow(); + window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); + window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + + initViews(); + getIntentData(); + updateUI(); + setupListeners(); + + // 暂停摄像头预览 + pauseCameraPreview(); + + LogManager.logInfo(TAG, "订单核销结果Activity启动成功"); + } + + private void initViews() { + // 初始化按钮 + btnClose = findViewById(R.id.btn_close_result); + btnConfirm = findViewById(R.id.btn_confirm_result); + + // 初始化文本视图 + tvTitle = findViewById(R.id.tv_result_title); + tvOrderNo = findViewById(R.id.tv_order_no); + tvVerificationCode = findViewById(R.id.tv_verification_code); + tvOrderType = findViewById(R.id.tv_order_type); + tvCardNo = findViewById(R.id.tv_card_no); + tvStatus = findViewById(R.id.tv_status); + } + + private void getIntentData() { + Intent intent = getIntent(); + if (intent != null) { + verificationType = intent.getIntExtra("verification_type", 1); + orderNo = intent.getStringExtra("order_no"); + verificationCode = intent.getStringExtra("verification_code"); + orderType = intent.getStringExtra("order_type"); + cardNo = intent.getStringExtra("card_no"); + status = intent.getStringExtra("status"); + } + + // 设置默认值 + if (orderNo == null) orderNo = ""; + if (verificationCode == null) verificationCode = ""; + if (orderType == null) orderType = ""; + if (cardNo == null) cardNo = ""; + if (status == null) status = "核销成功"; + } + + private void updateUI() { + // 根据验证类型设置标题 + if (verificationType == 1) { + tvTitle.setText("验证码核销结果"); + } else if (verificationType == 4) { + tvTitle.setText("扫码器核销结果"); + } else { + tvTitle.setText("订单核销结果"); + } + + // 更新UI内容 + tvOrderNo.setText(orderNo); + tvVerificationCode.setText(verificationCode); + tvOrderType.setText(orderType); + tvCardNo.setText(cardNo); + tvStatus.setText(status); + } + + private void setupListeners() { + // 确认按钮 + btnConfirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + handleConfirm(); + } + }); + + // 关闭按钮 + btnClose.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + private void handleConfirm() { + LogManager.logInfo(TAG, "用户确认订单核销结果"); + Toast.makeText(this, "订单核销完成", Toast.LENGTH_SHORT).show(); + finish(); + } + + /** + * 暂停摄像头预览 + * 通过发送广播通知OXFaceOnlineActivity暂停摄像头预览 + */ + private void pauseCameraPreview() { + try { + // 发送广播通知OXFaceOnlineActivity暂停摄像头预览 + Intent intent = new Intent("com.ouxuan.oxface.ACTION_PAUSE_CAMERA"); + sendBroadcast(intent); + LogManager.logInfo(TAG, "已发送暂停摄像头预览广播"); + } catch (Exception e) { + LogManager.logError(TAG, "发送暂停摄像头预览广播失败", e); + } + } + + /** + * 恢复摄像头预览 + * 通过发送广播通知OXFaceOnlineActivity恢复摄像头预览 + */ + private void resumeCameraPreview() { + try { + // 发送广播通知OXFaceOnlineActivity恢复摄像头预览 + Intent intent = new Intent("com.ouxuan.oxface.ACTION_RESUME_CAMERA"); + sendBroadcast(intent); + LogManager.logInfo(TAG, "已发送恢复摄像头预览广播"); + } catch (Exception e) { + LogManager.logError(TAG, "发送恢复摄像头预览广播失败", e); + } + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + // 恢复摄像头预览 + resumeCameraPreview(); + finish(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + // 恢复摄像头预览 + resumeCameraPreview(); + LogManager.logInfo(TAG, "订单核销结果Activity已销毁"); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_order_verification_result.xml b/app/src/main/res/layout/activity_order_verification_result.xml new file mode 100644 index 0000000..130e6a2 --- /dev/null +++ b/app/src/main/res/layout/activity_order_verification_result.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +