DoubleVerifyActivityHelp.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package com.example.chemical.ui.verify;
  2. import android.content.Intent;
  3. import android.graphics.Bitmap;
  4. import android.util.Log;
  5. import android.view.View;
  6. import android.widget.ImageView;
  7. import android.widget.LinearLayout;
  8. import androidx.core.util.Pair;
  9. import com.blankj.utilcode.util.ConvertUtils;
  10. import com.blankj.utilcode.util.GsonUtils;
  11. import com.blankj.utilcode.util.LogUtils;
  12. import com.blankj.utilcode.util.ResourceUtils;
  13. import com.blankj.utilcode.util.ThreadUtils;
  14. import com.blankj.utilcode.util.ToastUtils;
  15. import com.example.chemical.R;
  16. import com.example.chemical.databinding.ActivityDoubleVerifyBinding;
  17. import com.example.chemical.ui.verify.include.DetectType;
  18. import com.example.chemical.ui.verify.include.FaceDetectView;
  19. import com.example.chemical.utils.AudioPlayer;
  20. import com.google.zxing.BarcodeFormat;
  21. import com.google.zxing.MultiFormatWriter;
  22. import com.google.zxing.WriterException;
  23. import com.google.zxing.common.BitMatrix;
  24. import com.rc.httpcore.HttpConfig;
  25. import com.rc.httpcore.bean.UserValidationBean;
  26. public class DoubleVerifyActivityHelp {
  27. private DoubleVerifyActivity activity;
  28. private ActivityDoubleVerifyBinding binding;
  29. /**
  30. * 验证通过的人信息
  31. */
  32. private UserValidationBean userValidation1, userValidation2;
  33. public DoubleVerifyActivityHelp(DoubleVerifyActivity activity) {
  34. this.activity = activity;
  35. binding = activity.binding;
  36. }
  37. /**
  38. * 切换识别展示
  39. *
  40. * @param faceDetect 类型
  41. * @param isFirst 是否第一位
  42. * @param isShow 是否展示
  43. */
  44. public void switchShowDetect(DetectType faceDetect, boolean isFirst, boolean isShow) {
  45. Pair<Boolean, Boolean> first = activity.doubleVerifyList.get(0);
  46. Pair<Boolean, Boolean> second = activity.doubleVerifyList.get(1);
  47. if (first.first && second.first) {
  48. ToastUtils.showLong("双人认证已通过!");
  49. return;
  50. }
  51. // 切换UI
  52. switchDetectUi(faceDetect, isFirst);
  53. // 是否第一位
  54. if (isFirst) {
  55. if (first.first) {
  56. ToastUtils.showLong("第一位验证已通过!");
  57. return;
  58. }
  59. binding.include1LL.removeAllViewsInLayout();
  60. switch (faceDetect) {
  61. case FACE_DETECT:
  62. if (isShow) {
  63. binding.include1LL.addView(new FaceDetectView(activity, activity, activity.doubleVerifyList, new DoubleVerifyActivity.DoubleVerifyListener() {
  64. @Override
  65. public void detect(DetectType type, Bitmap faceBitmap, UserValidationBean userValidationBean) {
  66. binding.include1LL.removeAllViewsInLayout();
  67. ImageView imageView = new ImageView(activity);
  68. imageView.setImageBitmap(faceBitmap);
  69. binding.include1LL.addView(imageView);
  70. binding.hint1IV.setText("第一位验证已通过");
  71. ToastUtils.showLong("第一位验证已通过");
  72. userValidation1 = userValidationBean;
  73. switchShowDetect(DetectType.FACE_DETECT, false, true);
  74. }
  75. }));
  76. AudioPlayer.getInstance().play(R.raw.diyiren_renlianshibie);
  77. } else {
  78. ImageView imageView = new ImageView(activity);
  79. imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
  80. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
  81. imageView.setBackgroundResource(R.mipmap.icon_face_two);
  82. binding.include1LL.addView(imageView);
  83. }
  84. break;
  85. case CARD_DETECT:
  86. ImageView imageView = new ImageView(activity);
  87. imageView.setBackgroundResource(R.mipmap.img_sfrz_sksyt);
  88. binding.include1LL.addView(imageView);
  89. AudioPlayer.getInstance().play(R.raw.diyiwei_shua_ka_renzheng);
  90. break;
  91. case SCAN_DETECT:
  92. ImageView qrIv = new ImageView(activity);
  93. qrIv.setImageBitmap(ConvertUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.mipmap.qr)));
  94. ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Bitmap>() {
  95. @Override
  96. public Bitmap doInBackground() throws Throwable {
  97. return createQrCode();
  98. }
  99. @Override
  100. public void onSuccess(Bitmap result) {
  101. if (null != result) {
  102. qrIv.setBackground(null);
  103. qrIv.setImageBitmap(result);
  104. }
  105. }
  106. });
  107. binding.include1LL.addView(qrIv);
  108. AudioPlayer.getInstance().play(R.raw.diyiren_saoma);
  109. break;
  110. }
  111. } else {
  112. if (!first.first) {
  113. ToastUtils.showLong("第一位验证未通过!");
  114. return;
  115. }
  116. binding.include2LL.removeAllViewsInLayout();
  117. switch (faceDetect) {
  118. case FACE_DETECT:
  119. if (isShow) {
  120. binding.include2LL.addView(new FaceDetectView(activity, activity, activity.doubleVerifyList, new DoubleVerifyActivity.DoubleVerifyListener() {
  121. @Override
  122. public void detect(DetectType type, Bitmap faceBitmap, UserValidationBean userValidationBean) {
  123. binding.include2LL.removeAllViewsInLayout();
  124. ImageView imageView = new ImageView(activity);
  125. imageView.setImageBitmap(faceBitmap);
  126. binding.include2LL.addView(imageView);
  127. binding.hint2IV.setText("第二位验证已通过");
  128. userValidation2 = userValidationBean;
  129. ToastUtils.showLong("双人认证成功");
  130. AudioPlayer.getInstance().play(R.raw.shuangren_tongguo);
  131. Intent intent = new Intent();
  132. intent.putExtra("userValidation1", GsonUtils.toJson(userValidation1));
  133. intent.putExtra("userValidation2", GsonUtils.toJson(userValidation2));
  134. activity.setResult(TwoPersonActivity.RESULT_OK, intent);
  135. activity.finish();
  136. }
  137. }));
  138. AudioPlayer.getInstance().play(R.raw.dierwei_renlianshibie);
  139. } else {
  140. ImageView imageView = new ImageView(activity);
  141. imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
  142. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
  143. imageView.setBackgroundResource(R.mipmap.icon_face_two);
  144. binding.include2LL.addView(imageView);
  145. }
  146. break;
  147. case CARD_DETECT:
  148. ImageView imageView = new ImageView(activity);
  149. imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
  150. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
  151. imageView.setBackgroundResource(R.mipmap.img_sfrz_sksyt);
  152. binding.include2LL.addView(imageView);
  153. AudioPlayer.getInstance().play(R.raw.dierweishuakarenzheng);
  154. break;
  155. case SCAN_DETECT:
  156. ImageView qrIv = new ImageView(activity);
  157. qrIv.setImageBitmap(ConvertUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.mipmap.qr)));
  158. ThreadUtils.executeByCached(new ThreadUtils.SimpleTask<Bitmap>() {
  159. @Override
  160. public Bitmap doInBackground() throws Throwable {
  161. return createQrCode();
  162. }
  163. @Override
  164. public void onSuccess(Bitmap result) {
  165. if (null != result) {
  166. qrIv.setBackground(null);
  167. qrIv.setImageBitmap(result);
  168. }
  169. }
  170. });
  171. binding.include2LL.addView(qrIv);
  172. AudioPlayer.getInstance().play(R.raw.dierren_saoma);
  173. break;
  174. }
  175. }
  176. }
  177. private void switchDetectUi(DetectType detectType, boolean isFirst) {
  178. if (isFirst) {
  179. switch (detectType) {
  180. case FACE_DETECT:
  181. binding.face1IB.setVisibility(View.GONE);
  182. binding.scan1IB.setVisibility(View.VISIBLE);
  183. binding.card1IB.setVisibility(View.VISIBLE);
  184. binding.hint1IV.setText("请第一位人脸验证");
  185. binding.hintBottom1IV.setText("请正对屏幕并使脸位于取景框内");
  186. break;
  187. case CARD_DETECT:
  188. binding.face1IB.setVisibility(View.VISIBLE);
  189. binding.scan1IB.setVisibility(View.VISIBLE);
  190. binding.card1IB.setVisibility(View.GONE);
  191. binding.hint1IV.setText("请第一位刷卡验证");
  192. binding.hintBottom1IV.setText("请在刷卡区域进行刷卡验证");
  193. break;
  194. case SCAN_DETECT:
  195. binding.face1IB.setVisibility(View.VISIBLE);
  196. binding.scan1IB.setVisibility(View.GONE);
  197. binding.card1IB.setVisibility(View.VISIBLE);
  198. binding.hint1IV.setText("请第一位扫码验证");
  199. binding.hintBottom1IV.setText("请打开微信扫描屏幕二维码");
  200. break;
  201. }
  202. } else {
  203. switch (detectType) {
  204. case FACE_DETECT:
  205. binding.face2IB.setVisibility(View.GONE);
  206. binding.scan2IB.setVisibility(View.VISIBLE);
  207. binding.card2IB.setVisibility(View.VISIBLE);
  208. binding.hint2IV.setText("请第二位人脸验证");
  209. binding.hintBottom2IV.setText("请正对屏幕并使脸位于取景框内");
  210. break;
  211. case CARD_DETECT:
  212. binding.face2IB.setVisibility(View.VISIBLE);
  213. binding.scan2IB.setVisibility(View.VISIBLE);
  214. binding.card2IB.setVisibility(View.GONE);
  215. binding.hint2IV.setText("请第二位刷卡验证");
  216. binding.hintBottom2IV.setText("请在刷卡区域进行刷卡验证");
  217. break;
  218. case SCAN_DETECT:
  219. binding.face2IB.setVisibility(View.VISIBLE);
  220. binding.scan2IB.setVisibility(View.GONE);
  221. binding.card2IB.setVisibility(View.VISIBLE);
  222. binding.hint2IV.setText("请第二位扫码验证");
  223. binding.hintBottom2IV.setText("请打开微信扫描屏幕二维码");
  224. break;
  225. }
  226. }
  227. }
  228. private Bitmap createQrCode() {
  229. BitMatrix bitMatrix;
  230. try {
  231. bitMatrix = new MultiFormatWriter().encode(HttpConfig.Companion.getAPI_BASE_QC_URL(), BarcodeFormat.QR_CODE, 400, 400);
  232. } catch (WriterException e) {
  233. LogUtils.e(Log.getStackTraceString(e));
  234. return null;
  235. }
  236. Bitmap bitmap = Bitmap.createBitmap(bitMatrix.getWidth(), bitMatrix.getHeight(), Bitmap.Config.ARGB_8888);
  237. for (int x = 0; x < bitMatrix.getWidth(); x++) {
  238. for (int y = 0; y < bitMatrix.getHeight(); y++) {
  239. bitmap.setPixel(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
  240. }
  241. }
  242. return bitmap;
  243. }
  244. }