|
@@ -1,42 +1,41 @@
|
|
|
-package com.cooleshow.base.ui.activity.scan;
|
|
|
+package com.cooleshow.usercenter.ui.activity.scan;
|
|
|
|
|
|
import android.Manifest;
|
|
|
-import android.content.ContentResolver;
|
|
|
+import android.content.DialogInterface;
|
|
|
import android.content.Intent;
|
|
|
-import android.graphics.Bitmap;
|
|
|
-import android.graphics.Color;
|
|
|
-import android.net.Uri;
|
|
|
-import android.provider.MediaStore;
|
|
|
import android.text.TextUtils;
|
|
|
import android.view.View;
|
|
|
-import android.widget.TextView;
|
|
|
|
|
|
import com.alibaba.android.arouter.facade.annotation.Route;
|
|
|
import com.alibaba.android.arouter.launcher.ARouter;
|
|
|
import com.cooleshow.base.R;
|
|
|
import com.cooleshow.base.common.WebConstants;
|
|
|
-import com.cooleshow.base.constanst.ScanContract;
|
|
|
-import com.cooleshow.base.databinding.ActivityScanLayoutBinding;
|
|
|
-import com.cooleshow.base.presenter.ScanPresenter;
|
|
|
+import com.cooleshow.base.constanst.Constants;
|
|
|
+import com.cooleshow.base.data.net.ApiException;
|
|
|
+import com.cooleshow.usercenter.presenter.contract.ScanContract;
|
|
|
+import com.cooleshow.usercenter.presenter.ScanPresenter;
|
|
|
import com.cooleshow.base.router.RouterPath;
|
|
|
import com.cooleshow.base.ui.activity.BaseMVPActivity;
|
|
|
+import com.cooleshow.base.utils.GsonUtils;
|
|
|
+import com.cooleshow.base.utils.IntentUtils;
|
|
|
import com.cooleshow.base.utils.LOG;
|
|
|
-import com.cooleshow.base.utils.LogUtils;
|
|
|
-import com.cooleshow.base.utils.PermissionUtils;
|
|
|
import com.cooleshow.base.utils.ThreadUtils;
|
|
|
import com.cooleshow.base.utils.ToastUtil;
|
|
|
import com.cooleshow.base.utils.UiUtils;
|
|
|
+import com.cooleshow.base.utils.UrlUtils;
|
|
|
import com.cooleshow.base.utils.helper.GlideEngine;
|
|
|
import com.cooleshow.base.utils.helper.PermissionTipHelper;
|
|
|
-import com.cooleshow.base.widgets.DialogUtil;
|
|
|
+import com.cooleshow.usercenter.bean.QrcodeDataBean;
|
|
|
+import com.cooleshow.usercenter.constants.QrCodeResultType;
|
|
|
+import com.cooleshow.usercenter.constants.QrCodeType;
|
|
|
+import com.cooleshow.usercenter.databinding.ActivityScanLayoutBinding;
|
|
|
+import com.cooleshow.usercenter.widget.dialog.ScanResultTipDialog;
|
|
|
import com.luck.picture.lib.PictureSelector;
|
|
|
import com.luck.picture.lib.config.PictureConfig;
|
|
|
import com.luck.picture.lib.config.PictureMimeType;
|
|
|
import com.luck.picture.lib.entity.LocalMedia;
|
|
|
-import com.luck.picture.lib.tools.PictureFileUtils;
|
|
|
import com.tbruyelle.rxpermissions3.RxPermissions;
|
|
|
|
|
|
-import java.io.File;
|
|
|
import java.util.List;
|
|
|
|
|
|
import androidx.annotation.Nullable;
|
|
@@ -45,7 +44,7 @@ import cn.bingoogolapple.qrcode.core.QRCodeView;
|
|
|
/**
|
|
|
* Author by pq, Date on 2022/7/11.
|
|
|
*/
|
|
|
-@Route(path = RouterPath.BaseCenter.SCAN_QR_CODE)
|
|
|
+@Route(path = RouterPath.UserCenter.SCAN_QR_CODE)
|
|
|
public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, ScanPresenter> implements ScanContract.ScanView, View.OnClickListener {
|
|
|
public static final int SELECT_IMG_REQUEST_CODE = 1001;
|
|
|
|
|
@@ -82,8 +81,7 @@ public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, Sca
|
|
|
LOG.i("pq", "解析成功:" + result);
|
|
|
parseResult(result);
|
|
|
} else {
|
|
|
- sendResetMsg();
|
|
|
- ToastUtil.getInstance().showShort("解析失败");
|
|
|
+ goErrorPage();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -125,16 +123,43 @@ public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, Sca
|
|
|
if (TextUtils.isEmpty(result)) {
|
|
|
return;
|
|
|
}
|
|
|
- if (!checkUrlIsEnable(result)) {
|
|
|
- sendResetMsg();
|
|
|
- ToastUtil.getInstance().showShort("请扫描酷乐秀二维码");
|
|
|
- return;
|
|
|
+ boolean isValidUrl = UrlUtils.isValidUrl(result);
|
|
|
+ if (isValidUrl) {
|
|
|
+ if (checkUrlIsEnable(result)) {
|
|
|
+ ARouter.getInstance()
|
|
|
+ .build(RouterPath.WebCenter.ACTIVITY_HTML)
|
|
|
+ .withString(WebConstants.WEB_URL, result)
|
|
|
+ .navigation();
|
|
|
+ finish();
|
|
|
+ }else{
|
|
|
+ showScanResultTipDialog(result);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ QrcodeDataBean qrcodeDataBean = parseIntent(result);
|
|
|
+ if (qrcodeDataBean != null) {
|
|
|
+ if (TextUtils.equals(qrcodeDataBean.getType(), QrCodeType.AUTH_LOGIN.getId())) {
|
|
|
+ presenter.notifyScan(qrcodeDataBean.getUuid());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ToastUtil.getInstance().showShort("当前版本无法识别该二维码");
|
|
|
+ } else {
|
|
|
+ ARouter.getInstance().build(RouterPath.UserCenter.SCAN_QR_AUTH_RESULT_CODE)
|
|
|
+ .withSerializable(Constants.COMMON_EXTRA_KEY, QrCodeResultType.CODE_ERROR).navigation();
|
|
|
+ finish();
|
|
|
+ }
|
|
|
}
|
|
|
- ARouter.getInstance()
|
|
|
- .build(RouterPath.WebCenter.ACTIVITY_HTML)
|
|
|
- .withString(WebConstants.WEB_URL, result)
|
|
|
- .navigation();
|
|
|
- finish();
|
|
|
+ }
|
|
|
+
|
|
|
+ private QrcodeDataBean parseIntent(String result) {
|
|
|
+ try {
|
|
|
+ QrcodeDataBean qrcodeDataBean = GsonUtils.fromJson(result, QrcodeDataBean.class);
|
|
|
+ if (qrcodeDataBean != null && !TextUtils.isEmpty(qrcodeDataBean.getType()) && !TextUtils.isEmpty(qrcodeDataBean.getUuid())) {
|
|
|
+ return qrcodeDataBean;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
private void sendResetMsg() {
|
|
@@ -142,6 +167,33 @@ public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, Sca
|
|
|
}
|
|
|
|
|
|
|
|
|
+ private void showScanResultTipDialog(String url) {
|
|
|
+ String tipResult = "下个页面不受我们控制哦,使用时请注意安全\n" + url;
|
|
|
+ ScanResultTipDialog scanResultTipDialog = new ScanResultTipDialog(this);
|
|
|
+ scanResultTipDialog.show();
|
|
|
+ scanResultTipDialog.setContent(tipResult);
|
|
|
+ scanResultTipDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
|
|
+ @Override
|
|
|
+ public void onDismiss(DialogInterface dialog) {
|
|
|
+ reset();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ scanResultTipDialog.setOnCancelClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ scanResultTipDialog.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ scanResultTipDialog.setOnConfirmClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ scanResultTipDialog.dismiss();
|
|
|
+ IntentUtils.openByBrowser(ScanActivity.this, url);
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void onClick(View v) {
|
|
|
int id = v.getId();
|
|
@@ -166,6 +218,12 @@ public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, Sca
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private void goErrorPage() {
|
|
|
+ ARouter.getInstance().build(RouterPath.UserCenter.SCAN_QR_AUTH_RESULT_CODE)
|
|
|
+ .withSerializable(Constants.COMMON_EXTRA_KEY, QrCodeResultType.CODE_ERROR).navigation();
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+
|
|
|
private void addPermissions() {
|
|
|
String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
|
|
|
PermissionTipHelper.getInstance().showTipDialog(this, permissions);
|
|
@@ -230,4 +288,34 @@ public class ScanActivity extends BaseMVPActivity<ActivityScanLayoutBinding, Sca
|
|
|
super.onDestroy();
|
|
|
ThreadUtils.getMainHandler().removeCallbacks(mRunnable);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void notifyScanSuccess(String uuid) {
|
|
|
+ if (!checkActivityExist()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ARouter.getInstance().build(RouterPath.UserCenter.MINE_CONFIRM_SCAN_LOGIN_PAGE)
|
|
|
+ .withString(Constants.COMMON_EXTRA_KEY, uuid).navigation();
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void notifyScanError(Throwable e) {
|
|
|
+ if (!checkActivityExist()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ reset();
|
|
|
+ if (e instanceof ApiException) {
|
|
|
+ ApiException apiException = (ApiException) e;
|
|
|
+ int errcode = apiException.getErrcode();
|
|
|
+ if (errcode == 5440) {
|
|
|
+ ARouter.getInstance().build(RouterPath.UserCenter.SCAN_QR_AUTH_RESULT_CODE)
|
|
|
+ .withString(Constants.COMMON_EXTRA_KEY, "授权登录")
|
|
|
+ .withSerializable(Constants.COMMON_EXTRA_KEY, QrCodeResultType.CODE_EXPIRED).navigation();
|
|
|
+ finish();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ super.onError(e);
|
|
|
+ }
|
|
|
}
|