From 4d4d2c91e2eec95ea593a2551665dfbb142f9c7e Mon Sep 17 00:00:00 2001 From: juntao Date: Thu, 16 Dec 2021 17:31:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9B=BD=E5=AE=B6=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E7=B3=BB=E7=BB=9F=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20https://git.shanqu.cc/pm/halo-app-issues/-/issues/1645?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/DialogHelper.kt | 19 +++++++ .../java/com/gh/common/util/NewLogUtils.kt | 2 +- .../fragment/user/RealNameInfoFragment.kt | 52 ++++++++++++++---- .../fragment/user/RealNameInfoViewModel.kt | 25 +++++++-- .../drawable-xxxhdpi/spinner_progress.webp | Bin 0 -> 2346 bytes .../main/res/drawable/progressbar_gray.xml | 11 ++++ app/src/main/res/layout/dialog_progress.xml | 28 ++++++++++ app/src/main/res/values/styles.xml | 4 ++ 8 files changed, 123 insertions(+), 18 deletions(-) create mode 100644 app/src/main/res/drawable-xxxhdpi/spinner_progress.webp create mode 100644 app/src/main/res/drawable/progressbar_gray.xml create mode 100644 app/src/main/res/layout/dialog_progress.xml diff --git a/app/src/main/java/com/gh/common/util/DialogHelper.kt b/app/src/main/java/com/gh/common/util/DialogHelper.kt index b121dfc650..2ae19d4bf3 100644 --- a/app/src/main/java/com/gh/common/util/DialogHelper.kt +++ b/app/src/main/java/com/gh/common/util/DialogHelper.kt @@ -16,6 +16,8 @@ import com.gh.common.util.DialogUtils.checkDialogContext import com.gh.gamecenter.AboutActivity import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogAlertDefaultBinding +import com.gh.gamecenter.databinding.DialogProgressBinding +import splitties.systemservices.layoutInflater object DialogHelper { @@ -162,6 +164,23 @@ object DialogHelper { ) } + @JvmStatic + fun getProgressDialog( + context: Context, + content: String, + uiModificationCallback: ((binding: DialogProgressBinding) -> Unit)? = null + ): Dialog { + val dialog = Dialog(context) + val binding = DialogProgressBinding.inflate(context.layoutInflater) + binding.contentTv.text = content + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) + dialog.setContentView(binding.root) + dialog.setCanceledOnTouchOutside(false) + uiModificationCallback?.invoke(binding) + dialog.show() + return dialog + } + @JvmStatic fun showSignatureConflictDialog(context: Context, confirmClickCallback: (() -> Unit)? = null) { diff --git a/app/src/main/java/com/gh/common/util/NewLogUtils.kt b/app/src/main/java/com/gh/common/util/NewLogUtils.kt index 1ceb71e44b..f06869800a 100644 --- a/app/src/main/java/com/gh/common/util/NewLogUtils.kt +++ b/app/src/main/java/com/gh/common/util/NewLogUtils.kt @@ -88,7 +88,7 @@ object NewLogUtils { /** * 记录实名认证结果 - * @param result 0 失败, 1 成功但未成年 2 成功且成年 + * @param result 0 失败, 1 成功但未成年 2 成功且成年 3 认证中 */ fun logCertificationResult(isForced: Boolean, result: Int) { val json = json { diff --git a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt index 6a835081c7..2bb8613095 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt +++ b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoFragment.kt @@ -1,10 +1,12 @@ package com.halo.assistant.fragment.user import android.app.Activity +import android.app.Dialog import android.content.Intent import android.os.Bundle import android.text.InputType import android.text.TextUtils +import android.view.Gravity import android.view.View import androidx.constraintlayout.widget.ConstraintSet import androidx.core.widget.doOnTextChanged @@ -24,6 +26,7 @@ class RealNameInfoFragment : NormalFragment() { private var mHasBackdoor: Boolean = false // 是否留有不实名完成也自动开始下载的后门 private var mIsForcedToCertificate: Boolean = false private val mViewModel: RealNameInfoViewModel by viewModels() + private var mProgressDialog: Dialog? = null private val mBinding: FragmentRealNameBinding by lazy { FragmentRealNameBinding.inflate( @@ -48,12 +51,39 @@ class RealNameInfoFragment : NormalFragment() { if (mIsForcedToCertificate || !isRealNameInfoExist()) { initEditingView() - mViewModel.certificateResultLiveData.observeNonNull(viewLifecycleOwner) { - requireActivity().setResult( - Activity.RESULT_OK, - Intent().putExtra(UserInfoEditFragment.AUTH_SUCCESS, true) - ) - requireActivity().finish() + mViewModel.certificateResultLiveData.observeNonNull(viewLifecycleOwner) { status -> + if (status == RealNameInfoViewModel.RESULT_SUCCESS) { + requireActivity().setResult( + Activity.RESULT_OK, + Intent().putExtra(UserInfoEditFragment.AUTH_SUCCESS, true) + ) + requireActivity().finish() + } else if (status == RealNameInfoViewModel.RESULT_PROGRESSING) { + DialogHelper.showDialog(requireContext(), + title = "提示", + content = "系统繁忙,请稍后再试", + confirmText = "前往人工审核", + cancelText = "确定", + confirmClickCallback = { + startActivity( + ShellActivity.getIntent( + requireContext(), + ShellActivity.Type.MANUALLY_REAL_NAME, + Bundle().apply { + putString(EntranceUtils.KEY_NAME, nameEt.text.toString()) + putString(EntranceUtils.KEY_ID, idCardEt.text.toString()) + } + ) + ) + requireActivity().finish() + }, + uiModificationCallback = { + it.titleTv.gravity = Gravity.CENTER + it.contentTv.gravity = Gravity.CENTER + } + ) + } + mProgressDialog?.dismiss() } } else { initDisplayOnlyView() @@ -210,6 +240,10 @@ class RealNameInfoFragment : NormalFragment() { o.put("id", mBinding.idCardEt.text.toString()) o.put("name", mBinding.nameEt.text.toString()) mViewModel.postCertification(o.toString(), mIsForcedToCertificate) + mProgressDialog = DialogHelper.getProgressDialog(requireContext(), "提交中") + .apply { + show() + } } } else { mBinding.submitBtn.alpha = 0.4F @@ -227,12 +261,6 @@ class RealNameInfoFragment : NormalFragment() { if (idCard.length < 18) { return Pair(false, "必须使用18位的身份证号码") } - val idCardRegex = - Regex("^[1-9]\\d{5}([1-9]\\d{3})(0\\d|1[0-2])([0-2]\\d|3[0-1])\\d{3}[\\dXx]$") - if (!idCard.matches(idCardRegex)) { - return Pair(false, "身份证无效,请重新输入") - } - return Pair(true, "") } diff --git a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt index fad49ae878..b98bc54abe 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt +++ b/app/src/main/java/com/halo/assistant/fragment/user/RealNameInfoViewModel.kt @@ -27,7 +27,7 @@ import retrofit2.HttpException class RealNameInfoViewModel(application: Application) : AndroidViewModel(application) { - val certificateResultLiveData = MutableLiveData() + val certificateResultLiveData = MutableLiveData() fun getUserInfo(): UserInfoEntity? { var userInfoEntity = UserManager.getInstance().userInfoEntity @@ -59,11 +59,20 @@ class RealNameInfoViewModel(application: Application) : AndroidViewModel(applica .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : BiResponse() { override fun onFailure(exception: Exception) { - ErrorHelper.handleError( + ErrorHelper.handleErrorWithCustomizedHandler( HaloApp.getInstance(), (exception as? HttpException)?.response()?.errorBody()?.string() - ) - NewLogUtils.logCertificationResult(isForced, 0) + ) { + if (it == 400012) { + NewLogUtils.logCertificationResult(isForced, 3) + certificateResultLiveData.postValue(RESULT_PROGRESSING) + return@handleErrorWithCustomizedHandler true + } else { + NewLogUtils.logCertificationResult(isForced, 0) + certificateResultLiveData.postValue(RESULT_UNQUALIFIED) + return@handleErrorWithCustomizedHandler false + } + } } override fun onSuccess(data: ResponseBody?) { @@ -89,7 +98,7 @@ class RealNameInfoViewModel(application: Application) : AndroidViewModel(applica DataUtils.getDeviceCertification(HaloApp.getInstance().gid) - certificateResultLiveData.postValue(true) + certificateResultLiveData.postValue(RESULT_SUCCESS) // 安装因为实名延迟的游戏 resumeInstallationIfNeeded() @@ -116,4 +125,10 @@ class RealNameInfoViewModel(application: Application) : AndroidViewModel(applica } } + companion object { + const val RESULT_SUCCESS = 1 // 认证成功,通过 + const val RESULT_UNQUALIFIED = 2 // 内容不合规,或其它 + const val RESULT_PROGRESSING = 3 // 实名认证中 + } + } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/spinner_progress.webp b/app/src/main/res/drawable-xxxhdpi/spinner_progress.webp new file mode 100644 index 0000000000000000000000000000000000000000..c1a36e521bd8ad666915ce4b6f6bd853bd432f44 GIT binary patch literal 2346 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 + + + + + diff --git a/app/src/main/res/layout/dialog_progress.xml b/app/src/main/res/layout/dialog_progress.xml new file mode 100644 index 0000000000..489ac66646 --- /dev/null +++ b/app/src/main/res/layout/dialog_progress.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ce820d9483..c546a61c45 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -244,6 +244,10 @@ 36dp + +