diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 603fa0e7ff..a21b74f132 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -16,6 +16,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.OnViewClickListener; import com.gh.common.constant.Config; +import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; import com.gh.common.exposure.ExposureUtils; @@ -389,15 +390,19 @@ public class BindingAdapters { ApkEntity apk = gameEntity.getApk().get(0); DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, () -> { - DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { - DialogUtils.checkDownload(v.getContext(), apk.getSize(), - isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location)); + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { + DialogUtils.checkDownload(v.getContext(), apk.getSize(), + isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location)); + }); }); }); } else { - DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { - DownloadDialog.getInstance(v.getContext()).showPopupWindow(v, gameEntity, - entrance, location + gameEntity.getName(), traceEvent); + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { + DownloadDialog.getInstance(v.getContext()).showPopupWindow(v, gameEntity, + entrance, location + gameEntity.getName(), traceEvent); + }); }); } break; diff --git a/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt b/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt index 555b5cba9f..519a464228 100644 --- a/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt +++ b/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt @@ -1,7 +1,10 @@ package com.gh.common.dialog +import android.annotation.SuppressLint +import android.app.Activity import android.app.Dialog import android.content.Context +import android.content.Intent import android.graphics.Color import android.graphics.Paint import android.graphics.drawable.ColorDrawable @@ -10,10 +13,30 @@ import android.view.LayoutInflater import android.view.View import android.widget.CheckBox import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.gh.common.avoidcallback.AvoidOnResultManager +import com.gh.common.avoidcallback.Callback +import com.gh.common.util.CheckLoginUtils import com.gh.common.util.DialogUtils import com.gh.gamecenter.R +import com.gh.gamecenter.UserInfoEditActivity +import com.gh.gamecenter.WebActivity +import com.gh.gamecenter.entity.AuthDialogEntity +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.Response +import com.gh.gamecenter.retrofit.RetrofitManager +import com.gh.gamecenter.user.UserViewModel +import com.halo.assistant.fragment.user.UserInfoEditFragment +import com.lightgame.utils.AppManager +import com.tencent.bugly.beta.tinker.TinkerManager.getApplication +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import okhttp3.ResponseBody +import retrofit2.HttpException -class CertificationDialog(context: Context) : Dialog(context, R.style.GhAlertDialog) { +class CertificationDialog(context: Context, private val authDialogEntity: AuthDialogEntity, val gameId: String, val listener: DialogUtils.ConfirmListener) : + Dialog(context, R.style.GhAlertDialog) { private lateinit var view: View private lateinit var detailedDesTv: TextView @@ -33,17 +56,152 @@ class CertificationDialog(context: Context) : Dialog(context, R.style.GhAlertDia detailedDesTv.paint.flags = Paint.UNDERLINE_TEXT_FLAG detailedDesTv.paint.isAntiAlias = true - detailedDesTv.setOnClickListener { + detailedDesTv.setOnClickListener { + context.startActivity(WebActivity.getIntentByUrl(context, authDialogEntity.link)) } + + when (authDialogEntity.level) { + "MUST_PASS" -> { + actionLeftTv.text = "暂不下载" + actionRightTv.text = "去实名认证" + noRemindAgainCb.visibility = View.GONE + actionLeftTv.setOnClickListener { + dismiss() + } + actionRightTv.setOnClickListener { + if (UserManager.getInstance().isLoggedIn) { + gotoAuthPage() + } else { + gotoLoginPage() + } + } + } + "ALWAYS_HINT" -> { + actionLeftTv.text = "去实名认证" + actionRightTv.text = "继续下载" + noRemindAgainCb.visibility = View.GONE + actionLeftTv.setOnClickListener { + if (UserManager.getInstance().isLoggedIn) { + gotoAuthPage() + } else { + gotoLoginPage() + } + } + actionRightTv.setOnClickListener { + listener.onConfirm() + dismiss() + } + } + "OPTIONAL_HINT" -> { + actionLeftTv.text = "去实名认证" + actionRightTv.text = "继续下载" + noRemindAgainCb.visibility = View.VISIBLE + actionLeftTv.setOnClickListener { + if (noRemindAgainCb.isChecked) { + closeAuthDialog() + } + if (UserManager.getInstance().isLoggedIn) { + gotoAuthPage() + } else { + gotoLoginPage() + } + } + actionRightTv.setOnClickListener { + if (noRemindAgainCb.isChecked) { + closeAuthDialog() + } + listener.onConfirm() + dismiss() + } + } + } + } + + //用户关闭游戏实名认证弹窗 + @SuppressLint("CheckResult") + private fun closeAuthDialog() { + RetrofitManager.getInstance(getApplication()).api + .closeAuthDialog(gameId, authDialogEntity.id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + + } + }) + } + + //跳转登录页面 + private fun gotoLoginPage() { + CheckLoginUtils.checkLogin(AppManager.getInstance().currentActivity() as AppCompatActivity, + null, true, "实名认证弹窗") { + if (UserManager.getInstance().isAuth) { + listener.onConfirm() + dismiss() + } + } + } + + //跳转实名认证页面 + private fun gotoAuthPage() { + AvoidOnResultManager.getInstance(AppManager.getInstance().currentActivity() as AppCompatActivity) + .startForResult(UserInfoEditActivity.getIntent(context, UserViewModel.TYPE_ID_CARD), 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) { + listener.onConfirm() + dismiss() + } + } + } + }) } companion object { @JvmStatic - fun showCertificationDialog(context: Context, listener: DialogUtils.ConfirmListener) { - val dialog = CertificationDialog(context) - dialog.show() + fun showCertificationDialog(context: Context, gameId: String, listener: DialogUtils.ConfirmListener) { + //1.先判断是否登录 是执行2 否执行3 + //2.判断是否实名认证 是终止 否执行3 + //3.调用认证弹窗接口 + if (UserManager.getInstance().isLoggedIn) { + if (UserManager.getInstance().isAuth) {//已实名认证 + listener.onConfirm() + } else { + //调用认证弹窗接口 + authDialog(context, gameId, listener) + } + } else { + authDialog(context, gameId, listener) + } + } + + @SuppressLint("CheckResult") + private fun authDialog(context: Context, gameId: String, listener: DialogUtils.ConfirmListener) { + RetrofitManager.getInstance(getApplication()).api + .authDialog(gameId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: AuthDialogEntity?) { + super.onResponse(response) + response?.let { + val dialog = CertificationDialog(context, it, gameId, listener) + dialog.show() + } + } + + override fun onFailure(e: HttpException?) { + super.onFailure(e) + e?.let { + if (it.code() == 404) { + listener.onConfirm() + } + } + } + }) } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index 7264b2a1c3..edd8e32d3b 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -9,6 +9,7 @@ import android.view.View; import android.widget.TextView; import com.gh.common.constant.Config; +import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.ReserveDialogFragment; import com.gh.common.exposure.ExposureEvent; @@ -142,7 +143,7 @@ public class DownloadItemUtils { } public static void updateItem(Context context, GameEntity gameEntity, GameViewHolder holder, - boolean isShowPlatform, boolean hideDownloadBtnIfNoAvailableContent) { + boolean isShowPlatform, boolean hideDownloadBtnIfNoAvailableContent) { updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, hideDownloadBtnIfNoAvailableContent); } @@ -461,8 +462,10 @@ public class DownloadItemUtils { clickCallback.onCallback(); } PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { - DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { - DownloadDialog.getInstance(context).showPopupWindow(v, gameEntity, entrance, location, traceEvent); + CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { + DownloadDialog.getInstance(context).showPopupWindow(v, gameEntity, entrance, location, traceEvent); + }); }); }); }); @@ -494,18 +497,20 @@ public class DownloadItemUtils { if (str.equals(context.getString(R.string.download))) { // 先弹下载弹窗(如果需要的话) DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - DialogUtils.checkDownload(context, apk.getSize(), - isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + DialogUtils.checkDownload(context, apk.getSize(), + isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + }); }); DataLogUtils.uploadGameLog(context, gameEntity.getId(), gameEntity.getName(), entrance); } else if (str.equals(context.getString(R.string.attempt))) { - String msg = gameEntity.getVersionNumberString(); - DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { - DialogUtils.checkDownload(context, apk.getSize(), - isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { + DialogUtils.checkDownload(context, apk.getSize(), + isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + }); }); }); @@ -518,8 +523,10 @@ public class DownloadItemUtils { DownloadDialog.getInstance(context).showPopupWindow(new View(context), gameEntity, entrance, location, traceEvent); } else { DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - DialogUtils.checkDownload(context, apk.getSize(), - isSubscribe -> plugin(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + DialogUtils.checkDownload(context, apk.getSize(), + isSubscribe -> plugin(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + }); }); } } else if (str.equals(context.getString(R.string.install))) { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java index ec315dd1a9..88c7a3c973 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/DetailViewHolder.java @@ -9,6 +9,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentActivity; +import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.GameOffServiceDialogFragment; import com.gh.common.dialog.ReserveDialogFragment; @@ -164,25 +165,27 @@ public class DetailViewHolder { case NORMAL: DataLogUtils.uploadGameLog(mViewHolder.context, mGameEntity.getId(), mGameEntity.getName(), mEntrance); case PLUGIN: - String msg = mGameEntity.getVersionNumberString(); - PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { if (mGameEntity.getApk().size() == 1) { ApkEntity apk = mGameEntity.getApk().get(0); DownloadDialogHelper.findAvailableDialogAndShow(mViewHolder.context, mGameEntity, apk, () -> { - DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { - DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); + CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { + DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); + }); }); }); } else { - DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { - DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, - mGameEntity, - autoDownloadPlatform, - StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), - mName + ":" + mTitle, - mTraceEvent); + CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity.getId(), () -> { + DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { + DownloadDialog.getInstance(mViewHolder.context).showPopupWindowAutoDownload(v, + mGameEntity, + autoDownloadPlatform, + StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), + mName + ":" + mTitle, + mTraceEvent); + }); }); } }); diff --git a/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt new file mode 100644 index 0000000000..7e7593940a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt @@ -0,0 +1,10 @@ +package com.gh.gamecenter.entity + +import com.google.gson.annotations.SerializedName + +data class AuthDialogEntity( + @SerializedName("_id") + var id: String = "", + var link: String = "", + var level: String = ""//MUST_PASS:提示且认证通过 ALWAYS_HINT:仅提示且不可关闭 OPTIONAL_HINT:仅提示且可关闭 +) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 7d6efa4733..799e45fa98 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -628,7 +628,8 @@ class GameDetailFragment : NormalFragment() { mGameTagView.onClickListener = object : FlexLinearLayout.OnItemClickListener { override fun onMoreClickListener() { if (!isVisible) return - GameTagsDialog.showGameTagsDialog(requireActivity(), mGameEntity?.tagStyle!!,mGameEntity?.name?:"") + GameTagsDialog.showGameTagsDialog(requireActivity(), mGameEntity?.tagStyle!!, mGameEntity?.name + ?: "") } override fun onItemClickListener(tag: TagStyleEntity) { @@ -644,13 +645,6 @@ class GameDetailFragment : NormalFragment() { ratingScoreAverage.textSize = 9f ratingScoreAverage.text = "评分过少" } - ratingScoreContainer.setOnClickListener { - debugOnly { - CertificationDialog.showCertificationDialog(requireContext(), DialogUtils.ConfirmListener { - - }) - } - } mGameName.text = mGameEntity!!.name mGameName.isSelected = true @@ -666,7 +660,7 @@ class GameDetailFragment : NormalFragment() { ImageUtils.display(mGameIcon, mGameEntity!!.icon) ImageUtils.display(mGameIconSmall, mGameEntity!!.icon) gameBigEvent.setOnClickListener { - GameBigEventDialog.showGameBigEventDialog(requireContext(),mGameEntity?.name?:"") + GameBigEventDialog.showGameBigEventDialog(requireContext(), mGameEntity?.name ?: "") } } diff --git a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java index 183f3529f7..2e6ab87d1f 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/UserManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/UserManager.java @@ -104,6 +104,10 @@ public class UserManager { return !TextUtils.isEmpty(getToken()); } + public boolean isAuth() { + return mUserInfoEntity != null && mUserInfoEntity.getIdCard() != null && !TextUtils.isEmpty(mUserInfoEntity.getIdCard().getId()); + } + public String getUserId() { if (mUserInfoEntity != null) { return mUserInfoEntity.getUserId(); diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 91ef7582f6..b35f702a6f 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -5,6 +5,7 @@ import com.gh.gamecenter.entity.AliasEntity; import com.gh.gamecenter.entity.AmwayCommentEntity; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.AppEntity; +import com.gh.gamecenter.entity.AuthDialogEntity; import com.gh.gamecenter.entity.BadgeEntity; import com.gh.gamecenter.entity.CategoryEntity; import com.gh.gamecenter.entity.CommentEntity; @@ -2310,4 +2311,16 @@ public interface ApiService { */ @POST("articles/{article_id}:stat_visit") Observable postArticleVisit(@Path("article_id") String articleId); + + /** + * 获取游戏实名认证弹窗 + */ + @GET("games/{gameId}/auth_dialog") + Observable authDialog(@Path("gameId") String gameId); + + /** + * 用户关闭游戏实名认证弹窗 + */ + @POST("games/{gameId}/auth_dialog/{dialogId}:close") + Single closeAuthDialog(@Path("gameId") String gameId, @Path("dialogId") String dialogId); } \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/user/UserInfoEditFragment.java b/app/src/main/java/com/halo/assistant/fragment/user/UserInfoEditFragment.java index 8f9b450088..a5da5d6b8f 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/UserInfoEditFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/user/UserInfoEditFragment.java @@ -1,7 +1,9 @@ package com.halo.assistant.fragment.user; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.Dialog; +import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.InputFilter; @@ -34,6 +36,7 @@ import java.util.Locale; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProviders; + import butterknife.BindView; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -103,6 +106,8 @@ public class UserInfoEditFragment extends NormalFragment { private String mEditType; + public static final String AUTH_SUCCESS = "auth_success";//认证通过 + @Override protected int getLayoutId() { return R.layout.fragment_userinfo_edit; @@ -145,6 +150,7 @@ public class UserInfoEditFragment extends NormalFragment { mIdCardNameEt.setText(sb.toString()); mIdCardEt.setText(mIdCardEt.getText().toString().replaceAll("(\\d)\\d{16}([0-9,x-y])", "$1****************$2")); if (mSaveMenuItem != null) mSaveMenuItem.setVisible(false); + getActivity().setResult(Activity.RESULT_OK, new Intent().putExtra(AUTH_SUCCESS, true)); return; } getActivity().finish();