fix: 修复更新判断异常和首页最近在玩的排序问题

This commit is contained in:
juntao
2022-06-23 17:20:53 +08:00
parent 0af479e441
commit 4e53b1fb91
5 changed files with 38 additions and 21 deletions

View File

@ -194,14 +194,16 @@ public class DetailDownloadUtils {
viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL);
}
} else if (viewHolder.gameEntity.isVGame()) {
if (VHelper.isInstalled(downloadEntity.getPackageName())) {
viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.LAUNCH_OR_OPEN);
} else {
viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL);
}
if (!viewHolder.mDownloadPb.getText().contains("更新")) {
if (VHelper.isInstalled(downloadEntity.getPackageName())) {
viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.LAUNCH_OR_OPEN);
} else {
viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL);
}
viewHolder.mDownloadPb.setText("");
viewHolder.overlayTv.setVisibility(View.VISIBLE);
viewHolder.mDownloadPb.setText("");
viewHolder.overlayTv.setVisibility(View.VISIBLE);
}
} else {
if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) {
viewHolder.mDownloadPb.setText(R.string.browser_install_install);

View File

@ -120,6 +120,11 @@ public class PackageUtils {
// 根据版本判断是否需要更新
shouldShowUpdate = new Version(versionFromRequest).isHigherThan(versionFromInstalledApp);
// versionName 没法判定的时候尝试使用 versionCode 去判断
if (!shouldShowUpdate && versionCodeFromRequest != 0) {
shouldShowUpdate = versionCodeFromRequest > versionCodeFromInstalledApp;
}
// 畅玩游戏根据 md5 是否一致确定是否需要更新
if (gameEntity.isVGame()) {
DownloadEntity entity = DownloadManager.getInstance().getDownloadEntitySnapshotByPackageName(apkEntity.getPackageName());
@ -127,17 +132,10 @@ public class PackageUtils {
String md5FromInstalledVGame = ExtensionsKt.getMetaExtra(entity, Constants.APK_MD5);
String md5FromRequest = apkEntity.getMd5();
if (md5FromRequest != null && !md5FromRequest.equals(md5FromInstalledVGame)) {
shouldShowUpdate = true;
}
shouldShowUpdate = md5FromRequest != null && !md5FromRequest.equals(md5FromInstalledVGame);
}
}
// versionName 没法判定的时候尝试使用 versionCode 去判断
if (!shouldShowUpdate && versionCodeFromRequest != 0) {
shouldShowUpdate = versionCodeFromRequest > versionCodeFromInstalledApp;
}
if (shouldShowUpdate) {
GameUpdateEntity updateEntity = new GameUpdateEntity();
updateEntity.setId(gameEntity.getId());

View File

@ -158,14 +158,10 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) {
}
unplayedEntityList.removeAll { it.packageName == fixedTopEntity?.packageName }
unplayedEntityList.sortedByDescending {
it.start
}
unplayedEntityList.sortedBy { it.start }
playedEntityList.removeAll { it.packageName == fixedTopEntity?.packageName }
playedEntityList.sortedByDescending {
VHelper.getLastPlayedTime(it)
}
playedEntityList.sortedBy { VHelper.getTotalPlayedTime(it.packageName) }
fixedTopEntity?.let { sortedEntityList.add(it) }
sortedEntityList.addAll(unplayedEntityList)

View File

@ -258,7 +258,11 @@ object PackageRepository {
addUpdateOrPluggable(updateEntity)
}
return true
} else if (game.isVGame()) {
// 畅玩游戏移除更新,避免死循环更新
removeUpdate(game.id)
}
return false
}
@ -351,6 +355,14 @@ object PackageRepository {
if (!isExist) gameUpdate.add(data)
}
/**
* 移除更新
* @param gameId 游戏 ID
*/
private fun removeUpdate(gameId: String) {
gameUpdate.removeAll { it.id == gameId }
}
/**
* 新增已安装的游戏
* @param pkgName 已安装的游戏包名

View File

@ -479,6 +479,15 @@ object VHelper {
}
}
/**
* 获取游戏的游玩时长
*/
fun getTotalPlayedTime(packageName: String): Long {
return mInstalledInfoList.firstOrNull {
it.packageName == packageName
}?.appTotalPlayTime ?: 0L
}
/**
* 根据包名获取下载快照
*/