From 1e894e1158e7be742e98dd0fe43bbaa4e91c74bd Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Tue, 16 Apr 2024 16:57:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Xapk=E8=A7=A3=E5=8E=8B=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=BC=B9=E7=AA=97=E4=BC=98=E5=8C=96-0514=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20https://jira.shanqu.cc/browse/GHZSCY-5383?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/xapk/XapkDialogHelper.kt | 114 +++++++++++++----- .../drawable-xxxhdpi/ic_right_arrow_xapk.png | Bin 0 -> 191 bytes 2 files changed, 87 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_right_arrow_xapk.png diff --git a/app/src/main/java/com/gh/common/xapk/XapkDialogHelper.kt b/app/src/main/java/com/gh/common/xapk/XapkDialogHelper.kt index 70bf3e8db7..6fde136762 100644 --- a/app/src/main/java/com/gh/common/xapk/XapkDialogHelper.kt +++ b/app/src/main/java/com/gh/common/xapk/XapkDialogHelper.kt @@ -6,8 +6,12 @@ import android.content.Context import android.content.Intent import android.graphics.Color import android.os.Build +import android.text.SpannableStringBuilder import android.view.View import androidx.appcompat.app.AppCompatActivity +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.text.underline +import androidx.core.view.updateLayoutParams import com.gh.common.util.NewFlatLogUtils import com.gh.gamecenter.R import com.gh.gamecenter.common.activityresult.ActResultRequest @@ -37,6 +41,14 @@ object XapkDialogHelper { val previousShowedDialog = mUnzipFailureDialogRef?.get() + val useRebootStyle = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + + val content = if (useRebootStyle) { + "未授权允许未知来源安装、数据包格式、设备兼容性…等均可能导致解压失败。" + } else { + "未授权允许未知来源安装、数据包格式、设备兼容性…等均可能导致解压失败。\n如果开启权限后仍未能解决,请提交反馈帮助我们改进。" + } + if (previousShowedDialog != null && previousShowedDialog.isShowing && context == previousShowedDialog.ownerActivity @@ -48,9 +60,9 @@ object XapkDialogHelper { val dialog = DialogHelper.showGuideDialog( context = context, title = "", - content = "未授权允许未知来源安装、数据包格式、设备兼容性…等均可能导致解压失败。\n如果开启权限后仍未能解决,请提交反馈帮助我们改进。", + content = content, confirmText = "开启权限", - cancelText = "提交反馈", + cancelText = if (useRebootStyle) "重启助手" else "提交反馈", confirmClickCallback = { if (context is AppCompatActivity) { val intent = PermissionHelper.getToInstallPermissionSettingIntent(context) @@ -83,11 +95,7 @@ object XapkDialogHelper { ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - val pm = context.packageManager - val restartIntent = pm.getLaunchIntentForPackage(context.packageName) - val mainIntent = Intent.makeRestartActivityTask(restartIntent!!.component) - context.startActivity(mainIntent) - Runtime.getRuntime().exit(0) + restart(context) } else { XapkInstaller.install(context, downloadEntity, true) } @@ -100,27 +108,22 @@ object XapkDialogHelper { } }, cancelClickCallback = { - val hint = "游戏安装包解压失败,问题反馈:" - HelpAndFeedbackBridge.startSuggestionActivity( - context, - SuggestType.GAME, - null, - hint, - SimpleGameEntity(downloadEntity.gameId, downloadEntity.name, downloadEntity.icon) - ) - NewFlatLogUtils.logXApkUnzipFailedDialogClick( - "提交反馈", - false, - downloadEntity.gameId, - downloadEntity.name - ) + if (useRebootStyle) { + // 记录应用重启前需要重解压的信息 + SPUtils.setString(Constants.SP_XAPK_UNZIP_ACTIVITY, context.javaClass.name) + SPUtils.setString(Constants.SP_XAPK_URL, downloadEntity.url) - SensorsBridge.trackGameDecompressionFailedDialogClick( - buttonName = "提交反馈", - downloadEntity.gameId, - downloadEntity.name, - downloadEntity.categoryChinese - ) + SensorsBridge.trackGameDecompressionFailedDialogClick( + buttonName = "重启助手", + downloadEntity.gameId, + downloadEntity.name, + downloadEntity.categoryChinese + ) + + restart(context) + } else { + doFeedback(context, downloadEntity) + } }, uiModificationCallback = { binding -> binding.headIv.setBackgroundResource(R.drawable.dialog_unzip_failure_head_background) @@ -146,6 +149,30 @@ object XapkDialogHelper { ) binding.dismiss() } + if (useRebootStyle) { + val spannableString = SpannableStringBuilder() + .append("未能解决问题?点击 ") + .underline { append("提交反馈") } + .append(" ") + binding.alternativeCancelTv.visibility = View.VISIBLE + binding.alternativeCancelTv.text = spannableString + binding.alternativeCancelTv.setTextColor(R.color.text_secondary.toColor(context)) + binding.alternativeCancelTv.setDrawableEnd(R.drawable.ic_right_arrow_xapk) + binding.alternativeCancelTv.setOnClickListener { + doFeedback(context, downloadEntity) + } + + binding.hintTv.text = "开启权限后请务必重启光环助手,再进行安装" + binding.hintTv.setTextColor(R.color.text_theme.toColor(context)) + binding.hintTv.setTextAppearance(R.style.TextCaption1) + binding.hintTv.visibility = View.VISIBLE + binding.hintTv.updateLayoutParams { + topMargin = 8F.dip2px() + } + binding.confirmTv.updateLayoutParams { + topMargin = 16F.dip2px() + } + } }, touchOutsideCallback = { SensorsBridge.trackGameDecompressionFailedDialogClick( @@ -164,4 +191,37 @@ object XapkDialogHelper { mUnzipFailureDialogRef = WeakReference(dialog) } + private fun restart(context: Context) { + val pm = context.packageManager + val restartIntent = pm.getLaunchIntentForPackage(context.packageName) + val mainIntent = Intent.makeRestartActivityTask(restartIntent!!.component) + context.startActivity(mainIntent) + Runtime.getRuntime().exit(0) + } + + private fun doFeedback(context: Context, downloadEntity: DownloadEntity) { + val hint = "游戏安装包解压失败,问题反馈:" + + HelpAndFeedbackBridge.startSuggestionActivity( + context, + SuggestType.GAME, + null, + hint, + SimpleGameEntity(downloadEntity.gameId, downloadEntity.name, downloadEntity.icon) + ) + NewFlatLogUtils.logXApkUnzipFailedDialogClick( + "提交反馈", + false, + downloadEntity.gameId, + downloadEntity.name + ) + + SensorsBridge.trackGameDecompressionFailedDialogClick( + buttonName = "提交反馈", + downloadEntity.gameId, + downloadEntity.name, + downloadEntity.categoryChinese + ) + } + } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/ic_right_arrow_xapk.png b/app/src/main/res/drawable-xxxhdpi/ic_right_arrow_xapk.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1bfccba655f883b59c05696e4d9eda8ce14ffc GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^5