diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index c1df526751..44dbb04bee 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -74,6 +74,8 @@ public class Constants { public static final String SP_NO_REMIND_AGAIN = "no_remind_again"; //游戏详情过滤标签数据 public static final String SP_FILTER_TAGS= "filter_tags"; + //实名认证弹窗分类数据 + public static final String SP_AUTH_DIALOG= "auth_dialog"; //手机号码匹配规则 public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; 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 6b2c29b2ea..321525a421 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -398,7 +398,7 @@ public class BindingAdapters { ApkEntity apk = gameEntity.getApk().get(0); DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, () -> { - CertificationDialog.showCertificationDialog(v.getContext(), gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { DialogUtils.checkDownload(v.getContext(), apk.getSize(), isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location)); @@ -406,7 +406,7 @@ public class BindingAdapters { }); }); } else { - CertificationDialog.showCertificationDialog(v.getContext(), gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { DownloadDialog.showDownloadDialog( v.getContext(), 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 519a464228..5b171f03ba 100644 --- a/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt +++ b/app/src/main/java/com/gh/common/dialog/CertificationDialog.kt @@ -16,17 +16,24 @@ 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.constant.Constants import com.gh.common.util.CheckLoginUtils import com.gh.common.util.DialogUtils +import com.gh.common.util.GsonUtils +import com.gh.common.util.SPUtils 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.entity.AuthDialogLevel +import com.gh.gamecenter.entity.DeviceDialogEntity +import com.gh.gamecenter.entity.GameEntity 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.google.gson.reflect.TypeToken import com.halo.assistant.fragment.user.UserInfoEditFragment import com.lightgame.utils.AppManager import com.tencent.bugly.beta.tinker.TinkerManager.getApplication @@ -62,7 +69,7 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi } when (authDialogEntity.level) { - "MUST_PASS" -> { + AuthDialogLevel.MUST_PASS.value -> { actionLeftTv.text = "暂不下载" actionRightTv.text = "去实名认证" noRemindAgainCb.visibility = View.GONE @@ -77,7 +84,7 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi } } } - "ALWAYS_HINT" -> { + AuthDialogLevel.ALWAYS_HINT.value -> { actionLeftTv.text = "去实名认证" actionRightTv.text = "继续下载" noRemindAgainCb.visibility = View.GONE @@ -93,13 +100,13 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi dismiss() } } - "OPTIONAL_HINT" -> { + AuthDialogLevel.OPTIONAL_HINT.value -> { actionLeftTv.text = "去实名认证" actionRightTv.text = "继续下载" noRemindAgainCb.visibility = View.VISIBLE actionLeftTv.setOnClickListener { if (noRemindAgainCb.isChecked) { - closeAuthDialog() + SPUtils.setBoolean(gameId, true) } if (UserManager.getInstance().isLoggedIn) { gotoAuthPage() @@ -109,7 +116,7 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi } actionRightTv.setOnClickListener { if (noRemindAgainCb.isChecked) { - closeAuthDialog() + SPUtils.getBoolean(gameId, true) } listener.onConfirm() dismiss() @@ -118,20 +125,6 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi } } - //用户关闭游戏实名认证弹窗 - @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, @@ -162,46 +155,42 @@ class CertificationDialog(context: Context, private val authDialogEntity: AuthDi companion object { @JvmStatic - fun showCertificationDialog(context: Context, gameId: String, listener: DialogUtils.ConfirmListener) { + fun showCertificationDialog(context: Context, game: GameEntity, listener: DialogUtils.ConfirmListener) { //1.先判断是否登录 是执行2 否执行3 //2.判断是否实名认证 是终止 否执行3 - //3.调用认证弹窗接口 + //3.判断是否需要弹出认证弹窗接口 if (UserManager.getInstance().isLoggedIn) { if (UserManager.getInstance().isAuth) {//已实名认证 listener.onConfirm() } else { - //调用认证弹窗接口 - authDialog(context, gameId, listener) + authDialog(context, game, listener) } } else { - authDialog(context, gameId, listener) + authDialog(context, game, 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() - } - } - } - }) + private fun authDialog(context: Context, game: GameEntity, listener: DialogUtils.ConfirmListener) { + var authDialog: AuthDialogEntity? = null + if (game.authDialog != null) { + authDialog = game.authDialog + } + if (authDialog == null) { + val datas = SPUtils.getString(Constants.SP_AUTH_DIALOG) + val type = object : TypeToken>() {}.type + val authDialogs = GsonUtils.gson.fromJson>(datas, type) + if (authDialogs.isNotEmpty()) { + authDialog = authDialogs.find { it.gameCategory == game.category } + } + } + val isCloseAuthDialog = SPUtils.getBoolean(game.id, false) + if (authDialog != null && (authDialog.level != AuthDialogLevel.OPTIONAL_HINT.value || !isCloseAuthDialog)) { + val dialog = CertificationDialog(context, authDialog, game.id, listener) + dialog.show() + } else { + 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 4976295a54..40dc63467a 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -462,7 +462,7 @@ public class DownloadItemUtils { clickCallback.onCallback(); } PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { - CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { DownloadDialog.showDownloadDialog( v.getContext(), @@ -501,7 +501,7 @@ public class DownloadItemUtils { if (str.equals(context.getString(R.string.download))) { // 先弹下载弹窗(如果需要的话) DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { DialogUtils.checkDownload(context, apk.getSize(), isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); }); @@ -510,7 +510,7 @@ public class DownloadItemUtils { DataLogUtils.uploadGameLog(context, gameEntity.getId(), gameEntity.getName(), entrance); } else if (str.equals(context.getString(R.string.attempt))) { DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { DialogUtils.checkDownload(context, apk.getSize(), isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); @@ -527,7 +527,7 @@ public class DownloadItemUtils { DownloadDialog.showDownloadDialog(context, gameEntity, entrance, location); } else { DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { - CertificationDialog.showCertificationDialog(context, gameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { DialogUtils.checkDownload(context, apk.getSize(), isSubscribe -> plugin(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); }); diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 5785f8d6ed..f8ee467af8 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -35,6 +35,7 @@ import com.gh.common.util.SPUtils; import com.gh.common.util.TagUtils; import com.gh.common.util.UsageStatsHelper; import com.gh.download.DownloadManager; +import com.gh.gamecenter.entity.AuthDialogEntity; import com.gh.gamecenter.entity.PrivacyPolicyEntity; import com.gh.gamecenter.manager.FilterManager; import com.gh.gamecenter.retrofit.BiResponse; @@ -138,6 +139,7 @@ public class SplashScreenActivity extends BaseActivity { Config.getGhzsSettings(); deviceDialogSetting(); getFilterDetailTags(); + getAuthDialog(); UsageStatsHelper.checkAndPostUsageStats(); GameRepositoryHelper.getGameRepository(this); @@ -197,6 +199,19 @@ public class SplashScreenActivity extends BaseActivity { }); } + private void getAuthDialog(){ + RetrofitManager.getInstance(HaloApp.getInstance().getApplication()) + .getApi() + .authDialog() + .subscribe(new Response>(){ + @Override + public void onResponse(@Nullable List response) { + super.onResponse(response); + SPUtils.setString(Constants.SP_AUTH_DIALOG, GsonUtils.toJson(response)); + } + }); + } + @SuppressLint("CheckResult") private void showPrivacyPolicy(EmptyCallback callback) { RetrofitManager.getInstance(this).getApi() 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 e13c8f4814..b40809e664 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 @@ -170,14 +170,14 @@ public class DetailViewHolder { ApkEntity apk = mGameEntity.getApk().get(0); DownloadDialogHelper.findAvailableDialogAndShow(mViewHolder.context, mGameEntity, apk, () -> { - CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity, () -> { DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); }); }); }); } else { - CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity.getId(), () -> { + CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity, () -> { DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { DownloadDialog.showDownloadDialog( mViewHolder.context, diff --git a/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt index 7e7593940a..182226ba68 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/AuthDialogEntity.kt @@ -1,10 +1,21 @@ package com.gh.gamecenter.entity +import android.os.Parcelable import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize +@Parcelize data class AuthDialogEntity( @SerializedName("_id") var id: String = "", var link: String = "", + @SerializedName("game_category") + var gameCategory:String="",//online (网络游戏) , local (单机游戏), welfare (福利游戏) var level: String = ""//MUST_PASS:提示且认证通过 ALWAYS_HINT:仅提示且不可关闭 OPTIONAL_HINT:仅提示且可关闭 -) \ No newline at end of file +) : Parcelable + +enum class AuthDialogLevel(val value: String){ + MUST_PASS("MUST_PASS"), + ALWAYS_HINT("ALWAYS_HINT"), + OPTIONAL_HINT("OPTIONAL_HINT"), +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt index 4ba44a4628..52ab233e8c 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -1,5 +1,6 @@ package com.gh.gamecenter.entity +import android.app.Dialog import android.os.Parcelable import com.gh.common.constant.Config import com.gh.common.exposure.ExposureEvent @@ -125,6 +126,9 @@ data class GameEntity( @SerializedName("download_dialog") var downloadDialog: ArrayList? = arrayListOf(), + @SerializedName("auth_dialog") + var authDialog: AuthDialogEntity? = null, + @SerializedName("is_related") var isRelated: Boolean = false, diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt index 297f6fc50f..1f6ca8f7e0 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.app.Application import android.graphics.Bitmap import android.graphics.drawable.Drawable +import android.os.Build import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -20,8 +21,11 @@ import com.gh.gamecenter.gamedetail.entity.CustomColumn import com.gh.gamecenter.gamedetail.entity.DetailEntity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import com.lightgame.utils.Util_System_Phone_State import com.squareup.picasso.Picasso import com.squareup.picasso.Target +import com.walkud.rom.checker.RomIdentifier import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers @@ -166,6 +170,17 @@ class DescViewModel(application: Application, fun sendSuggestion() { val params = hashMapOf() + params["from"] = "" + params["ghversion"] = PackageUtils.getVersionName() + params["channel"] = HaloApp.getInstance().channel + params["type"] = Build.MODEL + params["sdk"] = android.os.Build.VERSION.SDK_INT.toString() + params["version"] = Build.VERSION.RELEASE + params["source"] = HaloApp.getInstance().application.getString(R.string.app_name) + params["imei"] = Util_System_Phone_State.getDeviceId(HaloApp.getInstance().application) + params["manufacturer"] = Build.MANUFACTURER + params["rom"] = RomIdentifier.getRom().name + " " + RomIdentifier.getRom().versionName + params["suggestion_type"] = "游戏求更新" params["game_id"] = game?.id ?: "" params["message"] = "求更新:${game?.name}(${game?.getApk()?.get(0)?.packageName}, ${game?.getApk()?.get(0)?.version})" diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt index ce4c7705dc..990443374f 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView import com.gh.base.OnListClickListener import com.gh.common.util.LibaoUtils import com.gh.common.util.MtaHelper +import com.gh.common.util.RandomUtils import com.gh.gamecenter.R import com.gh.gamecenter.databinding.ItemGameLibaoBinding import com.gh.gamecenter.entity.LibaoEntity @@ -50,7 +51,7 @@ class GameLibaoAdapter(val context: Context, val libaos: ArrayList, val available = libaoEntity.available if (total != 0) { holder.binding.libaoSchedulePb.progress = ((available / total.toFloat()) * 100).toInt() - holder.binding.remainingTv.text = String.format(Locale.CHINA, "剩余%.1f", ((available) / total.toFloat()) * 100) + "%" + holder.binding.remainingTv.text = "剩余${RandomUtils.getInt((available) / total.toDouble() * 100)}%" } LibaoUtils.setLiBaoBtnStatusRound(holder.binding.receiveTv, libaoEntity.status, context) holder.itemView.setOnClickListener { 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 4484f89509..72c948221e 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 @@ -2331,8 +2331,8 @@ public interface ApiService { /** * 获取游戏实名认证弹窗 */ - @GET("games/{gameId}/auth_dialog") - Observable authDialog(@Path("gameId") String gameId); + @GET("games/auth_dialogs") + Observable> authDialog(); /** * 用户关闭游戏实名认证弹窗 diff --git a/app/src/main/res/layout/layout_video_detail_surface.xml b/app/src/main/res/layout/layout_video_detail_surface.xml index eae8d0ea80..9ee7291df4 100644 --- a/app/src/main/res/layout/layout_video_detail_surface.xml +++ b/app/src/main/res/layout/layout_video_detail_surface.xml @@ -134,7 +134,7 @@ android:textSize="14sp" android:textStyle="bold" app:layout_constrainedWidth="true" - android:shadowColor="#0D000000" + android:shadowColor="#4D000000" android:shadowDx="0" android:shadowDy="0.5" android:shadowRadius="1" @@ -185,7 +185,7 @@ android:lineSpacingExtra="4dp" android:textColor="@color/white" android:textSize="14sp" - android:shadowColor="#0D000000" + android:shadowColor="#4D000000" android:shadowDx="0" android:shadowDy="0.5" android:shadowRadius="1"