package com.example.chemical.ui.verify; import android.content.Intent; import android.graphics.Bitmap; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.core.util.Pair; import com.blankj.utilcode.util.ConvertUtils; import com.blankj.utilcode.util.GsonUtils; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.ResourceUtils; import com.blankj.utilcode.util.ThreadUtils; import com.blankj.utilcode.util.ToastUtils; import com.example.chemical.R; import com.example.chemical.databinding.ActivityDoubleVerifyBinding; import com.example.chemical.ui.verify.include.DetectType; import com.example.chemical.ui.verify.include.FaceDetectView; import com.example.chemical.utils.AudioPlayer; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.rc.httpcore.HttpConfig; import com.rc.httpcore.bean.UserValidationBean; public class DoubleVerifyActivityHelp { private DoubleVerifyActivity activity; private ActivityDoubleVerifyBinding binding; /** * 验证通过的人信息 */ private UserValidationBean userValidation1, userValidation2; public DoubleVerifyActivityHelp(DoubleVerifyActivity activity) { this.activity = activity; binding = activity.binding; } /** * 切换识别展示 * * @param faceDetect 类型 * @param isFirst 是否第一位 * @param isShow 是否展示 */ public void switchShowDetect(DetectType faceDetect, boolean isFirst, boolean isShow) { Pair first = activity.doubleVerifyList.get(0); Pair second = activity.doubleVerifyList.get(1); if (first.first && second.first) { ToastUtils.showLong("双人认证已通过!"); return; } // 切换UI switchDetectUi(faceDetect, isFirst); // 是否第一位 if (isFirst) { if (first.first) { ToastUtils.showLong("第一位验证已通过!"); return; } binding.include1LL.removeAllViewsInLayout(); switch (faceDetect) { case FACE_DETECT: if (isShow) { binding.include1LL.addView(new FaceDetectView(activity, activity, activity.doubleVerifyList, new DoubleVerifyActivity.DoubleVerifyListener() { @Override public void detect(DetectType type, Bitmap faceBitmap, UserValidationBean userValidationBean) { binding.include1LL.removeAllViewsInLayout(); ImageView imageView = new ImageView(activity); imageView.setImageBitmap(faceBitmap); binding.include1LL.addView(imageView); binding.hint1IV.setText("第一位验证已通过"); ToastUtils.showLong("第一位验证已通过"); userValidation1 = userValidationBean; switchShowDetect(DetectType.FACE_DETECT, false, true); } })); AudioPlayer.getInstance().play(R.raw.diyiren_renlianshibie); } else { ImageView imageView = new ImageView(activity); imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setBackgroundResource(R.mipmap.icon_face_two); binding.include1LL.addView(imageView); } break; case CARD_DETECT: ImageView imageView = new ImageView(activity); imageView.setBackgroundResource(R.mipmap.img_sfrz_sksyt); binding.include1LL.addView(imageView); AudioPlayer.getInstance().play(R.raw.diyiwei_shua_ka_renzheng); break; case SCAN_DETECT: ImageView qrIv = new ImageView(activity); qrIv.setImageBitmap(ConvertUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.mipmap.qr))); ThreadUtils.executeByCached(new ThreadUtils.SimpleTask() { @Override public Bitmap doInBackground() throws Throwable { return createQrCode(); } @Override public void onSuccess(Bitmap result) { if (null != result) { qrIv.setBackground(null); qrIv.setImageBitmap(result); } } }); binding.include1LL.addView(qrIv); AudioPlayer.getInstance().play(R.raw.diyiren_saoma); break; } } else { if (!first.first) { ToastUtils.showLong("第一位验证未通过!"); return; } binding.include2LL.removeAllViewsInLayout(); switch (faceDetect) { case FACE_DETECT: if (isShow) { binding.include2LL.addView(new FaceDetectView(activity, activity, activity.doubleVerifyList, new DoubleVerifyActivity.DoubleVerifyListener() { @Override public void detect(DetectType type, Bitmap faceBitmap, UserValidationBean userValidationBean) { binding.include2LL.removeAllViewsInLayout(); ImageView imageView = new ImageView(activity); imageView.setImageBitmap(faceBitmap); binding.include2LL.addView(imageView); binding.hint2IV.setText("第二位验证已通过"); userValidation2 = userValidationBean; ToastUtils.showLong("双人认证成功"); AudioPlayer.getInstance().play(R.raw.shuangren_tongguo); Intent intent = new Intent(); intent.putExtra("userValidation1", GsonUtils.toJson(userValidation1)); intent.putExtra("userValidation2", GsonUtils.toJson(userValidation2)); activity.setResult(TwoPersonActivity.RESULT_OK, intent); activity.finish(); } })); AudioPlayer.getInstance().play(R.raw.dierwei_renlianshibie); } else { ImageView imageView = new ImageView(activity); imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setBackgroundResource(R.mipmap.icon_face_two); binding.include2LL.addView(imageView); } break; case CARD_DETECT: ImageView imageView = new ImageView(activity); imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setBackgroundResource(R.mipmap.img_sfrz_sksyt); binding.include2LL.addView(imageView); AudioPlayer.getInstance().play(R.raw.dierweishuakarenzheng); break; case SCAN_DETECT: ImageView qrIv = new ImageView(activity); qrIv.setImageBitmap(ConvertUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.mipmap.qr))); ThreadUtils.executeByCached(new ThreadUtils.SimpleTask() { @Override public Bitmap doInBackground() throws Throwable { return createQrCode(); } @Override public void onSuccess(Bitmap result) { if (null != result) { qrIv.setBackground(null); qrIv.setImageBitmap(result); } } }); binding.include2LL.addView(qrIv); AudioPlayer.getInstance().play(R.raw.dierren_saoma); break; } } } private void switchDetectUi(DetectType detectType, boolean isFirst) { if (isFirst) { switch (detectType) { case FACE_DETECT: binding.face1IB.setVisibility(View.GONE); binding.scan1IB.setVisibility(View.VISIBLE); binding.card1IB.setVisibility(View.VISIBLE); binding.hint1IV.setText("请第一位人脸验证"); binding.hintBottom1IV.setText("请正对屏幕并使脸位于取景框内"); break; case CARD_DETECT: binding.face1IB.setVisibility(View.VISIBLE); binding.scan1IB.setVisibility(View.VISIBLE); binding.card1IB.setVisibility(View.GONE); binding.hint1IV.setText("请第一位刷卡验证"); binding.hintBottom1IV.setText("请在刷卡区域进行刷卡验证"); break; case SCAN_DETECT: binding.face1IB.setVisibility(View.VISIBLE); binding.scan1IB.setVisibility(View.GONE); binding.card1IB.setVisibility(View.VISIBLE); binding.hint1IV.setText("请第一位扫码验证"); binding.hintBottom1IV.setText("请打开微信扫描屏幕二维码"); break; } } else { switch (detectType) { case FACE_DETECT: binding.face2IB.setVisibility(View.GONE); binding.scan2IB.setVisibility(View.VISIBLE); binding.card2IB.setVisibility(View.VISIBLE); binding.hint2IV.setText("请第二位人脸验证"); binding.hintBottom2IV.setText("请正对屏幕并使脸位于取景框内"); break; case CARD_DETECT: binding.face2IB.setVisibility(View.VISIBLE); binding.scan2IB.setVisibility(View.VISIBLE); binding.card2IB.setVisibility(View.GONE); binding.hint2IV.setText("请第二位刷卡验证"); binding.hintBottom2IV.setText("请在刷卡区域进行刷卡验证"); break; case SCAN_DETECT: binding.face2IB.setVisibility(View.VISIBLE); binding.scan2IB.setVisibility(View.GONE); binding.card2IB.setVisibility(View.VISIBLE); binding.hint2IV.setText("请第二位扫码验证"); binding.hintBottom2IV.setText("请打开微信扫描屏幕二维码"); break; } } } private Bitmap createQrCode() { BitMatrix bitMatrix; try { bitMatrix = new MultiFormatWriter().encode(HttpConfig.Companion.getAPI_BASE_QC_URL(), BarcodeFormat.QR_CODE, 400, 400); } catch (WriterException e) { LogUtils.e(Log.getStackTraceString(e)); return null; } Bitmap bitmap = Bitmap.createBitmap(bitMatrix.getWidth(), bitMatrix.getHeight(), Bitmap.Config.ARGB_8888); for (int x = 0; x < bitMatrix.getWidth(); x++) { for (int y = 0; y < bitMatrix.getHeight(); y++) { bitmap.setPixel(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } return bitmap; } }