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 0000000000..c1a36e521b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/spinner_progress.webp differ diff --git a/app/src/main/res/drawable/progressbar_gray.xml b/app/src/main/res/drawable/progressbar_gray.xml new file mode 100644 index 0000000000..9e10ea7573 --- /dev/null +++ b/app/src/main/res/drawable/progressbar_gray.xml @@ -0,0 +1,11 @@ + + + + + + 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 + +