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 22129ca4e4..602949e2a2 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -52,6 +52,7 @@ public class Constants { public static final String EXTRA_DOWNLOAD_TYPE = "extra_download_type"; public static final String SILENT_UPDATE = "静默更新"; public static final String EMULATOR_DOWNLOAD = "下载模拟器"; + public static final String EMULATOR_GAME = "emulator_game"; public static final String LAST_GHZS_UPDATE_FILE_SIZE = "last_ghzs_update_file_size"; // 新用户首次启动光环的时间 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 24a337cdfd..7971549aac 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -19,11 +19,11 @@ import com.gh.base.OnViewClickListener; import com.gh.common.constant.Config; import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.ReserveDialogFragment; -import com.gh.common.emulator.EmulatorDownloadManager; -import com.gh.common.emulator.EmulatorGameManager; import com.gh.common.exposure.ExposureEvent; import com.gh.common.history.HistoryHelper; import com.gh.common.repository.ReservationRepository; +import com.gh.common.simulator.SimulatorDownloadManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; @@ -41,7 +41,6 @@ import com.gh.common.util.PackageUtils; import com.gh.common.util.PermissionHelper; import com.gh.common.util.PlatformUtils; import com.gh.common.util.ReservationHelper; -import com.gh.common.util.ToastUtils; import com.gh.common.view.DownloadProgressBar; import com.gh.common.view.DrawableView; import com.gh.common.view.GameIconView; @@ -54,7 +53,6 @@ import com.gh.gamecenter.baselist.LoadStatus; import com.gh.gamecenter.databinding.KaifuAddItemBinding; import com.gh.gamecenter.databinding.KaifuDetailItemRowBinding; import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.EmulatorGameEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.LinkEntity; import com.gh.gamecenter.entity.PluginLocation; @@ -441,11 +439,13 @@ public class BindingAdapters { case PLUGIN: if (gameEntity.getApk().size() == 1) { ApkEntity apk = gameEntity.getApk().get(0); - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(gameEntity.getName()); - boolean isInstalled = PackageUtils.isInstalled(v.getContext(), apk.getPackageName()); - if (emulatorGameEntity != null && EmulatorGameManager.isEmulatorGame(apk.getFormat()) && !isInstalled) { - EmulatorDownloadManager.getInstance().showDownloadDialog(v.getContext(), gameEntity); - return; + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apk.getUrl()); + if (gameEntity.getSimulator() != null) { + boolean isInstalled = PackageUtils.isInstalled(v.getContext(), gameEntity.getSimulator().getApk().getPackageName()); + if (downloadEntity != null && SimulatorGameManager.isSimulatorGame(gameEntity) && !isInstalled) { + SimulatorDownloadManager.getInstance().showDownloadDialog(v.getContext(), gameEntity.getSimulator()); + return; + } } DialogUtils.showEmulatorGameDialog(v.getContext(), gameEntity, () -> { @@ -476,16 +476,16 @@ public class BindingAdapters { case LAUNCH_OR_OPEN: if (gameEntity.getApk().size() == 1) { //启动模拟器游戏 - if (EmulatorGameManager.isEmulatorGame(gameEntity.getApk().get(0).getFormat())) { - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(gameEntity.getName()); - if (emulatorGameEntity != null) { - File file = new File(emulatorGameEntity.getFilePath()); + if (SimulatorGameManager.isSimulatorGame(gameEntity)) { + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl()); + if (downloadEntity != null) { + File file = new File(downloadEntity.getPath()); if (!file.exists()) { download(progressBar, gameEntity, traceEvent, false, entrance, location); return; } - ToastUtils.INSTANCE.showToast("启动模拟器游戏-" + emulatorGameEntity.getGameName()); + SimulatorGameManager.launchSimulatorGame(downloadEntity, gameEntity); } return; } diff --git a/app/src/main/java/com/gh/common/emulator/EmulatorGameDao.kt b/app/src/main/java/com/gh/common/emulator/EmulatorGameDao.kt deleted file mode 100644 index 817285c955..0000000000 --- a/app/src/main/java/com/gh/common/emulator/EmulatorGameDao.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.gh.common.emulator - -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.OnConflictStrategy -import androidx.room.Query -import com.gh.gamecenter.entity.EmulatorGameEntity - -@Dao -interface EmulatorGameDao { - - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insert(event: EmulatorGameEntity) - - @Query("SELECT * from EmulatorGameEntity") - fun getAll(): List - - @Query("SELECT * from EmulatorGameEntity where gameName = :gameName") - fun getGameEntity(gameName: String?): List - - @Query("delete from EmulatorGameEntity where gameName = :gameName") - fun deleteGameEntity(gameName: String?) - -} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/emulator/EmulatorGameDatabase.kt b/app/src/main/java/com/gh/common/emulator/EmulatorGameDatabase.kt deleted file mode 100644 index b6e29d9a02..0000000000 --- a/app/src/main/java/com/gh/common/emulator/EmulatorGameDatabase.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.gh.common.emulator - -import androidx.room.Database -import androidx.room.Room -import androidx.room.RoomDatabase -import com.gh.gamecenter.entity.EmulatorGameEntity -import com.halo.assistant.HaloApp - -@Database(entities = [EmulatorGameEntity::class], version = 1, exportSchema = false) -abstract class EmulatorGameDatabase :RoomDatabase(){ - - abstract fun emulatorGameDao(): EmulatorGameDao - - companion object{ - val instance by lazy { - Room.databaseBuilder(HaloApp.getInstance().application, EmulatorGameDatabase::class.java, "emulator_game") - .build() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/emulator/EmulatorGameManager.kt b/app/src/main/java/com/gh/common/emulator/EmulatorGameManager.kt deleted file mode 100644 index bfd62ba923..0000000000 --- a/app/src/main/java/com/gh/common/emulator/EmulatorGameManager.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.gh.common.emulator - -import com.gh.common.runOnIoThread -import com.gh.gamecenter.entity.EmulatorGameEntity -import com.halo.assistant.HaloApp -import com.lightgame.download.FileUtils -import java.io.File -import java.util.* - -object EmulatorGameManager { - - @JvmField - val formats = arrayListOf("gba", "zip", "nes", "iso", "smc", "gbc") - - private val gamePath = FileUtils.getDownloadPath(HaloApp.getInstance().application, "emulator_game") - - var localGameSet = hashSetOf() - - @JvmStatic - fun getPathByFormat(format: String): String { - val directoryName = format.toUpperCase(Locale.getDefault()) - return "${gamePath}/${directoryName}" - } - - //刷新数据库记录下载的所有的游戏 - @JvmStatic - fun refreshLocalPackageList() { - localGameSet.clear() - runOnIoThread { - val gameEntityList = EmulatorGameDatabase.instance.emulatorGameDao().getAll() - localGameSet.addAll(gameEntityList) - } - } - - @JvmStatic - fun addGameToDatabase(gameEntity: EmulatorGameEntity) { - runOnIoThread { - EmulatorGameDatabase.instance.emulatorGameDao().insert(gameEntity) - } - } - - @JvmStatic - fun deleteLocalGames(names: List) { - runOnIoThread { - localGameSet.forEach { - if (names.contains(it.gameName)) { - val file = File(it.filePath) - if (file.exists()) { - file.delete() - EmulatorGameDatabase.instance.emulatorGameDao().deleteGameEntity(it.gameName) - } - } - } - refreshLocalPackageList() - } - - } - - @JvmStatic - fun deleteLocalGame(name: String) { - runOnIoThread { - val gameEntity = localGameSet.find { it.gameName == name } - if (gameEntity != null) { - val file = File(gameEntity.filePath) - if (file.exists()) { - file.delete() - EmulatorGameDatabase.instance.emulatorGameDao().deleteGameEntity(gameEntity.gameName) - } - refreshLocalPackageList() - } - } - - } - - @JvmStatic - fun findGameByName(name: String?): EmulatorGameEntity? { - return localGameSet.find { it.gameName == name ?: "" } - } - - @JvmStatic - fun isEmulatorGame(format: String) = formats.contains(format) - - -} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt new file mode 100644 index 0000000000..52acfe7b5d --- /dev/null +++ b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt @@ -0,0 +1,187 @@ +package com.gh.common.simulator + +import android.app.Dialog +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.view.Window +import android.widget.ProgressBar +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import com.g00fy2.versioncompare.Version +import com.gh.common.AppExecutor.uiExecutor +import com.gh.common.constant.Constants +import com.gh.common.util.* +import com.gh.common.util.PackageInstaller.getDownloadPath +import com.gh.download.DownloadManager +import com.gh.gamecenter.R +import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.SimulatorEntity +import com.halo.assistant.HaloApp +import com.lightgame.download.DataWatcher +import com.lightgame.download.DownloadEntity +import com.lightgame.download.DownloadStatus +import com.lightgame.download.FileUtils +import com.lightgame.utils.Utils +import java.text.DecimalFormat + +class SimulatorDownloadManager private constructor() { + + private var app_pb_progress: ProgressBar? = null + private var appProgressSize: TextView? = null + private var appProgressRemain: TextView? = null + private var appProgressPercent: TextView? = null + private var appProgressFilling: View? = null + private var appProgressAnchor: View? = null + + private var downloadDialog: Dialog? = null + + private val dataWatcher = object : DataWatcher() { + override fun onDataChanged(downloadEntity: DownloadEntity?) { + if (downloadEntity?.isEmulatorDownload() == true) { + val size = downloadEntity.progress.toFloat() / 1024 / 1024 + val df = DecimalFormat("0.00") + appProgressSize!!.text = "${df.format(size.toDouble())}MB" + appProgressRemain!!.text = String.format("剩余%s", SpeedUtils.getRemainSecondTime(downloadEntity.size, + downloadEntity.progress, downloadEntity.speed * 1024)) + app_pb_progress!!.progress = (downloadEntity.percent * 10).toInt() + + val width = app_pb_progress!!.width + val marLeft = (downloadEntity.percent / 100 * width).toInt() + val anchorLp = appProgressAnchor!!.layoutParams + if (anchorLp is ConstraintLayout.LayoutParams) { + anchorLp.leftMargin = marLeft + appProgressAnchor!!.layoutParams = anchorLp + } + + val fillingLp = appProgressFilling!!.layoutParams + fillingLp.width = marLeft + DisplayUtils.dip2px(5f) + appProgressFilling!!.layoutParams = fillingLp + + appProgressPercent?.text = if (downloadEntity.percent != 100.0) "${downloadEntity.percent}%" else "100%" + when { + DownloadStatus.done == downloadEntity.status -> { + DownloadManager.getInstance(HaloApp.getInstance().application).cancel(downloadEntity.url, false, true) + downloadDialog?.dismiss() + + } + DownloadStatus.neterror == downloadEntity.status -> { + ToastUtils.showToast("网络不稳定,下载任务已暂停") + } + DownloadStatus.timeout == downloadEntity.status -> { + ToastUtils.showToast("网络不稳定,下载任务已暂停") + } + DownloadStatus.notfound == downloadEntity.status -> { + ToastUtils.showToast("下载链接异常,请稍后重试") + } + DownloadStatus.hijack == downloadEntity.status -> { + ToastUtils.showToast("网络劫持,请稍后重试") + } + } + } + } + } + + fun showDownloadDialog(context: Context, simulator: SimulatorEntity?) { + //判断是否隐藏 + if (simulator?.active == false) { + showNoneEmulatorDialog(context) + return + } + val isInstalled = PackageUtils.isInstalled(context, simulator?.apk?.packageName) + val versionFromInstalledApp = PackageUtils.getVersionByPackage(simulator?.apk?.packageName) + val shouldShowUpdate = Version(simulator?.apk?.version).isHigherThan(versionFromInstalledApp) + val title = if (shouldShowUpdate && isInstalled) "更新模拟器" else "安装模拟器" + val message = if (shouldShowUpdate && isInstalled) "检测到模拟器存在更高版本,是否前往更新" else "模拟器游戏需要先下载安装对应的模拟器,才可以运行" + val positiveText = if (shouldShowUpdate && isInstalled) "更新(${simulator?.apk?.size})" else "下载(${simulator?.apk?.size})" + val negativeText = if (shouldShowUpdate && isInstalled) "下次再说" else "取消" + + DialogUtils.showNewAlertDialog(context, title, message, negativeText, positiveText, null, { + showDownloadingDialog(context, simulator) + }) + } + + private fun showDownloadingDialog(context: Context, simulator: SimulatorEntity?) { + val msg = FileUtils.isCanDownload(context, simulator?.apk?.size) + if (!msg.isNullOrEmpty()) { + Utils.toast(context, msg) + return + } + if (NetworkUtils.isMobileConnected(context)) { + Utils.toast(context, "当前使用移动数据进行下载") + } + + downloadDialog = Dialog(context) + downloadDialog?.window?.setBackgroundDrawableResource(R.color.transparent) + + val view = View.inflate(context, R.layout.download_simulator_dialog, null) + + app_pb_progress = view.findViewById(R.id.progress) + appProgressSize = view.findViewById(R.id.size) + appProgressRemain = view.findViewById(R.id.remain) + appProgressAnchor = view.findViewById(R.id.progress_anchor) + appProgressPercent = view.findViewById(R.id.percent) + appProgressFilling = view.findViewById(R.id.progress_filling) + + view.findViewById(R.id.app_tv_cancel).setOnClickListener { + DownloadManager.getInstance(context).cancel(simulator?.apk?.url) + downloadDialog?.dismiss() + } + + downloadDialog?.setOnDismissListener { + DownloadManager.getInstance(context).removeObserver(dataWatcher) + } + + val dialogWidth: Int = context.resources.displayMetrics.widthPixels - DisplayUtils.dip2px(60f) + downloadDialog?.setCanceledOnTouchOutside(false) + downloadDialog?.setCancelable(false) + downloadDialog?.closeOptionsMenu() + downloadDialog?.requestWindowFeature(Window.FEATURE_NO_TITLE) + downloadDialog?.setContentView(view, ViewGroup.LayoutParams(dialogWidth, ViewGroup.LayoutParams.WRAP_CONTENT)) + + createDownload(context, simulator) + + downloadDialog?.show() + } + + private fun showNoneEmulatorDialog(context: Context) { + val dialog = DialogUtils.showNewAlertDialog(context, "安装模拟器", "模拟器游戏需要先下载安装对应的模拟器,才可以运行", "取消", "暂无下载", null, { + ToastUtils.showToast("该模拟器暂未提供下载") + }) + dialog?.window?.findViewById(R.id.confirm)?.setTextColor(ContextCompat.getColor(context, R.color.text_cccccc)) + } + + private fun createDownload(context: Context, simulator: SimulatorEntity?) { + DownloadManager.getInstance(context).addObserver(dataWatcher) + val apkEntity = simulator?.apk ?: return + val downloadEntity = DownloadEntity() + downloadEntity.url = apkEntity.url + downloadEntity.name = simulator.name + downloadEntity.path = getDownloadPath(simulator.name, apkEntity.format) + downloadEntity.platform = apkEntity.getPlatform() + downloadEntity.packageName = apkEntity.packageName + downloadEntity.gameId = simulator.id + downloadEntity.versionName = apkEntity.version + + downloadEntity.addMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE, Constants.EMULATOR_DOWNLOAD) + + DownloadManager.getInstance(context).cancel(downloadEntity.url, true, true) + DownloadManager.getInstance(context).pauseAll() + + uiExecutor.executeWithDelay(Runnable { DownloadManager.getInstance(context).add(downloadEntity) }, 200) + } + + + companion object { + @Volatile + private var instance: SimulatorDownloadManager? = null + + @JvmStatic + fun getInstance(): SimulatorDownloadManager { + return instance ?: synchronized(this) { + instance ?: SimulatorDownloadManager().also { instance = it } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt new file mode 100644 index 0000000000..17178fbad3 --- /dev/null +++ b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt @@ -0,0 +1,88 @@ +package com.gh.common.simulator + +import com.gh.common.constant.Constants +import com.gh.common.util.ToastUtils.showToast +import com.gh.common.util.getMetaExtra +import com.gh.common.util.toJson +import com.gh.download.DownloadManager +import com.gh.gamecenter.entity.GameEntity +import com.google.gson.JsonObject +import com.halo.assistant.HaloApp +import com.lightgame.download.DownloadDao +import com.lightgame.download.DownloadEntity +import com.lightgame.download.FileUtils +import com.lightgame.utils.Utils +import org.json.JSONObject +import java.io.File + +object SimulatorGameManager { + + private val gamePath = FileUtils.getDownloadPath(HaloApp.getInstance().application, "emulator_game") + + @JvmStatic + fun getPathByType(type: String) = "${gamePath}/${type}" + + @JvmStatic + fun deleteLocalGames(names: List) { + val downloadEntityList = DownloadDao.getInstance(HaloApp.getInstance().application).all + names.forEach { name -> + val downloadEntity = downloadEntityList.find { it.name == name } + if (downloadEntity != null) { + val file = File(downloadEntity.path) + if (file.exists()) { + file.delete() + DownloadDao.getInstance(HaloApp.getInstance().application).delete(downloadEntity.url) + } + } + } + } + + @JvmStatic + fun deleteLocalGame(name: String) { + val downloadEntityList = DownloadDao.getInstance(HaloApp.getInstance().application).all + val downloadEntity = downloadEntityList.find { it.name == name } + if (downloadEntity != null) { + val file = File(downloadEntity.path) + if (file.exists()) { + file.delete() + DownloadDao.getInstance(HaloApp.getInstance().application).delete(downloadEntity.url) + } + } + } + + @JvmStatic + fun findDownloadEntityByUrl(url: String?): DownloadEntity? { + val downloadEntity = DownloadDao.getInstance(HaloApp.getInstance().application).get(url) + if (downloadEntity != null) { + val metaExtra = downloadEntity.getMetaExtra(Constants.EMULATOR_GAME) + val isFileCompleted = DownloadManager.getInstance(HaloApp.getInstance().application).isFileCompleted(url) + if (metaExtra.isNotEmpty() && isFileCompleted) { + return downloadEntity + } + } + return null + } + + @JvmStatic + fun isSimulatorGame(gameEntity: GameEntity) = gameEntity.category == "simulator" + + + @JvmStatic + fun launchSimulatorGame(downloadEntity: DownloadEntity, gameEntity: GameEntity) { + val map = HashMap() + map["game_path"] = downloadEntity.path + map["default_path"] = downloadEntity.path.substring(0, downloadEntity.path.lastIndexOf('/')) + map["game_name"] = downloadEntity.name + map["game_icon"] = gameEntity.icon?:"" + map["game_type"] = gameEntity.simulatorType + if (gameEntity.simulatorType == "FBA") { + map["rom_name"] = downloadEntity.path.substring(downloadEntity.path.lastIndexOf('/') + 1) + } + + val params = map.toJson() + showToast("启动模拟器游戏-" + downloadEntity.name) + Utils.log(params) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java index 59f4daa6d2..c81d37238f 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -5,6 +5,7 @@ import android.view.View; import com.gh.common.constant.Config; import com.gh.common.repository.ReservationRepository; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.view.DownloadProgressBar; import com.gh.common.xapk.XapkInstaller; import com.gh.common.xapk.XapkUnzipStatus; @@ -148,13 +149,25 @@ public class DetailDownloadUtils { } break; case done: - viewHolder.mDownloadPb.setText(R.string.install); - if (downloadEntity.isPluggable() - && PackagesManager.isInstalled(downloadEntity.getPackageName())) { - viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_PLUGIN); - } else { - viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); + if (SimulatorGameManager.isSimulatorGame(viewHolder.gameEntity)){ + boolean isInstalled = PackageUtils.isInstalled(viewHolder.context, viewHolder.gameEntity.getSimulator().getApk().getPackageName()); + if (isInstalled){ + viewHolder.mDownloadPb.setText(R.string.launch); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.LAUNCH_OR_OPEN); + }else{ + viewHolder.mDownloadPb.setText(R.string.install); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); + } + }else{ + viewHolder.mDownloadPb.setText(R.string.install); + if (downloadEntity.isPluggable() + && PackagesManager.isInstalled(downloadEntity.getPackageName())) { + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_PLUGIN); + } else { + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); + } } + break; case cancel: case hijack: 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 938c9977c0..f61656c1d9 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -38,7 +38,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.gh.common.AppExecutor; import com.gh.common.constant.Config; import com.gh.common.dialog.TrackableDialog; -import com.gh.common.emulator.EmulatorGameManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.view.DrawableView; import com.gh.common.view.FixLinearLayoutManager; import com.gh.common.view.LimitHeightLinearLayout; @@ -1366,7 +1366,7 @@ public class DialogUtils { public static void showEmulatorGameDialog(Context context, GameEntity gameEntity, @NonNull ConfirmListener listener) { context = checkDialogContext(context); - if (!EmulatorGameManager.isEmulatorGame(gameEntity.getApk().get(0).getFormat())) { + if (!SimulatorGameManager.isSimulatorGame(gameEntity)) { listener.onConfirm(); return; } 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 e5e08b0691..176f159614 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -9,14 +9,15 @@ import android.view.View; import android.widget.TextView; import com.gh.common.constant.Config; +import com.gh.common.constant.Constants; import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.ReserveDialogFragment; -import com.gh.common.emulator.EmulatorDownloadManager; -import com.gh.common.emulator.EmulatorGameManager; import com.gh.common.exposure.ExposureEvent; import com.gh.common.history.HistoryHelper; import com.gh.common.repository.ReservationRepository; +import com.gh.common.simulator.SimulatorDownloadManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.xapk.XapkInstaller; import com.gh.common.xapk.XapkUnzipStatus; import com.gh.download.DownloadManager; @@ -26,7 +27,6 @@ import com.gh.gamecenter.R; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.GameViewHolder; import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.EmulatorGameEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.LinkEntity; import com.gh.gamecenter.entity.PluginLocation; @@ -227,9 +227,18 @@ public class DownloadItemUtils { if (entryMap != null && !entryMap.isEmpty()) { DownloadEntity downloadEntity = entryMap.get(apkEntity.getPlatform()); if (downloadEntity != null) { - // 更改进度条和提示文本的状态 - changeStatus(context, holder, downloadEntity, isShowPlatform, true); - return; + if (downloadEntity.getMeta().containsKey(Constants.EMULATOR_GAME)) { + if (downloadEntity.getStatus() != DownloadStatus.done) { + // 更改进度条和提示文本的状态 + changeStatus(context, holder, downloadEntity, isShowPlatform, true); + return; + } + } else { + // 更改进度条和提示文本的状态 + changeStatus(context, holder, downloadEntity, isShowPlatform, true); + return; + } + } } @@ -576,24 +585,26 @@ public class DownloadItemUtils { }); } } else if (str.equals(context.getString(R.string.install))) { - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(gameEntity.getName()); - boolean isInstalled = PackageUtils.isInstalled(context, apk.getPackageName()); - if (emulatorGameEntity != null && EmulatorGameManager.isEmulatorGame(apk.getFormat()) && !isInstalled) { - EmulatorDownloadManager.getInstance().showDownloadDialog(context, gameEntity); - return; + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apk.getUrl()); + if (gameEntity.getSimulator() != null) { + boolean isInstalled = PackageUtils.isInstalled(context, gameEntity.getSimulator().getApk().getPackageName()); + if (downloadEntity != null && SimulatorGameManager.isSimulatorGame(gameEntity) && !isInstalled) { + SimulatorDownloadManager.getInstance().showDownloadDialog(context, gameEntity.getSimulator()); + return; + } } install(context, gameEntity, position, adapter); } else if (str.equals(context.getString(R.string.launch))) { //启动模拟器游戏 - if (EmulatorGameManager.isEmulatorGame(gameEntity.getApk().get(0).getFormat())) { - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(gameEntity.getName()); - if (emulatorGameEntity != null) { - File file = new File(emulatorGameEntity.getFilePath()); + if (SimulatorGameManager.isSimulatorGame(gameEntity)) { + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl()); + if (downloadEntity != null) { + File file = new File(downloadEntity.getPath()); if (!file.exists()) { download(context, gameEntity, downloadBtn, entrance, location, false, traceEvent); return; } - ToastUtils.INSTANCE.showToast("启动模拟器游戏-" + emulatorGameEntity.getGameName()); + SimulatorGameManager.launchSimulatorGame(downloadEntity, gameEntity); } return; } diff --git a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt index e089622236..f963dd4987 100644 --- a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt +++ b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt @@ -115,7 +115,8 @@ object DownloadNotificationHelper { || entity.status == DownloadStatus.overflow || (entity.status == DownloadStatus.done // 触发安装事件以后也 cancel 掉通知 && !entity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION].isNullOrEmpty() - && xapkStatus != XapkUnzipStatus.FAILURE.name)) { + && xapkStatus != XapkUnzipStatus.FAILURE.name) + ||entity.status == DownloadStatus.done && entity.getMetaExtra(Constants.EMULATOR_GAME).isNotEmpty()) {//模拟器游戏下载完需要cancel掉通知 requireUpdateNotificationGroupDelay = true notificationManager.cancel(entity.path, DOWNLOAD_NOTIFICATION_ID) } else { diff --git a/app/src/main/java/com/gh/common/util/DownloadObserver.kt b/app/src/main/java/com/gh/common/util/DownloadObserver.kt index 6068f58e5d..ab160df4e0 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -5,17 +5,14 @@ import android.os.Build import android.preference.PreferenceManager import com.gh.base.BaseActivity import com.gh.common.constant.Constants -import com.gh.common.emulator.EmulatorGameDatabase -import com.gh.common.emulator.EmulatorGameManager import com.gh.common.exposure.ExposureUtils -import com.gh.common.runOnIoThread +import com.gh.common.simulator.SimulatorDownloadManager import com.gh.common.xapk.XapkInstaller import com.gh.download.DownloadDataHelper import com.gh.download.DownloadManager import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.R import com.gh.gamecenter.SuggestionActivity -import com.gh.gamecenter.entity.EmulatorGameEntity import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.entity.SimpleGameEntity import com.gh.gamecenter.eventbus.EBDownloadStatus @@ -134,34 +131,32 @@ object DownloadObserver { Utils.toast(mApplication, downloadEntity.name + " - 下载完成") } if (!downloadEntity.isPluggable) { - - val path = downloadEntity.path - val format = path.substring(path.lastIndexOf(".") + 1) - // 模拟器游戏下载成功 - if (EmulatorGameManager.isEmulatorGame(format)) { - downloadManager.cancel(downloadEntity.url, false, false) - val entity = EmulatorGameEntity(gameName = downloadEntity.name, filePath = downloadEntity.path) - EmulatorGameManager.addGameToDatabase(entity) - EmulatorGameManager.refreshLocalPackageList() - return - } - - val downloadType = downloadEntity.getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) - // 是否是自动安装 - val isAutoInstall = PreferenceManager.getDefaultSharedPreferences(mApplication).getBoolean(SettingsFragment.AUTO_INSTALL_SP_KEY, true) - if (downloadType == Constants.EMULATOR_DOWNLOAD || isAutoInstall) { - if (FileUtils.isEmptyFile(downloadEntity.path)) { - Utils.toast(mApplication, R.string.install_failure_hint) - downloadManager.cancel(downloadEntity.url) - } else { - if (PackageUtils.isCanLaunchSetup(mApplication, downloadEntity.path)) { - downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES" - tryWithDefaultCatch { - PackageInstaller.install(mApplication, downloadEntity, false) - } + if (downloadEntity.getMetaExtra(Constants.EMULATOR_GAME).isNotEmpty()) { + val gameEntity = HaloApp.get(GameEntity::class.java.simpleName, true) as? GameEntity + if (gameEntity?.simulator != null) { + val isInstalled = PackageUtils.isInstalled(HaloApp.getInstance().application, gameEntity.simulator!!.apk!!.packageName) + if (!isInstalled) { + SimulatorDownloadManager.getInstance().showDownloadDialog(AppManager.getInstance().currentActivity(), gameEntity.simulator) + } + } + } else { + val downloadType = downloadEntity.getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) + // 是否是自动安装 + val isAutoInstall = PreferenceManager.getDefaultSharedPreferences(mApplication).getBoolean(SettingsFragment.AUTO_INSTALL_SP_KEY, true) + if (downloadType == Constants.EMULATOR_DOWNLOAD || isAutoInstall) { + if (FileUtils.isEmptyFile(downloadEntity.path)) { + Utils.toast(mApplication, R.string.install_failure_hint) + downloadManager.cancel(downloadEntity.url) } else { - // 弹出卸载提示框 - EventBus.getDefault().post(EBShowDialog(BaseActivity.PLUGGABLE, downloadEntity.path)) + if (PackageUtils.isCanLaunchSetup(mApplication, downloadEntity.path)) { + downloadEntity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION] = "YES" + tryWithDefaultCatch { + PackageInstaller.install(mApplication, downloadEntity, false) + } + } else { + // 弹出卸载提示框 + EventBus.getDefault().post(EBShowDialog(BaseActivity.PLUGGABLE, downloadEntity.path)) + } } } } diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index 7f91123206..f5a6e1706e 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -6,12 +6,11 @@ import android.text.TextUtils; import android.widget.TextView; import com.gh.common.constant.Config; -import com.gh.common.emulator.EmulatorGameManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.download.DownloadManager; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.ApkLink; -import com.gh.gamecenter.entity.EmulatorGameEntity; import com.gh.gamecenter.entity.GameCollectionEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.GameUpdateEntity; @@ -118,12 +117,10 @@ public class GameUtils { installCount++; } } - // TODO: 修改后缀 - apkEntity.setFormat("nes"); - if (EmulatorGameManager.isEmulatorGame(apkEntity.getFormat())) { - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(gameEntity.getName()); - if (emulatorGameEntity != null) { - boolean isInstalled = PackageUtils.isInstalled(context, apkEntity.getPackageName()); + if (SimulatorGameManager.isSimulatorGame(gameEntity)) { + DownloadEntity simulatorDownloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apkEntity.getUrl()); + if (simulatorDownloadEntity != null && gameEntity.getSimulator() != null) { + boolean isInstalled = PackageUtils.isInstalled(context, gameEntity.getSimulator().getApk().getPackageName()); if (isInstalled) { installCount++; } else { @@ -132,15 +129,15 @@ public class GameUtils { } } } - if (doneCount != 0) { - return context.getString(R.string.install); - } else if (pluginCount != 0) { - return context.getString(R.string.pluggable); - } else if (updateCount != 0) { - return context.getString(R.string.update); - } else if (installCount != 0) { + if (installCount != 0) { return context.getString(R.string.launch); - } else if (gameEntity.getVersionNumber().contains("无版号") && Config.isGameDomeSwitchOpen()) { + } else if (pluginCount != 0 && !SimulatorGameManager.isSimulatorGame(gameEntity)) { + return context.getString(R.string.pluggable); + } else if (updateCount != 0 && !SimulatorGameManager.isSimulatorGame(gameEntity)) { + return context.getString(R.string.update); + } else if (doneCount != 0) { + return context.getString(R.string.install); + } else if (gameEntity.getVersionNumber().contains("无版号") && Config.isGameDomeSwitchOpen() && !SimulatorGameManager.isSimulatorGame(gameEntity)) { return context.getString(R.string.attempt); } else { return context.getString(R.string.download); diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 4873be6047..030eaf6fa3 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -10,7 +10,7 @@ import android.text.TextUtils; import com.gh.common.AppExecutor; import com.gh.common.constant.Constants; -import com.gh.common.emulator.EmulatorGameManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.exposure.ExposureEvent; import com.gh.common.exposure.ExposureUtils; import com.gh.common.history.HistoryHelper; @@ -34,6 +34,7 @@ import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.manager.PackagesManager; import com.gh.gamecenter.packagehelper.PackageRepository; import com.google.gson.Gson; +import com.halo.assistant.HaloApp; import com.lightgame.config.CommonDebug; import com.lightgame.download.ConnectionUtils; import com.lightgame.download.DataChanger; @@ -241,12 +242,9 @@ public class DownloadManager implements DownloadStatusListener { } } - //TODO: 模拟器游戏下载测试 - apkEntity.setFormat("nes"); - String path; - if (EmulatorGameManager.isEmulatorGame(apkEntity.getFormat())) { - path = EmulatorGameManager.getPathByFormat(apkEntity.getFormat()) + "/" + gameEntity.getName() + "." + apkEntity.getFormat(); + if (SimulatorGameManager.isSimulatorGame(gameEntity)) { + path = SimulatorGameManager.getPathByType(gameEntity.getSimulatorType()) + "/" + gameEntity.getName() + "." + apkEntity.getFormat(); } else { path = PackageInstaller.getDownloadPath(gameEntity.getName(), apkEntity.getFormat()); } @@ -265,6 +263,10 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setVersionName(apkEntity.getVersion()); ExtensionsKt.addMetaExtra(downloadEntity, Constants.RAW_GAME_ICON, gameEntity.getRawIcon()); ExtensionsKt.addMetaExtra(downloadEntity, Constants.GAME_ICON_SUBSCRIPT, gameEntity.getIconSubscript()); + if (SimulatorGameManager.isSimulatorGame(gameEntity)) { + ExtensionsKt.addMetaExtra(downloadEntity, Constants.EMULATOR_GAME, apkEntity.getFormat()); + HaloApp.put(GameEntity.class.getSimpleName(), gameEntity); + } int installed = 0; for (ApkEntity apk : gameEntity.getApk()) { if (PackagesManager.INSTANCE.isInstalled(apk.getPackageName())) { @@ -531,10 +533,18 @@ public class DownloadManager implements DownloadStatusListener { if (downloadEntityList == null) return filteredDownloadEntityList; for (DownloadEntity downloadEntity : downloadEntityList) { - if (!Constants.SILENT_UPDATE.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE))&& - !Constants.EMULATOR_DOWNLOAD.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE))) { - filteredDownloadEntityList.add(downloadEntity); + if (TextUtils.isEmpty(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EMULATOR_GAME))) { + if (!Constants.SILENT_UPDATE.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE)) && + !Constants.EMULATOR_DOWNLOAD.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE))) { + + filteredDownloadEntityList.add(downloadEntity); + } + } else { + if (downloadEntity.getStatus() != DownloadStatus.done) { + filteredDownloadEntityList.add(downloadEntity); + } } + } return filteredDownloadEntityList; diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 2530d08d11..24130fe735 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -434,6 +434,7 @@ public class MainActivity extends BaseActivity { || PackageUtils.isSignedByGh(getApplicationContext(), entity.getPackageName()))) { continue; } + if (entity.getMeta().containsKey(Constants.EMULATOR_GAME)) continue; if (downloadEntity == null) { downloadEntity = entity; } else if (entity.getEnd() > downloadEntity.getEnd()) { 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 85a917adc2..b479d99a27 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 @@ -9,10 +9,10 @@ import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; import com.gh.common.dialog.GameOffServiceDialogFragment; import com.gh.common.dialog.ReserveDialogFragment; -import com.gh.common.emulator.EmulatorDownloadManager; -import com.gh.common.emulator.EmulatorGameManager; import com.gh.common.exposure.ExposureEvent; import com.gh.common.history.HistoryHelper; +import com.gh.common.simulator.SimulatorDownloadManager; +import com.gh.common.simulator.SimulatorGameManager; import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DataLogUtils; import com.gh.common.util.DataUtils; @@ -26,7 +26,6 @@ import com.gh.common.util.PackageUtils; import com.gh.common.util.PermissionHelper; import com.gh.common.util.ReservationHelper; import com.gh.common.util.StringUtils; -import com.gh.common.util.ToastUtils; import com.gh.common.view.DownloadProgressBar; import com.gh.download.DownloadManager; import com.gh.download.dialog.DownloadDialog; @@ -34,7 +33,6 @@ import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.EmulatorGameEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.LinkEntity; import com.gh.gamecenter.eventbus.EBReuse; @@ -167,12 +165,6 @@ public class DetailViewHolder { PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { if (mGameEntity.getApk().size() == 1) { ApkEntity apk = mGameEntity.getApk().get(0); - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(mGameEntity.getName()); - boolean isInstalled = PackageUtils.isInstalled(mViewHolder.context, apk.getPackageName()); - if (emulatorGameEntity != null && EmulatorGameManager.isEmulatorGame(apk.getFormat()) && !isInstalled) { - EmulatorDownloadManager.getInstance().showDownloadDialog(mViewHolder.context, mGameEntity); - return; - } DialogUtils.showEmulatorGameDialog(mViewHolder.context, mGameEntity, () -> { DownloadDialogHelper.findAvailableDialogAndShow(mViewHolder.context, mGameEntity, apk, @@ -203,15 +195,15 @@ public class DetailViewHolder { case LAUNCH_OR_OPEN: if (mGameEntity.getApk().size() == 1) { //启动模拟器游戏 - if (EmulatorGameManager.isEmulatorGame(mGameEntity.getApk().get(0).getFormat())) { - EmulatorGameEntity emulatorGameEntity = EmulatorGameManager.findGameByName(mGameEntity.getName()); - if (emulatorGameEntity != null) { - File file = new File(emulatorGameEntity.getFilePath()); + if (SimulatorGameManager.isSimulatorGame(mGameEntity)) { + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(mGameEntity.getApk().get(0).getUrl()); + if (downloadEntity != null) { + File file = new File(downloadEntity.getPath()); if (!file.exists()) { download(false); return; } - ToastUtils.INSTANCE.showToast("启动模拟器游戏-" + emulatorGameEntity.getGameName()); + SimulatorGameManager.launchSimulatorGame(downloadEntity, mGameEntity); } return; } @@ -231,6 +223,16 @@ public class DetailViewHolder { break; case INSTALL_PLUGIN: case INSTALL_NORMAL: + ApkEntity apk = mGameEntity.getApk().get(0); + DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apk.getUrl()); + if (mGameEntity.getSimulator() != null) { + boolean isInstalled = PackageUtils.isInstalled(mViewHolder.context, mGameEntity.getSimulator().getApk().getPackageName()); + if (downloadEntity != null && SimulatorGameManager.isSimulatorGame(mGameEntity) && !isInstalled) { + SimulatorDownloadManager.getInstance().showDownloadDialog(mViewHolder.context, mGameEntity.getSimulator()); + return; + } + } + PermissionHelper.checkStoragePermissionBeforeAction(mViewHolder.context, () -> { if (mDownloadEntity == null) { mDownloadEntity = DownloadManager.getInstance(mViewHolder.context).getDownloadEntityByUrl(mGameEntity.getApk().get(0).getUrl()); diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java index aad83aff31..c898d0b6db 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java @@ -9,11 +9,6 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import androidx.collection.ArrayMap; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.RecyclerView.ViewHolder; - import com.gh.common.constant.Constants; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; @@ -48,6 +43,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import androidx.collection.ArrayMap; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.ViewHolder; + /** * Created by LGT on 2016/8/15. */ @@ -640,9 +640,11 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { for (DownloadEntity downloadEntity : DownloadManager.getInstance(mContext).getAllDownloadEntityExcludeSilentUpdate()) { statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus().name()); if (DownloadStatus.done.equals(downloadEntity.getStatus())) { - urlMap.put(PackageUtils.getPackageNameByPath(mContext, - downloadEntity.getPath()), downloadEntity.getUrl()); - doneList.add(downloadEntity); + if(!downloadEntity.getMeta().containsKey(Constants.EMULATOR_GAME)) { + urlMap.put(PackageUtils.getPackageNameByPath(mContext, + downloadEntity.getPath()), downloadEntity.getUrl()); + doneList.add(downloadEntity); + } } else { downloadingList.add(downloadEntity); } diff --git a/app/src/main/java/com/gh/gamecenter/entity/EmulatorGameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/EmulatorGameEntity.kt index e7fd03ccf1..a4d8c5edbc 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/EmulatorGameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/EmulatorGameEntity.kt @@ -1,12 +1,6 @@ package com.gh.gamecenter.entity -import androidx.room.Entity -import androidx.room.PrimaryKey - -@Entity data class EmulatorGameEntity( - @PrimaryKey - val id: String = "", var gameName: String = "", var filePath: String = "" ) \ 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 c8200156ee..aa10808e3f 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -217,6 +217,9 @@ data class GameEntity( var ignoreComment: Boolean = false, @SerializedName("overseas_address_dialog") var overseasAddressDialog: OverseasAddressDialog? = null, + var simulator: SimulatorEntity? = null, + @SerializedName("simulator_type") + var simulatorType: String = "", // 本地字段,使用镜像信息 var useMirrorInfo: Boolean = false, diff --git a/app/src/main/java/com/gh/gamecenter/entity/SimulatorEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/SimulatorEntity.kt new file mode 100644 index 0000000000..c18a0a0899 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/SimulatorEntity.kt @@ -0,0 +1,17 @@ +package com.gh.gamecenter.entity + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class SimulatorEntity( + @SerializedName("_id") + var id: String = "", + var active: Boolean = false, + var name: String = "", + var type: String = "", + @SerializedName("file_type") + var fileType: List = listOf(), + var apk: ApkEntity? = null +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index d4177cf276..09bbafe93c 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -906,7 +906,7 @@ class GameDetailFragment : NormalFragment() { for ((packageName) in mGameEntity!!.getApk()) { if (busFour.packageName == packageName) { ApkActiveUtils.filterHideApk(mGameEntity) - DetailDownloadUtils.detailInitDownload(detailViewHolder, false) + DetailDownloadUtils.detailInitDownload(detailViewHolder, true) } } } diff --git a/app/src/main/java/com/halo/assistant/HaloApp.java b/app/src/main/java/com/halo/assistant/HaloApp.java index b175d933ed..a781bfec3f 100644 --- a/app/src/main/java/com/halo/assistant/HaloApp.java +++ b/app/src/main/java/com/halo/assistant/HaloApp.java @@ -13,7 +13,6 @@ import com.gh.common.FixedRateJobHelper; import com.gh.common.LocalBroadcastReceiver; import com.gh.common.PushManager; import com.gh.common.constant.Config; -import com.gh.common.emulator.EmulatorGameManager; import com.gh.common.exposure.ExposureManager; import com.gh.common.im.ImReceiver; import com.gh.common.loghub.LoghubUtils; @@ -42,6 +41,7 @@ import com.gh.gid.GidHelper; import com.github.piasy.biv.BigImageViewer; import com.github.piasy.biv.loader.fresco.FrescoImageLoader; import com.leon.channel.helper.ChannelReaderUtil; +import com.lightgame.download.HttpDnsManager; import com.lightgame.utils.Utils; import com.llew.huawei.verifier.LoadedApkHuaWei; import com.m7.imkfsdk.chat.ChatActivity; @@ -140,6 +140,7 @@ public class HaloApp extends TinkerAppLike { mChannel = Config.DEFAULT_CHANNEL; } + HttpDnsManager.getInstance(HaloApp.getInstance().getApplication()); PushManager.init(mChannel); DataUtils.init(getApplication(), mChannel); @@ -196,8 +197,6 @@ public class HaloApp extends TinkerAppLike { } AntiBotHelper.getManager(); - // 刷新本地已下载的模拟器游戏 - EmulatorGameManager.refreshLocalPackageList(); }); PlayerFactory.setPlayManager(Exo2PlayerManager.class); CacheFactory.setCacheManager(ExoPlayerCacheManager.class); diff --git a/app/src/main/res/layout/download_simulator_dialog.xml b/app/src/main/res/layout/download_simulator_dialog.xml new file mode 100644 index 0000000000..eea5675e4d --- /dev/null +++ b/app/src/main/res/layout/download_simulator_dialog.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/LGLibrary b/libraries/LGLibrary index cfa175476d..a71a8ae679 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit cfa175476d3001bd7dd70d71081e159e32a5258a +Subproject commit a71a8ae679d813373056161ef58636af2f852429