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 f9b586a06b..5671d3a8ff 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -469,16 +469,14 @@ public class BindingAdapters { }); }); } else { - PackageCheckDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity.getPackageDialog(), () -> { - CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { - DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { - DownloadDialog.showDownloadDialog( - v.getContext(), - gameEntity, - traceEvent, - entrance, - location + ":" + gameEntity.getName()); - }); + CertificationDialog.showCertificationDialog(v.getContext(), gameEntity, () -> { + DialogUtils.showVersionNumberDialog(v.getContext(), gameEntity, () -> { + DownloadDialog.showDownloadDialog( + v.getContext(), + gameEntity, + traceEvent, + entrance, + location + ":" + gameEntity.getName()); }); }); } diff --git a/app/src/main/java/com/gh/common/dialog/PackageCheckDialogFragment.kt b/app/src/main/java/com/gh/common/dialog/PackageCheckDialogFragment.kt index a5a91fbb3a..58df5641c0 100644 --- a/app/src/main/java/com/gh/common/dialog/PackageCheckDialogFragment.kt +++ b/app/src/main/java/com/gh/common/dialog/PackageCheckDialogFragment.kt @@ -16,14 +16,16 @@ import com.gh.common.constant.Constants import com.gh.common.util.* import com.gh.common.view.CustomLinkMovementMethod import com.gh.gamecenter.R -import com.lightgame.dialog.BaseDialogFragment import com.gh.gamecenter.databinding.FragmentPackageCheckBinding import com.gh.gamecenter.databinding.PackageCheckItemBinding import com.gh.gamecenter.entity.DetectionObjectEntity import com.gh.gamecenter.entity.PackageDialogEntity import com.gh.gamecenter.eventbus.EBPackage +import com.halo.assistant.HaloApp import com.lightgame.adapter.BaseRecyclerAdapter +import com.lightgame.dialog.BaseDialogFragment import io.reactivex.disposables.Disposable +import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -40,6 +42,11 @@ class PackageCheckDialogFragment : BaseDialogFragment() { var packageDialogEntity: PackageDialogEntity? = null var callBack: DialogUtils.ConfirmListener? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EventBus.getDefault().register(this) + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { binding = FragmentPackageCheckBinding.inflate(inflater, container, false) return binding.root @@ -51,7 +58,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() { changeParams(it.detectionObjects.size) binding.packageRv.layoutManager = LinearLayoutManager(requireContext()) - mAdapter = PackageCheckAdapter(requireContext()) + mAdapter = PackageCheckAdapter(requireContext(), it.detectionObjects) binding.packageRv.adapter = mAdapter binding.titleTv.text = it.title @@ -101,7 +108,7 @@ class PackageCheckDialogFragment : BaseDialogFragment() { if (binding.noRemindAgainCb.isChecked) { SPUtils.setBoolean(Constants.SP_PACKAGE_CHECK, true) } - val isAllPackageInstalled = isAllPackageInstalled(entity.detectionObjects) + val isAllPackageInstalled = isAllPackageInstalled(entity) if (isAllPackageInstalled) { callBack?.onConfirm() dismissAllowingStateLoss() @@ -125,20 +132,6 @@ class PackageCheckDialogFragment : BaseDialogFragment() { } } - private fun isAllPackageInstalled(detectionObjects: ArrayList): Boolean { - var isInstalled = true - val allPackageName = PackageUtils.getAllPackageName(requireContext()) - detectionObjects.forEach { entity -> - entity.packages.forEach { - if (!allPackageName.contains(it)) { - isInstalled = false - return isInstalled - } - } - } - return isInstalled - } - private fun checkPackage() { var index = 0 mTotalWidth = (DisplayUtils.getScreenWidth() - 108f.dip2px()).toFloat() @@ -153,11 +146,11 @@ class PackageCheckDialogFragment : BaseDialogFragment() { val averageTime = if (objects.size == 1) { mDuration } else { - mDuration / (objects.size - 1) + mDuration / objects.size } - if (it % averageTime == 0L && index < objects.size) { - mAdapter?.setListData(objects[index]) - binding.packageRv.smoothScrollToPosition((mAdapter?.itemCount ?: 0) - 1) + if (it != 0L && it % averageTime == 0L && index < objects.size) { + mAdapter?.notifyPackages() + binding.packageRv.smoothScrollToPosition(index) index++ } } @@ -180,8 +173,19 @@ class PackageCheckDialogFragment : BaseDialogFragment() { dialog?.setCanceledOnTouchOutside(true) } + override fun onResume() { + super.onResume() + packageDialogEntity?.let { + if (isAllPackageInstalled(it)) { + callBack?.onConfirm() + dismissAllowingStateLoss() + } + } + } + override fun onDestroyView() { super.onDestroyView() + EventBus.getDefault().unregister(this) if (mDisposable?.isDisposed == false) { mDisposable?.dispose() } @@ -195,10 +199,11 @@ class PackageCheckDialogFragment : BaseDialogFragment() { } } - class PackageCheckAdapter(val context: Context) : BaseRecyclerAdapter(context) { - private val entities: ArrayList = arrayListOf() - fun setListData(entity: DetectionObjectEntity) { - entities.add(entity) + class PackageCheckAdapter(val context: Context, val entities: ArrayList) : BaseRecyclerAdapter(context) { + private var index = -1 + + fun notifyPackages() { + index++ notifyDataSetChanged() } @@ -212,20 +217,25 @@ class PackageCheckDialogFragment : BaseDialogFragment() { if (holder is PackageCheckViewHolder) { val entity = entities[position] holder.binding.entity = entity - var isAllInstalled = true - entity.packages.forEach { - val isInstalled = PackageUtils.isInstalled(context, it) - if (!isInstalled) { - isAllInstalled = false - return@forEach + if (position <= index) { + var isAllInstalled = true + entity.packages.forEach { + val isInstalled = PackageUtils.isInstalled(context, it) + if (!isInstalled) { + isAllInstalled = false + return@forEach + } } - } - if (isAllInstalled) { - holder.binding.statusTv.text = "已安装" - holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font)) + if (isAllInstalled) { + holder.binding.statusTv.text = "已安装" + holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font)) + } else { + holder.binding.statusTv.text = "未安装" + holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.text_FF4147)) + } + holder.binding.statusTv.visibility = View.VISIBLE } else { - holder.binding.statusTv.text = "未安装" - holder.binding.statusTv.setTextColor(ContextCompat.getColor(context, R.color.text_FF4147)) + holder.binding.statusTv.visibility = View.GONE } } } @@ -240,6 +250,10 @@ class PackageCheckDialogFragment : BaseDialogFragment() { callBack.onConfirm() return } + if (isAllPackageInstalled(packageDialogEntity)) { + callBack.onConfirm() + return + } val isChoose = SPUtils.getBoolean(Constants.SP_PACKAGE_CHECK, false) if (packageDialogEntity.level == "OPTIONAL_HINT" && isChoose) { callBack.onConfirm() @@ -255,5 +269,19 @@ class PackageCheckDialogFragment : BaseDialogFragment() { dialogFragment.show(activity.supportFragmentManager, PackageCheckDialogFragment::class.java.simpleName) } + + fun isAllPackageInstalled(packageDialogEntity: PackageDialogEntity): Boolean { + var isAllInstalled = true + packageDialogEntity.detectionObjects.forEach { obj -> + obj.packages.forEach { + val isInstalled = PackageUtils.isInstalled(HaloApp.getInstance(), it) + if (!isInstalled) { + isAllInstalled = false + return isAllInstalled + } + } + } + return isAllInstalled + } } } \ 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 e571a1e0fa..9dfeacb612 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -508,16 +508,14 @@ public class DownloadItemUtils { clickCallback.onCallback(); } PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { - PackageCheckDialogFragment.show((AppCompatActivity) context, gameEntity.getPackageDialog(), () -> { - CertificationDialog.showCertificationDialog(context, gameEntity, () -> { - DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { - DownloadDialog.showDownloadDialog( - v.getContext(), - gameEntity, - traceEvent, - entrance, - location); - }); + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { + DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { + DownloadDialog.showDownloadDialog( + v.getContext(), + gameEntity, + traceEvent, + entrance, + location); }); }); }); @@ -617,16 +615,14 @@ public class DownloadItemUtils { clickCallback.onCallback(); } PermissionHelper.checkStoragePermissionBeforeAction(context, () -> { - PackageCheckDialogFragment.show((AppCompatActivity) context, gameEntity.getPackageDialog(), () -> { - CertificationDialog.showCertificationDialog(context, gameEntity, () -> { - DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { - DownloadDialog.showDownloadDialog( - v.getContext(), - gameEntity, - traceEvent, - entrance, - location); - }); + CertificationDialog.showCertificationDialog(context, gameEntity, () -> { + DialogUtils.showVersionNumberDialog(context, gameEntity, () -> { + DownloadDialog.showDownloadDialog( + v.getContext(), + gameEntity, + traceEvent, + entrance, + location); }); }); }); diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt index 63fce2a68e..797df214ca 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt @@ -2,11 +2,13 @@ package com.gh.download.dialog import android.content.Context import android.view.View +import androidx.appcompat.app.AppCompatActivity import com.gh.base.BaseActivity import com.gh.base.BaseRecyclerViewHolder import com.gh.common.constant.Config import com.gh.common.dialog.CertificationDialog import com.gh.common.dialog.DeviceRemindDialog +import com.gh.common.dialog.PackageCheckDialogFragment import com.gh.common.exposure.ExposureEvent import com.gh.common.util.* import com.gh.common.util.DirectUtils.directToLinkPage @@ -24,6 +26,7 @@ import com.lightgame.download.DownloadStatus import com.lightgame.download.FileUtils import com.lightgame.utils.AppManager import com.lightgame.utils.Utils +import io.sentry.core.protocol.App class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : BaseRecyclerViewHolder(binding.root) { @@ -278,19 +281,21 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas if (msg.isNullOrEmpty()) { DownloadDialogHelper.findAvailableDialogAndShow(context, gameEntity, apkEntity, object : EmptyCallback { override fun onCallback() { - CertificationDialog.showCertificationDialog(context, gameEntity, DialogUtils.ConfirmListener { - DialogUtils.checkDownload(context, apkEntity.size) { isSubscribe -> - DownloadManager.createDownload( - context, - apkEntity, - gameEntity, - downloadMethod, - entrance, - location, - isSubscribe, traceEvent) + PackageCheckDialogFragment.show(context as AppCompatActivity, gameEntity.packageDialog, DialogUtils.ConfirmListener { + CertificationDialog.showCertificationDialog(context, gameEntity, DialogUtils.ConfirmListener { + DialogUtils.checkDownload(context, apkEntity.size) { isSubscribe -> + DownloadManager.createDownload( + context, + apkEntity, + gameEntity, + downloadMethod, + entrance, + location, + isSubscribe, traceEvent) - DeviceRemindDialog.showDeviceRemindDialog(context, gameEntity) - } + DeviceRemindDialog.showDeviceRemindDialog(context, gameEntity) + } + }) }) } }) 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 c204fb320e..bb8a9dc043 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 @@ -180,16 +180,14 @@ public class DetailViewHolder { }); } else { - PackageCheckDialogFragment.show((AppCompatActivity) mViewHolder.context, mGameEntity.getPackageDialog(), () -> { - CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity, () -> { - DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { - DownloadDialog.showDownloadDialog( - mViewHolder.context, - mGameEntity, - mTraceEvent, - StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), - mName + ":" + mTitle); - }); + CertificationDialog.showCertificationDialog(mViewHolder.context, mGameEntity, () -> { + DialogUtils.showVersionNumberDialog(mViewHolder.context, mGameEntity, () -> { + DownloadDialog.showDownloadDialog( + mViewHolder.context, + mGameEntity, + mTraceEvent, + StringUtils.buildString(mEntrance, "+(", mName, "[", mTitle, "])"), + mName + ":" + mTitle); }); }); } diff --git a/app/src/main/res/layout/fragment_package_check.xml b/app/src/main/res/layout/fragment_package_check.xml index e12b52ee34..b0bbf59660 100644 --- a/app/src/main/res/layout/fragment_package_check.xml +++ b/app/src/main/res/layout/fragment_package_check.xml @@ -7,9 +7,9 @@ android:layout_height="wrap_content" android:background="@drawable/background_shape_white_radius_6" android:paddingLeft="24dp" - android:paddingTop="22dp" + android:paddingTop="20dp" android:paddingRight="24dp" - android:paddingBottom="20dp"> + android:paddingBottom="18dp"> + android:layout_marginTop="4dp" + android:overScrollMode="never" /> + @@ -17,16 +18,16 @@ + tools:text="已安装" + tools:visibility="visible" /> \ No newline at end of file