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 e64c8efb14..a4d2b7bb78 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -51,6 +51,8 @@ public class Constants { public static final String RAW_GAME_ICON = "raw_game_icon"; public static final String GAME_ICON_SUBSCRIPT = "game_icon_subscript"; + public static final String IS_PLATFORM_RECOMMEND = "isPlatformRecommend"; + // 下载 id,一般来说跟下载文件名一样 public static final String DOWNLOAD_ID = "download_id"; diff --git a/app/src/main/java/com/gh/common/exposure/ExposureEntity.kt b/app/src/main/java/com/gh/common/exposure/ExposureEntity.kt index b7d04589fc..976b7f4fff 100644 --- a/app/src/main/java/com/gh/common/exposure/ExposureEntity.kt +++ b/app/src/main/java/com/gh/common/exposure/ExposureEntity.kt @@ -20,6 +20,8 @@ data class ExposureEntity( val downloadCompleteType: String? = "", @SerializedName("display_type") val displayType: String? = "", + @SerializedName("is_platform_recommend") + val isPlatformRecommend: Boolean? = false, // 下载地址的 host 和 path var host: String? = "", diff --git a/app/src/main/java/com/gh/common/exposure/ExposureEvent.kt b/app/src/main/java/com/gh/common/exposure/ExposureEvent.kt index 0b61c53f41..1668c9f41e 100644 --- a/app/src/main/java/com/gh/common/exposure/ExposureEvent.kt +++ b/app/src/main/java/com/gh/common/exposure/ExposureEvent.kt @@ -46,6 +46,7 @@ data class ExposureEvent( downloadType = gameEntity?.downloadType, downloadCompleteType = gameEntity?.downloadCompleteType, displayType = eTrace?.firstOrNull()?.payload?.displayType ?:gameEntity?.displayContent, + isPlatformRecommend = gameEntity?.isPlatformRecommend ?: false, // ugly welcomeDialogId = gameEntity?.welcomeDialogId ?: eTrace?.firstOrNull()?.payload?.welcomeDialogId, welcomeDialogLinkTitle = gameEntity?.welcomeDialogTitle ?: eTrace?.firstOrNull()?.payload?.welcomeDialogLinkTitle), 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 4af0088ace..6568e42d10 100644 --- a/app/src/main/java/com/gh/common/util/DownloadObserver.kt +++ b/app/src/main/java/com/gh/common/util/DownloadObserver.kt @@ -276,11 +276,12 @@ object DownloadObserver { // "操作", "下载完成", // "网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().application)) } - + val isPlatformRecommend = java.lang.Boolean.parseBoolean(downloadEntity.getMetaExtra(Constants.IS_PLATFORM_RECOMMEND)) ExposureUtils.logADownloadCompleteExposureEvent( GameEntity(id = downloadEntity.gameId, mName = downloadEntity.name.removeSuffix(Constants.GAME_NAME_DECORATOR), - gameVersion = downloadEntity.versionName ?: ""), + gameVersion = downloadEntity.versionName ?: "", + isPlatformRecommend = isPlatformRecommend), downloadEntity.platform, downloadEntity.exposureTrace, downloadEntity.meta[DownloadEntity.DOWNLOAD_HOST_KEY] ?: "unknown", diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 8bfb867e6a..6a50de6d00 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -279,6 +279,7 @@ public class DownloadManager implements DownloadStatusListener { ExtensionsKt.addMetaExtra(downloadEntity, Constants.DOWNLOAD_ID, downloadId); ExtensionsKt.addMetaExtra(downloadEntity, Constants.RAW_GAME_ICON, gameEntity.getRawIcon()); ExtensionsKt.addMetaExtra(downloadEntity, Constants.GAME_ICON_SUBSCRIPT, gameEntity.getIconSubscript()); + ExtensionsKt.addMetaExtra(downloadEntity, Constants.IS_PLATFORM_RECOMMEND, apkEntity.getRecommend() != null ? "true" : "false"); if (SimulatorGameManager.isSimulatorGame(gameEntity)) { ExtensionsKt.addMetaExtra(downloadEntity, Constants.SIMULATOR_GAME, apkEntity.getFormat()); ExtensionsKt.addMetaExtra(downloadEntity, Constants.SIMULATOR, GsonUtils.toJson(gameEntity.getSimulator())); @@ -302,6 +303,7 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setPlugin(!TextUtils.isEmpty(apkEntity.getGhVersion())); ExposureUtils.DownloadType downloadType = ExposureUtils.getDownloadType(apkEntity, gameEntity.getId()); + gameEntity.setIsPlatformRecommend(apkEntity.getRecommend() != null); ExposureEvent downloadExposureEvent = ExposureUtils.logADownloadExposureEvent(gameEntity, apkEntity.getPlatform(), traceEvent, downloadType); // 将下载事件放入 downloadEntity 中供下载完成时取出使用 @@ -653,7 +655,7 @@ public class DownloadManager implements DownloadStatusListener { // 将原来安装完成后在 downloadService 完成的功能放到这里,尝试避免因为 ANR 造成闪退 AppExecutor.getUiExecutor().executeWithDelay(() -> { mDownloadDao.removeErrorMessage(entry.getUrl()); - + DownloadTask task = DataChanger.INSTANCE.getDownloadingTasks().get(entry.getUrl()); if (task != null) { task.cancel(); @@ -664,7 +666,7 @@ public class DownloadManager implements DownloadStatusListener { DataChanger.INSTANCE.getDownloadEntries().remove(entry.getUrl()); DataChanger.INSTANCE.notifyDataChanged(entry); DownloadStatusManager.getInstance().onTaskCancelled(entry); - + Utils.log(DownloadManager.class.getSimpleName(), "cancel"); }, 0); } diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialog.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialog.kt index fc90821205..b41e7ff86d 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialog.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialog.kt @@ -84,6 +84,8 @@ class DownloadDialog : BaseDialogFragment(), View.OnTouchListener { } } + override fun getThemeRes(): Int = R.style.DialogFragmentDimAmount + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val createDialog = super.onCreateDialog(savedInstanceState) createDialog.setCanceledOnTouchOutside(true) diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt index 9d4e027a8e..bd6f8bee45 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogAdapter.kt @@ -8,6 +8,7 @@ import com.gh.base.OnViewClickListener import com.gh.common.exposure.ExposureEvent import com.gh.common.util.DirectUtils import com.gh.common.util.MtaHelper +import com.gh.common.util.dip2px import com.gh.common.util.throwExceptionInDebug import com.gh.gamecenter.NewsDetailActivity import com.gh.gamecenter.QaActivity @@ -74,6 +75,14 @@ class DownloadDialogAdapter(context: Context, override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is DownloadDialogSectionItemViewHolder -> { + (holder.binding.root.layoutParams as RecyclerView.LayoutParams).apply { + topMargin = if (position > 0) { + if (position - 1 >= 0 && (listData[position - 1].installed != null || listData[position - 1].normal != null)) { + 4f.dip2px() + } else 12f.dip2px() + } else 0 + holder.binding.root.layoutParams = this + } holder.binding.type = listData[position].section } is DownloadDialogLinkItemViewHolder -> { diff --git a/app/src/main/java/com/gh/download/dialog/DownloadDialogInstalledItemViewHolder.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogInstalledItemViewHolder.kt index a2cc18c9d2..143f0ec6f3 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogInstalledItemViewHolder.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogInstalledItemViewHolder.kt @@ -41,7 +41,7 @@ class DownloadDialogInstalledItemViewHolder(val binding: DownloadDialogInstalled binding.launch.visibility = View.GONE if (apkCollection != null) { binding.remark.goneIf(apkCollection.remark.isEmpty()) - binding.root.setBackgroundResource(R.drawable.download_dialog_item_collection_background) +// binding.root.setBackgroundResource(R.drawable.download_dialog_item_collection_background) } else { binding.remark.goneIf(apkEntity.remark.isEmpty()) } 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 acd056ec75..a8179e8c2d 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt @@ -2,7 +2,11 @@ package com.gh.download.dialog import android.content.Context import android.view.View +import android.widget.RelativeLayout import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.gh.base.BaseActivity import com.gh.base.BaseRecyclerViewHolder import com.gh.common.constant.Config @@ -50,38 +54,45 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas apkCollection != null -> ApkEntity( platformIcon = apkCollection.newIcon, platformName = apkCollection.name, + recommend = apkCollection.recommend, remark = apkCollection.remark) else -> apkEntity } - binding.root.setBackgroundResource(R.drawable.download_dialog_item_background) + binding.containerView.setBackgroundResource(R.drawable.download_dialog_item_background) if (apkLink != null) { - binding.downloadStatusIcon.visibility = View.VISIBLE + binding.downloadStatusIcon.visibility = View.GONE binding.status.visibility = View.VISIBLE binding.progressbar.visibility = View.GONE binding.install.visibility = View.GONE binding.remark.goneIf(apkLink.remark.isEmpty()) binding.status.text = "点击查看" - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_collection_status_link) - binding.root.setBackgroundResource(R.drawable.download_dialog_installed_background) + binding.status.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(binding.status.context, R.drawable.download_dialog_collection_status_link), null) + binding.containerView.setBackgroundResource(R.drawable.download_dialog_installed_background) itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.LINK) } else if (apkCollection != null || (!isCollectionPage && apkEntity.downloadInstruction.isNotEmpty())) { + changeRecommendUI(apkEntity) + binding.root.visibility = View.VISIBLE binding.downloadStatusIcon.visibility = View.VISIBLE binding.progressbar.visibility = View.GONE binding.install.visibility = View.GONE binding.status.visibility = View.GONE if (apkCollection != null) { binding.remark.goneIf(apkCollection.remark.isEmpty()) - binding.root.setBackgroundResource(R.drawable.download_dialog_item_collection_background) } else { binding.remark.goneIf(apkEntity.remark.isEmpty()) } - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_status_collection) + binding.downloadStatusIcon.setImageResource(if (apkEntity.recommend != null) R.drawable.download_dialog_status_collection else R.drawable.download_dialog_status_collection_gray) itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.COLLECTION) } else { - + if (apkEntity.url.isNullOrEmpty()) { + binding.root.visibility = View.INVISIBLE + return + } + binding.root.visibility = View.VISIBLE + changeRecommendUI(apkEntity) val downloadEntity = DownloadManager.getInstance(HaloApp.getInstance().application).getDownloadEntityByUrl(apkEntity.url) if (downloadEntity != null) { binding.downloadStatusIcon.visibility = View.VISIBLE @@ -105,17 +116,17 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas binding.remark.goneIf(apkEntity.remark.isEmpty()) if (PackageUtils.isCanUpdate(apkEntity, gameEntity.id)) { - binding.downloadStatusIcon.visibility = View.VISIBLE binding.status.visibility = View.VISIBLE binding.status.text = "可更新" - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_collection_status_update) + binding.status.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(binding.status.context, R.drawable.download_dialog_collection_status_update), null) + binding.downloadStatusIcon.visibility = View.GONE itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.UPDATE) } else if (PackageUtils.getGhId(apkEntity.packageName) == gameEntity.id || PackagesManager.isInstalled(apkEntity.packageName) && Config.getSettings()?.gameDownloadBlackList?.contains(apkEntity.packageName) == true) { binding.downloadStatusIcon.visibility = View.GONE binding.status.visibility = View.VISIBLE - binding.root.setBackgroundResource(R.drawable.download_dialog_installed_background) + binding.containerView.setBackgroundResource(R.drawable.download_dialog_installed_background) var isFilter = false Config.getSettings()?.gameDownloadBlackList?.forEach { pkgName -> @@ -132,12 +143,13 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas // 点击启动 binding.status.text = "点击启动" itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.LAUNCH) + binding.status.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(binding.status.context, R.drawable.download_dialog_collection_status_launch), null) } } else { binding.downloadStatusIcon.visibility = View.VISIBLE binding.status.visibility = View.GONE - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_status_download) + binding.downloadStatusIcon.setImageResource(if (apkEntity.recommend != null) R.drawable.download_dialog_status_download else R.drawable.download_dialog_status_download_gray) if (PackageUtils.isCanPluggable(apkEntity)) { itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.PLUGGABLE) } else { @@ -151,6 +163,20 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas binding.executePendingBindings() } + private fun changeRecommendUI(apkEntity: ApkEntity) { + (binding.containerView.layoutParams as RelativeLayout.LayoutParams).apply { + topMargin = if (apkEntity.recommend != null) 4f.dip2px() else 0 + binding.containerView.layoutParams = this + } + (binding.root.layoutParams as RecyclerView.LayoutParams).apply { + bottomMargin = if (apkEntity.recommend != null) 20f.dip2px() else 8f.dip2px() + binding.root.layoutParams = this + } + if (apkEntity.recommend != null) { + binding.containerView.background = ContextCompat.getDrawable(binding.root.context, R.drawable.bg_download_dialog_item_recommend) + } + } + companion object { fun getDownloadingStatusText(downloadEntity: DownloadEntity): String { return when (downloadEntity.status) { diff --git a/app/src/main/java/com/gh/download/dialog/DownloadViewModel.kt b/app/src/main/java/com/gh/download/dialog/DownloadViewModel.kt index a6fc2b76c9..3942a6df30 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadViewModel.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadViewModel.kt @@ -96,6 +96,10 @@ class DownloadViewModel(application: Application, val gameEntity: GameEntity) : mInstalledApkList.sortWith(Comparator { o1, o2 -> o2.order - o1.order }) mOtherApkList.sortWith(Comparator { o1, o2 -> o2.order - o1.order }) + val count = mOtherApkList.count { it.recommend != null } + if (count % 2 != 0) { + mOtherApkList.add(count, ApkEntity()) + } val itemList: MutableList = ArrayList() @@ -127,13 +131,17 @@ class DownloadViewModel(application: Application, val gameEntity: GameEntity) : } private fun setSortValueToApkEntity(apkEntity: ApkEntity) { - apkEntity.apkCollection?.saveApkEntity?.forEach { saveApk -> - val sortValue = getSortValue(saveApk) - if (apkEntity.order < sortValue) { - apkEntity.order = sortValue + if (apkEntity.apkCollection?.recommend != null) { + apkEntity.recommend = apkEntity.apkCollection?.recommend + apkEntity.order = getSortValue(apkEntity) + } else { + apkEntity.apkCollection?.saveApkEntity?.forEach { saveApk -> + val sortValue = getSortValue(saveApk) + if (apkEntity.order < sortValue) { + apkEntity.order = sortValue + } } } - if (apkEntity.order == 0) { apkEntity.order = getSortValue(apkEntity) } @@ -152,7 +160,11 @@ class DownloadViewModel(application: Application, val gameEntity: GameEntity) : return SORT_NORMAL_LAUNCH } } - return SORT_NORMAL + return if (apkEntity.recommend != null) { + SORT_RECOMMEND + } else { + SORT_NORMAL + } } else { return if (downloadEntity.status == DownloadStatus.done) { if (downloadEntity.isPluggable) { @@ -257,6 +269,7 @@ class DownloadViewModel(application: Application, val gameEntity: GameEntity) : companion object { // 需要修改排序的话,只需要修改以下数值即可(由大到小排序) + const val SORT_RECOMMEND = 11 const val SORT_PLUGGABLE_INSTALL = 10 const val SORT_PLUGGABLE_DOWNLOADING = 9 const val SORT_PLUGGABLE = 8 diff --git a/app/src/main/java/com/gh/gamecenter/entity/ApkEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/ApkEntity.kt index 130947d088..734ae474de 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/ApkEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/ApkEntity.kt @@ -32,6 +32,7 @@ data class ApkEntity(@SerializedName("package") private var platformIcon: String = "", @SerializedName("download_instruction") val downloadInstruction: String = "", + var recommend: Recommend? = null, // 以下是历史版本用的字段,其它地方可能会没有 @SerializedName("update_time") @@ -114,4 +115,7 @@ class ApkLink(@SerializedName("_id") linkEntity.display = display return linkEntity } -} \ No newline at end of file +} + +@Parcelize +data class Recommend(val subscript: String = "", val description: String = "") : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameCollectionEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameCollectionEntity.kt index 6de5c500a4..722f876906 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameCollectionEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameCollectionEntity.kt @@ -21,6 +21,7 @@ data class GameCollectionEntity( val newIcon: String = "", @SerializedName("download_instruction") var downloadInstruction: String = "", + var recommend: Recommend? = null, /** * 若该合集存在"可插件化"的包,则该版本在一级页面显示为“XX此版本,一旦设备中已安装合集中任一插件版本, * 则即便设备中同时安装了合集中其它版本的原包,也不再于下载面板-一级页中提示可插件化 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 084683821a..41133bb641 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -234,6 +234,7 @@ data class GameEntity( var useMirrorInfo: Boolean = false, // 本地字段,曝光用 var displayContent: String = "", + var isPlatformRecommend: Boolean = false, // 从启动弹窗跳转到对应游戏列表时候记录的启动弹窗数据 (ugly ugly ugly) var welcomeDialogId: String? = null, var welcomeDialogTitle: String? = null @@ -444,6 +445,10 @@ data class GameEntity( } } + fun setIsPlatformRecommend(isPlatformRecommend: Boolean) { + this.isPlatformRecommend = isPlatformRecommend + } + /** * 游戏所属类型 * 网络游戏:category 为 online 的游戏 @@ -525,6 +530,8 @@ data class GameEntity( gameEntity.mCategory = mCategory gameEntity.simulator = simulator gameEntity.simulatorType = simulatorType + gameEntity.displayContent = displayContent + gameEntity.isPlatformRecommend = isPlatformRecommend return gameEntity } diff --git a/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java b/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java index 71b0ca933d..e021a88405 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java +++ b/app/src/main/java/com/gh/gamecenter/receiver/InstallAndUninstallReceiver.java @@ -38,13 +38,14 @@ public class InstallAndUninstallReceiver extends BroadcastReceiver { String versionName = PackageUtils.getVersionByPackage(packageName); EBPackage installEb = new EBPackage("安装", packageName, versionName); - EventBus.getDefault().post(installEb); if (PackageUtils.isAppOnForeground(context)) { PackageObserver.onPackageChanged(installEb); + EventBus.getDefault().post(installEb); } else { // 处于后台运行的时候尝试延迟 100 ms 再触发 onPackageChanged (猜测是引起 ANR 的原因) AppExecutor.getUiExecutor().executeWithDelay(() -> { PackageObserver.onPackageChanged(installEb); + EventBus.getDefault().post(installEb); }, 100); } } @@ -58,8 +59,8 @@ public class InstallAndUninstallReceiver extends BroadcastReceiver { PackageHelper.refreshLocalPackageList(); EBPackage uninstallEb = new EBPackage("卸载", packageName, ""); - EventBus.getDefault().post(uninstallEb); PackageObserver.onPackageChanged(uninstallEb); + EventBus.getDefault().post(uninstallEb); } // 接收替换广播 diff --git a/app/src/main/res/drawable-hdpi/ic_recommend_label.9.png b/app/src/main/res/drawable-hdpi/ic_recommend_label.9.png new file mode 100644 index 0000000000..5f80ba3893 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_recommend_label.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_collection_status_launch.png b/app/src/main/res/drawable-xxhdpi/download_dialog_collection_status_launch.png new file mode 100644 index 0000000000..16ddbdede1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_dialog_collection_status_launch.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection.png b/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection.png index 4290dd16e3..0efe5baa30 100644 Binary files a/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection.png and b/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection_gray.png b/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection_gray.png new file mode 100644 index 0000000000..4290dd16e3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_dialog_status_collection_gray.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_status_download.png b/app/src/main/res/drawable-xxhdpi/download_dialog_status_download.png index bdbad42eaa..6dbeb6bfc1 100644 Binary files a/app/src/main/res/drawable-xxhdpi/download_dialog_status_download.png and b/app/src/main/res/drawable-xxhdpi/download_dialog_status_download.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_status_download_gray.png b/app/src/main/res/drawable-xxhdpi/download_dialog_status_download_gray.png new file mode 100644 index 0000000000..b70b834222 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/download_dialog_status_download_gray.png differ diff --git a/app/src/main/res/drawable-xxhdpi/download_dialog_status_launch.webp b/app/src/main/res/drawable-xxhdpi/download_dialog_status_launch.webp index 8f49878075..7870b352bd 100644 Binary files a/app/src/main/res/drawable-xxhdpi/download_dialog_status_launch.webp and b/app/src/main/res/drawable-xxhdpi/download_dialog_status_launch.webp differ diff --git a/app/src/main/res/drawable/bg_download_dialog_item_recommend.xml b/app/src/main/res/drawable/bg_download_dialog_item_recommend.xml new file mode 100644 index 0000000000..c8ee1277e8 --- /dev/null +++ b/app/src/main/res/drawable/bg_download_dialog_item_recommend.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/download_dialog_installed_background.xml b/app/src/main/res/drawable/download_dialog_installed_background.xml index 7bfcdc8077..035264b9a2 100644 --- a/app/src/main/res/drawable/download_dialog_installed_background.xml +++ b/app/src/main/res/drawable/download_dialog_installed_background.xml @@ -1,12 +1,8 @@ - + - - \ No newline at end of file diff --git a/app/src/main/res/drawable/download_dialog_item_background.xml b/app/src/main/res/drawable/download_dialog_item_background.xml index cd2e6c0ce9..3de1c30b1d 100644 --- a/app/src/main/res/drawable/download_dialog_item_background.xml +++ b/app/src/main/res/drawable/download_dialog_item_background.xml @@ -1,12 +1,8 @@ - + - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_download.xml b/app/src/main/res/layout/dialog_download.xml index 18554ae04a..bf30132c74 100644 --- a/app/src/main/res/layout/dialog_download.xml +++ b/app/src/main/res/layout/dialog_download.xml @@ -1,22 +1,24 @@ - + - + tools:text="版本说明" + tools:visibility="visible" /> + app:layout_constraintTop_toBottomOf="@id/drag_close"> + android:paddingLeft="12dp" + android:paddingRight="12dp" /> + app:layout_constraintTop_toBottomOf="@id/drag_close" /> diff --git a/app/src/main/res/layout/download_dialog_installed_item.xml b/app/src/main/res/layout/download_dialog_installed_item.xml index 608c38f4c2..41e760a7cc 100644 --- a/app/src/main/res/layout/download_dialog_installed_item.xml +++ b/app/src/main/res/layout/download_dialog_installed_item.xml @@ -18,9 +18,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="3dp" - android:layout_marginRight="3dp" - android:layout_marginBottom="6dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" + android:layout_marginBottom="8dp" android:background="@drawable/download_dialog_item_background" android:orientation="vertical"> @@ -52,13 +52,15 @@ app:layout_constraintTop_toTopOf="parent" fresco:placeholderImage="@drawable/download_dialog_game_icon_placeholder" fresco:placeholderImageScaleType="fitXY" - fresco:roundedCornerRadius="8dp" /> + fresco:roundedCornerRadius="4dp" + fresco:roundingBorderColor="@color/black_alpha_10" + fresco:roundingBorderWidth="0.5dp" /> + + - + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" + android:layout_marginBottom="8dp"> - - - - - + android:background="@drawable/download_dialog_item_background" + android:orientation="vertical"> - - - - - - - - + android:layout_height="0dp" + android:max="100" + android:progress="50" + android:progressDrawable="@drawable/download_dialog_item_progress" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + + + android:id="@+id/name" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:includeFontPadding="false" + android:singleLine="true" + android:text="@{apk.getPlatformName}" + android:textColor="@color/text_333333" + android:textSize="12sp" + app:layout_constraintBottom_toTopOf="@id/remark" + app:layout_constraintLeft_toRightOf="@id/icon" + app:layout_constraintRight_toLeftOf="@id/download_status_icon" + app:layout_constraintTop_toTopOf="@id/icon" + app:layout_constraintVertical_chainStyle="packed" + tools:text="九游版" /> - - + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/download_dialog_link_item.xml b/app/src/main/res/layout/download_dialog_link_item.xml index 87145fecff..c9b1aac529 100644 --- a/app/src/main/res/layout/download_dialog_link_item.xml +++ b/app/src/main/res/layout/download_dialog_link_item.xml @@ -21,6 +21,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="36dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" android:orientation="vertical"> + android:paddingLeft="8dp" + android:paddingRight="8dp">