From 48b5c7efc1ec3085311166323289a9c2a4c78e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Mon, 1 Mar 2021 10:05:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV4.8.0-?= =?UTF-8?q?=E5=A4=9A=E7=89=88=E6=9C=AC=E4=B8=8B=E8=BD=BD=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=88=E7=AC=AC=E4=BA=8C=E6=9C=9F=EF=BC=89?= =?UTF-8?q?https://git.ghzs.com/pm/halo-app-issues/-/issues/1157?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/download/dialog/DownloadDialog.kt | 2 + .../DownloadDialogInstalledItemViewHolder.kt | 2 +- .../dialog/DownloadDialogItemViewHolder.kt | 21 +- .../drawable-hdpi/ic_recommend_label.9.png | Bin 0 -> 498 bytes ...wnload_dialog_collection_status_launch.png | Bin 0 -> 805 bytes .../download_dialog_status_collection.png | Bin 411 -> 407 bytes ...download_dialog_status_collection_gray.png | Bin 0 -> 411 bytes .../download_dialog_status_download.png | Bin 627 -> 457 bytes .../download_dialog_status_download_gray.png | Bin 0 -> 437 bytes .../download_dialog_status_launch.webp | Bin 806 -> 690 bytes .../download_dialog_installed_background.xml | 6 +- .../download_dialog_item_background.xml | 6 +- app/src/main/res/layout/dialog_download.xml | 51 ++-- .../layout/download_dialog_installed_item.xml | 26 +- .../main/res/layout/download_dialog_item.xml | 283 +++++++++++------- .../res/layout/download_dialog_link_item.xml | 11 +- .../layout/download_dialog_section_item.xml | 6 +- 17 files changed, 238 insertions(+), 176 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_recommend_label.9.png create mode 100644 app/src/main/res/drawable-xxhdpi/download_dialog_collection_status_launch.png create mode 100644 app/src/main/res/drawable-xxhdpi/download_dialog_status_collection_gray.png create mode 100644 app/src/main/res/drawable-xxhdpi/download_dialog_status_download_gray.png 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/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 0e063b813a..60ef7448fa 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt @@ -3,6 +3,7 @@ package com.gh.download.dialog import android.content.Context import android.view.View import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import com.gh.base.BaseActivity import com.gh.base.BaseRecyclerViewHolder import com.gh.common.constant.Config @@ -52,18 +53,18 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas 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())) { binding.downloadStatusIcon.visibility = View.VISIBLE @@ -72,12 +73,11 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas 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(R.drawable.download_dialog_status_collection_gray) itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.COLLECTION) } else { @@ -104,17 +104,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 -> @@ -131,12 +131,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(R.drawable.download_dialog_status_download_gray) if (PackageUtils.isCanPluggable(apkEntity)) { itemView.setTag(DownloadDialogAdapter.ITEM_TAG_KEY, DownloadDialogItemStatus.PLUGGABLE) } else { 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 0000000000000000000000000000000000000000..5f80ba389397e86dfa6853ac071dcd68be3ec73a GIT binary patch literal 498 zcmVapi6vL`+>e_xEm=v#L>rWT*s83B047Oq4md{Yq}pbSnMh{X%YeFKnsiIY5~ z0n^~h6ek(+B}3b%{+?va1)9WNH-}!A3?Od)iJW>$-HB?=4dc0 zW`)3$=!WM8P({F(13X_B?Lzq zuA9_cbv3dQD9ommIieqGfGN;Hvj?D^OWX2kRHO3&eFxC+R#f+coQ}E-E!Wt&4WJCp z8sL`#nr+kWQSv9dFIkxe^&c9wE6Sm4gY0?F$Te1Dwx7am%F!r?a)g*Nt*AxQa-O4x zMkm+;83EkQt!Q~Q8j1eocu9aZ#~^AOr&0UDz(C#tyxcI2x>rCx998gLxdC_qiaqD5 oRxXVy8G0}EW%>O2?RTH}0d$UJFj);Px&QzG07*qoM6N<$f-~mcHvj+t literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..16ddbdede16c6dd75031345416d9505e8c874561 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uw}2VJ1}Qw{XwJ&Oz|`;Q;uzw= z`!>umBiK=(_H*yiYYJjqTw$!9UAN?vlsM*fEf?eOy3{NZGU3*j2S=m#PH}Mk@a*8N zpexQR+h4i1#J%;^S|qNWYwy)B=hEslSuJf2=gpM=-#2^u`b}y*f9~A5ec#icoj=DO z^|-#D;p*!LESt^ko9D&49;gKKO%x{(Cwix`~ zCZV^k=YqO-c<`4PvD-bxVlRVMai0v1eKE~^NBUgvC)^dY=R7(+ZQZgLDq`;^u{rLE zjgnY&|JRSqUEVF)i*8@3-PnD4^Mo0XJpXc>mAwAO~8ToJz0P)$8>&`J9pfoCe894*Gg>fp1L`AiE5nivve*U%jkR07yge>FOuJlYvNEv{y+&@nDl_Zl`~06jzHaEQ$mm<`S(IM7uI31r*GFf|?OXk; z@5X+TTwVOMUh~2C#K097qi+Ulv@rFUt-Pki?7_4!ogs0J)M|EyWCrEbXRkAhj@?j? zVicI*G>1X+2)9CG1+$alTn0sftl$n)Rv8xctGYSdyE9k0t}|}n+*or)En?mcv(&G1 z&oy*xkF&{l=&&ez%E}@7oyp_KT!xhu+7IL(F$B!6)A#?7Zy@!EG n%>FCnd!Hx8cR%0jr+=B(OxiWwQD+S(02w@8{an^LB{Ts53QvM6 delta 350 zcmbQvJeyguGr-TCmrII^fq{Y7)59eQNUMM_2OE%l$S`BZL`9E!l?BWUEI>XZRF*-D z@9`fXm(|n7F(iWX?e&Aa%?3QI7nbO-M^SV@tu za8Y}&LE*ZdNsW7WDqemPXqx~0XV;Hi>+awCtq{AqbGJuxW8}1_t=Tfi)f+Bton>M8 zqW-ez<;aCc7Sylx`OCN2Y2~FpquiM<%WnMA`(F5>+ZE|wNkFWyaVs*O5&F_h#Z!JxYK&mB`*Kn5?!FGOLSXPPc)I$ztaD0e0szE@i>&|v 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 0000000000000000000000000000000000000000..4290dd16e331c500ba5328d11ca1a6fae3ac7b4c GIT binary patch literal 411 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 - + - - \ 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"> Date: Wed, 3 Mar 2021 14:35:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV4.8.0-?= =?UTF-8?q?=E5=A4=9A=E7=89=88=E6=9C=AC=E4=B8=8B=E8=BD=BD=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=88=E7=AC=AC=E4=BA=8C=E6=9C=9F=EF=BC=89?= =?UTF-8?q?https://git.ghzs.com/pm/halo-app-issues/-/issues/1157?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../download/dialog/DownloadDialogAdapter.kt | 9 ++++++ .../dialog/DownloadDialogItemViewHolder.kt | 31 +++++++++++++++++-- .../gh/download/dialog/DownloadViewModel.kt | 25 +++++++++++---- .../com/gh/gamecenter/entity/ApkEntity.kt | 6 +++- .../gamecenter/entity/GameCollectionEntity.kt | 1 + .../receiver/InstallAndUninstallReceiver.java | 5 +-- .../bg_download_dialog_item_recommend.xml | 12 +++++++ .../main/res/layout/download_dialog_item.xml | 6 ++-- 8 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/drawable/bg_download_dialog_item_recommend.xml 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/DownloadDialogItemViewHolder.kt b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt index 60ef7448fa..1ba1f57558 100644 --- a/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt +++ b/app/src/main/java/com/gh/download/dialog/DownloadDialogItemViewHolder.kt @@ -2,8 +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,6 +53,7 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas apkCollection != null -> ApkEntity( platformIcon = apkCollection.newIcon, platformName = apkCollection.name, + recommend = apkCollection.recommend, remark = apkCollection.remark) else -> apkEntity } @@ -67,6 +71,8 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas 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 @@ -77,10 +83,15 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas binding.remark.goneIf(apkEntity.remark.isEmpty()) } - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_status_collection_gray) + 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 @@ -137,7 +148,7 @@ class DownloadDialogItemViewHolder(val binding: DownloadDialogItemBinding) : Bas binding.downloadStatusIcon.visibility = View.VISIBLE binding.status.visibility = View.GONE - binding.downloadStatusIcon.setImageResource(R.drawable.download_dialog_status_download_gray) + 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 +162,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/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/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/layout/download_dialog_item.xml b/app/src/main/res/layout/download_dialog_item.xml index 27485f029a..9441538ea1 100644 --- a/app/src/main/res/layout/download_dialog_item.xml +++ b/app/src/main/res/layout/download_dialog_item.xml @@ -122,13 +122,14 @@ Date: Mon, 8 Mar 2021 10:02:00 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV4.8.0-?= =?UTF-8?q?=E5=A4=9A=E7=89=88=E6=9C=AC=E4=B8=8B=E8=BD=BD=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=88=E7=AC=AC=E4=BA=8C=E6=9C=9F=EF=BC=89?= =?UTF-8?q?(=E5=9F=8B=E7=82=B9)=20https://git.ghzs.com/pm/halo-app-issues/?= =?UTF-8?q?-/issues/1157?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/gh/common/constant/Constants.java | 2 ++ app/src/main/java/com/gh/common/exposure/ExposureEntity.kt | 2 ++ app/src/main/java/com/gh/common/exposure/ExposureEvent.kt | 1 + app/src/main/java/com/gh/common/util/DownloadObserver.kt | 5 +++-- app/src/main/java/com/gh/download/DownloadManager.java | 6 ++++-- app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt | 7 +++++++ 6 files changed, 19 insertions(+), 4 deletions(-) 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 75e1ce2f0b..c5db5ae5e9 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 cafa46969e..b5cf2221b9 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/gamecenter/entity/GameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt index e54a9494f0..ecb4477cd7 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 }