feat: Xapk解压失败弹窗优化-0514优化 https://jira.shanqu.cc/browse/GHZSCY-5383

This commit is contained in:
chenjuntao
2024-04-16 16:57:48 +08:00
parent de9980af6a
commit 1e894e1158
2 changed files with 87 additions and 27 deletions

View File

@ -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<ConstraintLayout.LayoutParams> {
topMargin = 8F.dip2px()
}
binding.confirmTv.updateLayoutParams<ConstraintLayout.LayoutParams> {
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
)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B