diff --git a/app/src/main/java/com/gh/common/util/CommentUtils.java b/app/src/main/java/com/gh/common/util/CommentUtils.java index 93a1721937..6fdfe9e954 100644 --- a/app/src/main/java/com/gh/common/util/CommentUtils.java +++ b/app/src/main/java/com/gh/common/util/CommentUtils.java @@ -420,7 +420,7 @@ public class CommentUtils { commentLikeCountTv.setVisibility(View.VISIBLE); try { if (e != null && e.response().errorBody() != null) { - ErrorHelper.handleError(context, e.response().errorBody().string(), false); + ErrorHelper.handleError(context, e.response().errorBody().string(), false, null); } } catch (IOException ex) { ex.printStackTrace(); diff --git a/app/src/main/java/com/gh/common/util/ErrorHelper.kt b/app/src/main/java/com/gh/common/util/ErrorHelper.kt index 65456ed0f4..9349cded95 100644 --- a/app/src/main/java/com/gh/common/util/ErrorHelper.kt +++ b/app/src/main/java/com/gh/common/util/ErrorHelper.kt @@ -1,13 +1,26 @@ package com.gh.common.util +import android.app.Activity import android.content.Context +import android.content.Intent +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity import com.gh.common.constant.Config import com.gh.gamecenter.R +import com.gh.gamecenter.ShellActivity import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.common.avoidcallback.AvoidOnResultManager +import com.gh.gamecenter.common.avoidcallback.Callback +import com.gh.gamecenter.common.callback.ConfirmListener import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.common.utils.DialogHelper +import com.gh.gamecenter.common.utils.dip2px +import com.gh.gamecenter.common.utils.toColor import com.gh.gamecenter.common.utils.toObject import com.gh.gamecenter.entity.ErrorEntity +import com.halo.assistant.fragment.user.UserInfoEditFragment +import com.lightgame.utils.AppManager import com.lightgame.utils.Utils import retrofit2.HttpException @@ -26,6 +39,7 @@ object ErrorHelper { context: Context, errorString: String?, showHighPriorityHint: Boolean = false, + realNameConfirmListener: ConfirmListener? = null, customizedHandler: (code: Int) -> Boolean ) { val errorEntity = errorString?.toObject() @@ -44,14 +58,14 @@ object ErrorHelper { return } - handleError(context, showHighPriorityHint, errorEntity) + handleError(context, showHighPriorityHint, errorEntity, realNameConfirmListener) } /** * [showHighPriorityHint] 用来标识有同样错误码可以触发两种处理时,为 true 时选择重要的 */ @JvmStatic - fun handleError(context: Context, errorString: String?, showHighPriorityHint: Boolean = false) { + fun handleError(context: Context, errorString: String?, showHighPriorityHint: Boolean = false, realNameConfirmListener: ConfirmListener? = null) { val errorEntity = errorString?.toObject() if (errorEntity == null) { @@ -64,7 +78,7 @@ object ErrorHelper { return } - handleError(context, showHighPriorityHint, errorEntity) + handleError(context, showHighPriorityHint, errorEntity, realNameConfirmListener) } /*** @@ -87,7 +101,8 @@ object ErrorHelper { private fun handleError( context: Context, showHighPriorityHint: Boolean = false, - errorEntity: ErrorEntity + errorEntity: ErrorEntity, + realNameConfirmListener: ConfirmListener? = null ) { when (errorEntity.code) { 403050, @@ -163,6 +178,46 @@ object ErrorHelper { 400802 -> { // 多设备登录同一帐号,不需要这里处理 } + + 403209 -> { + DialogHelper.showDialog( + context, + "实名提醒", + errorEntity.data?.title ?: "", + "前往实名认证", "以后再说", + uiModificationCallback = { binding -> + binding.hintTv.visibility = View.VISIBLE + binding.hintTv.layoutParams = (binding.hintTv.layoutParams as ViewGroup.MarginLayoutParams).apply { setMargins(0, 8F.dip2px(), 0, 0) } + binding.lineView.layoutParams = (binding.lineView.layoutParams as ViewGroup.MarginLayoutParams).apply { setMargins(0, 23F.dip2px(), 0, 0) } + binding.hintTv.text = errorEntity.data?.text + binding.hintTv.setTextColor(R.color.theme_font.toColor(context)) + binding.hintTv.setOnClickListener { + errorEntity.data?.toLinkEntity()?.let { entity -> + DirectUtils.directToLinkPage(context, entity, "实名提醒弹窗", "") + } + } + }, + confirmClickCallback = { + val currentActivity = AppManager.getInstance().currentActivity() ?: return@showDialog + AvoidOnResultManager.getInstance(currentActivity as AppCompatActivity) + .startForResult( + ShellActivity.getIntent( + context, + ShellActivity.Type.REAL_NAME_INFO, + ), object : Callback { + override fun onActivityResult(resultCode: Int, data: Intent?) { + if (resultCode == Activity.RESULT_OK && data != null) { + val isAuthSuccess = + data.getBooleanExtra(UserInfoEditFragment.AUTH_SUCCESS, false) + if (isAuthSuccess) { + realNameConfirmListener?.onConfirm() + } + } + } + }) + } + ) + } else -> Utils.toast(context, R.string.post_failure_hint) } } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index a223df298c..1f8a847f65 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -665,7 +665,7 @@ public class MainActivity extends BaseActivity { public void onFailure(@Nullable HttpException e) { super.onFailure(e); try { - ErrorHelper.handleErrorWithCustomizedHandler(MainActivity.this, e.response().errorBody().string(), false, new Function1() { + ErrorHelper.handleErrorWithCustomizedHandler(MainActivity.this, e.response().errorBody().string(), false, null, new Function1() { @Override public Boolean invoke(Integer code) { if (code == 404001) { diff --git a/app/src/main/java/com/gh/gamecenter/entity/ErrorEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/ErrorEntity.kt index 82950e6a2f..4ee0c1cd5b 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/ErrorEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/ErrorEntity.kt @@ -24,12 +24,28 @@ data class ErrorEntity(var code: Int? = 0, var answerCount: Int = 0, @SerializedName("follow_count") private var followCount: Int = 0, - val content: String = "" + val content: String = "", + val title: String = "", + val type: String = "", + val link: String = "", + val text: String = "", + @SerializedName("link_community", alternate = ["community"]) + var community: CommunityEntity? = CommunityEntity() ) { // 问题关注数默认是1 fun getFollowCount(): Int { if (followCount > 0) return followCount return 1 } + + fun toLinkEntity(): LinkEntity { + return LinkEntity( + title = title, + link = link, + type = type, + text = text, + community = community + ) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamecollection/publish/GameCollectionEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamecollection/publish/GameCollectionEditActivity.kt index 70c43a1e89..d09138edf5 100644 --- a/app/src/main/java/com/gh/gamecenter/gamecollection/publish/GameCollectionEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamecollection/publish/GameCollectionEditActivity.kt @@ -17,6 +17,7 @@ import com.gh.gamecenter.common.constant.Constants import com.gh.gamecenter.CropImageActivity import com.gh.gamecenter.R import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.common.callback.ConfirmListener import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.utils.PatternUtils @@ -228,7 +229,13 @@ class GameCollectionEditActivity : ToolBarActivity() { } finish() } else { - ErrorHelper.handleError(this, it.exception?.response()?.errorBody()?.string()) + ErrorHelper.handleError(this, it.exception?.response()?.errorBody()?.string(), false, object : ConfirmListener { + override fun onConfirm() { + if (::mMenuPost.isInitialized) { + onMenuItemClick(mMenuPost) + } + } + }) } } mViewModel.detailLiveData.observe(this) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index 2ec81b16a8..1a2676c9cb 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -348,7 +348,11 @@ class RatingEditActivity : ToolBarActivity(), KeyboardHeightObserver { }, TrackableEntity(event = "游戏评论跳转", key = "意见反馈弹窗") ) } - else -> ErrorHelper.handleError(this@RatingEditActivity, errorString) + else -> ErrorHelper.handleError(this@RatingEditActivity, errorString, false, object : ConfirmListener { + override fun onConfirm() { + postGameComment(again = false) + } + }) } } }) diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java index 77e0f634ee..cba0cf2ac1 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageDetailFragment.java @@ -21,6 +21,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.gh.common.constant.Config; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DialogUtils; +import com.gh.gamecenter.common.callback.ConfirmListener; import com.gh.gamecenter.core.utils.DisplayUtils; import com.gh.gamecenter.common.constant.EntranceConsts; import com.gh.common.util.ErrorHelper; @@ -399,7 +400,7 @@ public class MessageDetailFragment extends ToolbarFragment implements OnCommentC e1.printStackTrace(); } } - ErrorHelper.handleError(requireContext(), errorString, false); + ErrorHelper.handleError(requireContext(), errorString, false, () -> mBinding.pieceCommentTypingContainer.answerCommentSendBtn.performClick()); } }); }); diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt index c784489c61..f6b9ae2520 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt @@ -243,7 +243,13 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb }) mViewModel.error.observeNonNull(this) { - ErrorHelper.handleError(this, it) + ErrorHelper.handleError(this, it, false, object : ConfirmListener { + override fun onConfirm() { + if (::mMenuPost.isInitialized) { + onMenuItemClick(mMenuPost) + } + } + }) } when { diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnRepository.java b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnRepository.java index a350eeb5fb..70e2f83131 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnRepository.java +++ b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnRepository.java @@ -126,7 +126,7 @@ public class AskColumnRepository { } catch (Exception e1) { e1.printStackTrace(); } - ErrorHelper.handleError(mContext, errorString, false); + ErrorHelper.handleError(mContext, errorString, false, null); } }); diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt index c765106154..577d747583 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentFragment.kt @@ -29,6 +29,7 @@ import com.gh.gamecenter.R import com.gh.gamecenter.adapter.OnCommentCallBackListener import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.baselist.ListFragment +import com.gh.gamecenter.common.callback.ConfirmListener import com.gh.gamecenter.common.utils.* import com.gh.gamecenter.core.utils.* import com.gh.gamecenter.databinding.ItemCommentEditImageBinding @@ -201,7 +202,11 @@ open class NewCommentFragment : ListFragment e1.printStackTrace() } - ErrorHelper.handleError(requireContext(), errorString, false) + ErrorHelper.handleError(requireContext(), errorString, false, object : ConfirmListener { + override fun onConfirm() { + commentSendBtn.performClick() + } + }) } else -> { mSendingDialog?.dismiss() diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt index fc9095ab5c..f5f5efef63 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt @@ -19,6 +19,7 @@ import androidx.core.widget.addTextChangedListener import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.gh.base.BaseRichEditorActivity +import com.gh.common.util.ErrorHelper import com.gh.common.util.NewLogUtils import com.gh.gamecenter.common.utils.NotificationHelper import com.gh.gamecenter.common.base.fragment.WaitingDialogFragment @@ -388,6 +389,14 @@ class QuestionEditActivity : BaseRichEditorActivity(), extraConfig = DialogHelper.Config(centerTitle = true, centerContent = true) ) return@Observer + } else if (errorCode == 403209) { + ErrorHelper.handleError(this, string, false, object : ConfirmListener { + override fun onConfirm() { + if (::mMenuPost.isInitialized) { + onMenuItemClick(mMenuPost) + } + } + }) } } toast(R.string.post_failure_hint) diff --git a/app/src/main/java/com/gh/gamecenter/qa/tags/AskQuestionsNewRepository.java b/app/src/main/java/com/gh/gamecenter/qa/tags/AskQuestionsNewRepository.java index ec4c42f1cd..f16af22f09 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/tags/AskQuestionsNewRepository.java +++ b/app/src/main/java/com/gh/gamecenter/qa/tags/AskQuestionsNewRepository.java @@ -132,7 +132,7 @@ public class AskQuestionsNewRepository { } catch (Exception e1) { e1.printStackTrace(); } - ErrorHelper.handleError(mContext, errorString, false); + ErrorHelper.handleError(mContext, errorString, false, null); } }); diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt index 77dbbf8739..34f94fd356 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt @@ -29,6 +29,7 @@ import com.gh.gamecenter.entity.* import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.mvvm.Status import com.gh.gamecenter.common.base.fragment.ToolbarFragment +import com.gh.gamecenter.common.callback.ConfirmListener import com.gh.gamecenter.common.entity.NotificationUgc import com.gh.gamecenter.qa.BbsType import com.gh.gamecenter.qa.dialog.ChooseActivityDialogFragment @@ -300,7 +301,15 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver { } else if (it.status == Status.ERROR) { ErrorHelper.handleError( requireContext(), - it.exception?.response()?.errorBody()?.string() + it.exception?.response()?.errorBody()?.string(), + false, + object : ConfirmListener { + override fun onConfirm() { + if (::mMenuPost.isInitialized) { + onMenuItemClick(mMenuPost) + } + } + } ) } } diff --git a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java index 58134c4189..e3d8917668 100644 --- a/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/comment/CommentDetailFragment.java @@ -228,7 +228,7 @@ public class CommentDetailFragment extends ToolbarFragment implements OnCommentC e1.printStackTrace(); } } - ErrorHelper.handleError(requireContext(), errorString, false); + ErrorHelper.handleError(requireContext(), errorString, false, () -> mCommentSend.performClick()); } }); }