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 bc8bd6c4a2..e15af196f4 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -428,15 +428,16 @@ public class BindingAdapters { case PLUGIN: if (gameEntity.getApk().size() == 1) { ApkEntity apk = gameEntity.getApk().get(0); - DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, - () -> { - CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { - DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { - DialogUtils.checkDownload(v.getContext(), apk.getSize(), - isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location)); - }); + DownloadDialogHelper.findAvailableDialogAndShow(v.getContext(), gameEntity, apk, () -> { + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { + DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { + DialogUtils.showOverseaDownloadDialog(v.getContext(), gameEntity, () -> { + DialogUtils.checkDownload(v.getContext(), apk.getSize(), + isSubscribe -> download(progressBar, gameEntity, traceEvent, isSubscribe, entrance, location)); }); }); + }); + }); } else { CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 831e2053ba..87c0240f93 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -29,6 +29,12 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.gh.common.AppExecutor; import com.gh.common.constant.Config; @@ -42,6 +48,7 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.PrivacyPolicyItemViewHolder; +import com.gh.gamecenter.databinding.DialogOverseaConfirmationBinding; import com.gh.gamecenter.databinding.ImprintContentItemBinding; import com.gh.gamecenter.databinding.PrivacyItemBinding; import com.gh.gamecenter.entity.ApkEntity; @@ -61,12 +68,6 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.core.content.ContextCompat; -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; - public class DialogUtils { public static Dialog showWaitDialog(Context context, String msg) { @@ -1293,6 +1294,45 @@ public class DialogUtils { } } + // 海外下载地址弹窗 + public static void showOverseaDownloadDialog(Context context, GameEntity gameEntity, @NonNull ConfirmListener listener) { + context = checkDialogContext(context); + + if (gameEntity.getOverseasAddressDialog() == null + || gameEntity.getApk().size() == 0 + || !gameEntity.getOverseasAddressDialog().isEnable()) { + listener.onConfirm(); + } else { + final Dialog dialog = new Dialog(context, R.style.GhAlertDialog); + + DialogOverseaConfirmationBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialog_oversea_confirmation, null, false); + + View contentView = binding.getRoot(); + + binding.setGame(gameEntity); + binding.urlTv.setText(gameEntity.getOverseasAddressDialog().getLink()); + binding.closeIv.setOnClickListener(v -> dialog.dismiss()); + binding.downloadBtn.setText("下载(" + gameEntity.getApk().get(0).getSize() + ")"); + binding.downloadBtn.setOnClickListener(v -> { + listener.onConfirm(); + dialog.dismiss(); + }); + + if ("show&download".equals(gameEntity.getOverseasAddressDialog().getStatus())) { + gameEntity.getApk().get(0).setUrl(gameEntity.getOverseasAddressDialog().getLink()); + } + + Window window = dialog.getWindow(); + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(contentView); + dialog.show(); + } + } + public static void showImprintDialog(Context context, GameEntity gameEntity, String titleName) { context = checkDialogContext(context); Dialog dialog = new Dialog(context, R.style.full_dialog); 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 7230203598..9fc4983c19 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -534,8 +534,10 @@ public class DownloadItemUtils { // 先弹下载弹窗(如果需要的话) DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { CertificationDialog.showCertificationDialog(context, gameEntity, () -> { - DialogUtils.checkDownload(context, apk.getSize(), - isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + DialogUtils.showOverseaDownloadDialog(context, gameEntity, () -> { + DialogUtils.checkDownload(context, apk.getSize(), + isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + }); }); }); @@ -544,8 +546,10 @@ public class DownloadItemUtils { DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apk, () -> { CertificationDialog.showCertificationDialog(context, gameEntity, () -> { DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { - DialogUtils.checkDownload(context, apk.getSize(), - isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + DialogUtils.showOverseaDownloadDialog(context, gameEntity, () -> { + DialogUtils.checkDownload(context, apk.getSize(), + isSubscribe -> download(context, gameEntity, downloadBtn, entrance, location, isSubscribe, traceEvent)); + }); }); }); }); 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 6f8f350ee9..03735d5548 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 @@ -165,7 +165,9 @@ public class DetailViewHolder { () -> { CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity, () -> { DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { - DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); + DialogUtils.showOverseaDownloadDialog(mViewHolder.context, mGameEntity, () -> { + DialogUtils.checkDownload(mViewHolder.context, apk.getSize(), this::download); + }); }); }); }); 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 6699ebe01b..c723e16cfa 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -208,6 +208,8 @@ data class GameEntity( var zone: ZoneEntity = ZoneEntity(), @SerializedName("comment_description") var commentDescription: String = "", + @SerializedName("overseas_address_dialog") + var overseasAddressDialog: OverseasAddressDialog? = null, // 本地字段,使用镜像信息 var useMirrorInfo: Boolean = false, @@ -517,6 +519,13 @@ data class GameEntity( } } + @Parcelize + data class OverseasAddressDialog(var status: String? = "", var link: String? = "") : Parcelable { + fun isEnable() : Boolean { + return status == "show" || status == "show&download" + } + } + companion object { const val TAG: String = "GameEntity" } diff --git a/app/src/main/res/drawable-hdpi/ic_close_oversea.png b/app/src/main/res/drawable-hdpi/ic_close_oversea.png new file mode 100644 index 0000000000..f3dceb9c58 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_close_oversea.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_close_oversea.png b/app/src/main/res/drawable-xhdpi/ic_close_oversea.png new file mode 100644 index 0000000000..16d8f32fac Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_close_oversea.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_close_oversea.png b/app/src/main/res/drawable-xxhdpi/ic_close_oversea.png new file mode 100644 index 0000000000..ba9515dc60 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_close_oversea.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_close_oversea.png b/app/src/main/res/drawable-xxxhdpi/ic_close_oversea.png new file mode 100644 index 0000000000..1049fcbad3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_close_oversea.png differ diff --git a/app/src/main/res/layout/dialog_oversea_confirmation.xml b/app/src/main/res/layout/dialog_oversea_confirmation.xml new file mode 100644 index 0000000000..fd91d47cec --- /dev/null +++ b/app/src/main/res/layout/dialog_oversea_confirmation.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4ee3f62e67..26450db146 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -199,6 +199,7 @@ 正在为您更新,请耐心等待 0K/s 0.0% + %s下载地址: 取消 提示标题 提示内容 @@ -694,6 +695,7 @@ 将已安装游戏标记为玩过的游戏 https://v.douyin.com/C9UHr6/ 你有%1$d]]>款预约的游戏上线啦 + 此游戏下载资源由第三方提供。若该资源侵犯了您的合法权益或违反了当地法规,请点击页面右上角-版权申诉,按指引发起申诉,我们会尽快联系您并解决。 该游戏暂时仅提供试玩版本。试玩版资源来自第三方网站,可能存在bug或兼容性问题。敬请留意后续相关消息。 该游戏暂时仅提供试玩版本。试玩版可能存在bug或兼容性问题。敬请留意后续相关消息。 游戏停服更新维护中,为避免情绪化内容对游戏评分带来的影响,因此开启停服保护功能。在停服保护状态期间,所新增及修改发布的评分将不计入总分,所评分评论内容在展示上也会有文字提示告知其他玩家。\n\n感谢您的配合及谅解,祝您游戏愉快!\n\n光环助手会持续关注产品建议及反馈,如您在使用过程中有任何问题,欢迎向我们反馈。