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 602949e2a2..58a9da3ed3 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -51,8 +51,8 @@ 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 SIMULATOR_DOWNLOAD = "下载模拟器"; + public static final String SIMULATOR_GAME = "simulator_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/simulator/SimulatorDownloadManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt index 52acfe7b5d..37e4d4b718 100644 --- a/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt +++ b/app/src/main/java/com/gh/common/simulator/SimulatorDownloadManager.kt @@ -16,7 +16,6 @@ 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 @@ -39,7 +38,7 @@ class SimulatorDownloadManager private constructor() { private val dataWatcher = object : DataWatcher() { override fun onDataChanged(downloadEntity: DownloadEntity?) { - if (downloadEntity?.isEmulatorDownload() == true) { + if (downloadEntity?.isSimulatorDownload() == true) { val size = downloadEntity.progress.toFloat() / 1024 / 1024 val df = DecimalFormat("0.00") appProgressSize!!.text = "${df.format(size.toDouble())}MB" @@ -164,7 +163,7 @@ class SimulatorDownloadManager private constructor() { downloadEntity.gameId = simulator.id downloadEntity.versionName = apkEntity.version - downloadEntity.addMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE, Constants.EMULATOR_DOWNLOAD) + downloadEntity.addMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE, Constants.SIMULATOR_DOWNLOAD) DownloadManager.getInstance(context).cancel(downloadEntity.url, true, true) DownloadManager.getInstance(context).pauseAll() diff --git a/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt index 17178fbad3..045bdc26ce 100644 --- a/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt +++ b/app/src/main/java/com/gh/common/simulator/SimulatorGameManager.kt @@ -1,18 +1,23 @@ package com.gh.common.simulator +import android.annotation.SuppressLint import com.gh.common.constant.Constants import com.gh.common.util.ToastUtils.showToast +import com.gh.common.util.createRequestBodyAny import com.gh.common.util.getMetaExtra +import com.gh.common.util.isSimulatorGame import com.gh.common.util.toJson import com.gh.download.DownloadManager import com.gh.gamecenter.entity.GameEntity -import com.google.gson.JsonObject +import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.RetrofitManager 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 io.reactivex.schedulers.Schedulers +import okhttp3.ResponseBody import java.io.File object SimulatorGameManager { @@ -54,9 +59,8 @@ object SimulatorGameManager { 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) { + if (downloadEntity.isSimulatorGame() && isFileCompleted) { return downloadEntity } } @@ -69,11 +73,11 @@ object SimulatorGameManager { @JvmStatic fun launchSimulatorGame(downloadEntity: DownloadEntity, gameEntity: GameEntity) { - val map = HashMap() + 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_icon"] = gameEntity.icon ?: "" map["game_type"] = gameEntity.simulatorType if (gameEntity.simulatorType == "FBA") { map["rom_name"] = downloadEntity.path.substring(downloadEntity.path.lastIndexOf('/') + 1) @@ -82,7 +86,49 @@ object SimulatorGameManager { val params = map.toJson() showToast("启动模拟器游戏-" + downloadEntity.name) Utils.log(params) + recordPlaySimulatorGames(gameEntity.id) } + /** + * 记录设备下载的模拟器游戏 + */ + @SuppressLint("CheckResult") + @JvmStatic + fun recordDownloadSimulatorGames(gameId: String) { + val requestMap = hashMapOf() + requestMap["game_id"] = gameId + requestMap["package"] = "-" + val body = requestMap.createRequestBodyAny() + RetrofitManager.getInstance(HaloApp.getInstance().application).api + .downloadSimulatorGames(HaloApp.getInstance().gid, body) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + + } + }) + } + + + /** + * 记录启动设备上的模拟器游戏 + */ + @SuppressLint("CheckResult") + fun recordPlaySimulatorGames(gameId: String) { + val requestMap = hashMapOf() + requestMap["game_id"] = gameId + requestMap["package"] = "-" + val body = requestMap.createRequestBodyAny() + RetrofitManager.getInstance(HaloApp.getInstance().application).api + .playedSimulatorGames(HaloApp.getInstance().gid, body) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + + } + }) + } } \ 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 176f159614..ff3946dedd 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -9,7 +9,6 @@ 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; @@ -227,7 +226,7 @@ public class DownloadItemUtils { if (entryMap != null && !entryMap.isEmpty()) { DownloadEntity downloadEntity = entryMap.get(apkEntity.getPlatform()); if (downloadEntity != null) { - if (downloadEntity.getMeta().containsKey(Constants.EMULATOR_GAME)) { + if (ExtensionsKt.isSimulatorGame(downloadEntity)) { if (downloadEntity.getStatus() != DownloadStatus.done) { // 更改进度条和提示文本的状态 changeStatus(context, holder, downloadEntity, isShowPlatform, true); 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 f963dd4987..2599132a4c 100644 --- a/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt +++ b/app/src/main/java/com/gh/common/util/DownloadNotificationHelper.kt @@ -45,7 +45,7 @@ object DownloadNotificationHelper { val xapkStatus = entity.meta[XapkInstaller.XAPK_UNZIP_STATUS] if (entity.getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) == Constants.SILENT_UPDATE) return - if (entity.getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) == Constants.EMULATOR_DOWNLOAD) return + if (entity.getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) == Constants.SIMULATOR_DOWNLOAD) return val intent = Intent() if (entity.status == DownloadStatus.done && xapkStatus != XapkUnzipStatus.FAILURE.name) { @@ -116,7 +116,7 @@ object DownloadNotificationHelper { || (entity.status == DownloadStatus.done // 触发安装事件以后也 cancel 掉通知 && !entity.meta[Constants.MARK_ALREADY_TRIGGERED_INSTALLATION].isNullOrEmpty() && xapkStatus != XapkUnzipStatus.FAILURE.name) - ||entity.status == DownloadStatus.done && entity.getMetaExtra(Constants.EMULATOR_GAME).isNotEmpty()) {//模拟器游戏下载完需要cancel掉通知 + ||entity.status == DownloadStatus.done && entity.isSimulatorGame()) {//模拟器游戏下载完需要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 ab160df4e0..f757d78362 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -7,6 +7,7 @@ import com.gh.base.BaseActivity import com.gh.common.constant.Constants import com.gh.common.exposure.ExposureUtils import com.gh.common.simulator.SimulatorDownloadManager +import com.gh.common.simulator.SimulatorGameManager import com.gh.common.xapk.XapkInstaller import com.gh.download.DownloadDataHelper import com.gh.download.DownloadManager @@ -131,19 +132,20 @@ object DownloadObserver { Utils.toast(mApplication, downloadEntity.name + " - 下载完成") } if (!downloadEntity.isPluggable) { - if (downloadEntity.getMetaExtra(Constants.EMULATOR_GAME).isNotEmpty()) { + if (downloadEntity.isSimulatorGame()) { 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) } + SimulatorGameManager.recordDownloadSimulatorGames(gameEntity.id) } } 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 (downloadType == Constants.SIMULATOR_DOWNLOAD || isAutoInstall) { if (FileUtils.isEmptyFile(downloadEntity.path)) { Utils.toast(mApplication, R.string.install_failure_hint) downloadManager.cancel(downloadEntity.url) diff --git a/app/src/main/java/com/gh/common/util/Extensions.kt b/app/src/main/java/com/gh/common/util/Extensions.kt index e188bf8232..5321198508 100644 --- a/app/src/main/java/com/gh/common/util/Extensions.kt +++ b/app/src/main/java/com/gh/common/util/Extensions.kt @@ -661,8 +661,13 @@ fun DownloadEntity.getMetaExtra(key: String): String { fun DownloadEntity.isSilentUpdate(): Boolean { return Constants.SILENT_UPDATE == getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) } -fun DownloadEntity.isEmulatorDownload(): Boolean { - return Constants.EMULATOR_DOWNLOAD == getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) + +fun DownloadEntity.isSimulatorDownload(): Boolean { + return Constants.SIMULATOR_DOWNLOAD == getMetaExtra(Constants.EXTRA_DOWNLOAD_TYPE) +} + +fun DownloadEntity.isSimulatorGame(): Boolean { + return getMetaExtra(Constants.SIMULATOR_GAME).isNotEmpty() } /** diff --git a/app/src/main/java/com/gh/download/DownloadDataHelper.kt b/app/src/main/java/com/gh/download/DownloadDataHelper.kt index 73895726d3..325c353c39 100644 --- a/app/src/main/java/com/gh/download/DownloadDataHelper.kt +++ b/app/src/main/java/com/gh/download/DownloadDataHelper.kt @@ -1,9 +1,13 @@ package com.gh.download import android.content.pm.PackageManager +import com.gh.common.constant.Constants import com.gh.common.exposure.meta.MetaUtil.getMeta import com.gh.common.loghub.LoghubUtils import com.gh.common.util.DeviceUtils +import com.gh.common.util.getMetaExtra +import com.gh.common.util.isSimulatorDownload +import com.gh.common.util.isSimulatorGame import com.gh.gamecenter.BuildConfig import com.halo.assistant.HaloApp import com.lightgame.download.DownloadEntity @@ -49,6 +53,9 @@ object DownloadDataHelper { } else if (status == DownloadStatus.subscribe || status == DownloadStatus.neterror || status == DownloadStatus.timeout) { "暂停下载-连上WiFi自动下载" } else if (status == DownloadStatus.done) { + if(downloadEntity.isSimulatorGame()){ + return "下载完成" + } val pm = HaloApp.getInstance().application.applicationContext.packageManager val packageInfo = pm.getPackageArchiveInfo(downloadEntity.path, PackageManager.GET_ACTIVITIES) if (packageInfo == null) { diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 030eaf6fa3..bd91ec577f 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -264,7 +264,7 @@ public class DownloadManager implements DownloadStatusListener { 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()); + ExtensionsKt.addMetaExtra(downloadEntity, Constants.SIMULATOR_GAME, apkEntity.getFormat()); HaloApp.put(GameEntity.class.getSimpleName(), gameEntity); } int installed = 0; @@ -533,9 +533,9 @@ public class DownloadManager implements DownloadStatusListener { if (downloadEntityList == null) return filteredDownloadEntityList; for (DownloadEntity downloadEntity : downloadEntityList) { - if (TextUtils.isEmpty(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EMULATOR_GAME))) { + if (!ExtensionsKt.isSimulatorGame(downloadEntity)) { if (!Constants.SILENT_UPDATE.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE)) && - !Constants.EMULATOR_DOWNLOAD.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE))) { + !Constants.SIMULATOR_DOWNLOAD.equals(ExtensionsKt.getMetaExtra(downloadEntity, Constants.EXTRA_DOWNLOAD_TYPE))) { filteredDownloadEntityList.add(downloadEntity); } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 24130fe735..15881a9324 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -46,6 +46,7 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.DirectUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.ExtensionsKt; import com.gh.common.util.HomePluggableHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.LunchType; @@ -434,7 +435,7 @@ public class MainActivity extends BaseActivity { || PackageUtils.isSignedByGh(getApplicationContext(), entity.getPackageName()))) { continue; } - if (entity.getMeta().containsKey(Constants.EMULATOR_GAME)) continue; + if (ExtensionsKt.isSimulatorGame(entity)) continue; if (downloadEntity == null) { downloadEntity = entity; } else if (entity.getEnd() > downloadEntity.getEnd()) { diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java index 4155098578..c4a1c0214f 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java @@ -178,7 +178,7 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi return; } //下载模拟器任务不需要添加 - if (ExtensionsKt.isEmulatorDownload(downloadEntity)) { + if (ExtensionsKt.isSimulatorDownload(downloadEntity)) { return; } 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 c898d0b6db..a4d3c8f62b 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java @@ -640,7 +640,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { for (DownloadEntity downloadEntity : DownloadManager.getInstance(mContext).getAllDownloadEntityExcludeSilentUpdate()) { statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus().name()); if (DownloadStatus.done.equals(downloadEntity.getStatus())) { - if(!downloadEntity.getMeta().containsKey(Constants.EMULATOR_GAME)) { + if(!ExtensionsKt.isSimulatorGame(downloadEntity)) { urlMap.put(PackageUtils.getPackageNameByPath(mContext, downloadEntity.getPath()), downloadEntity.getUrl()); doneList.add(downloadEntity); diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 92674258e1..f78cb1f618 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -2672,4 +2672,16 @@ public interface ApiService { @GET("users/icon_borders") Observable> getPendants(); + /** + * 记录设备下载的模拟器游戏 + */ + @POST("devices/{device_id}/download_simulator_games") + Single downloadSimulatorGames(@Path("device_id") String deviceId,@Body RequestBody body); + + /** + * 启动设备上的模拟器游戏 + */ + @POST("devices/{device_id}/played_simulator_games") + Single playedSimulatorGames(@Path("device_id") String deviceId,@Body RequestBody body); + } \ No newline at end of file