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 6b5b51d03c..afbb370a3f 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -2,6 +2,7 @@ package com.gh.common.databind; import android.content.Intent; import android.graphics.Color; +import android.graphics.Typeface; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; @@ -13,6 +14,12 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.databinding.BindingAdapter; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.OnViewClickListener; import com.gh.common.constant.Config; @@ -68,12 +75,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.ContextCompat; -import androidx.databinding.BindingAdapter; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; - /** * Created by khy on 12/02/18. */ @@ -95,6 +96,26 @@ public class BindingAdapters { view.setTextSize(number); } + @BindingAdapter("setTypeface") + public static void setTypeface(TextView view, String type) { + if (type == null) return; + + switch (type) { + case "bold": + view.setTypeface(null, Typeface.BOLD); + break; + case "italic": + view.setTypeface(null, Typeface.ITALIC); + break; + case "bold_italic": + view.setTypeface(null, Typeface.BOLD_ITALIC); + break; + default: + view.setTypeface(null, Typeface.NORMAL); + break; + } + } + @BindingAdapter({"addDetailKaiFuView", "addDetailKaiFuViewListener", "isReadyPatch"}) public static void addDetailKaiFuView(LinearLayout view, List list , OnViewClickListener listener, Boolean isReadyPatch) { @@ -687,14 +708,15 @@ public class BindingAdapters { } } - @BindingAdapter({"setGameName", "isShowPlatform"}) - public static void setGameName(TextView view, GameEntity game, boolean isShowPlatform) { + @BindingAdapter({"setGameName", "isShowPlatform", "isShowSuffix"}) + public static void setGameName(TextView view, GameEntity game, boolean isShowPlatform, @Nullable Boolean isShowSuffix) { + if (isShowSuffix == null) isShowSuffix = true; // 默认显示 if (isShowPlatform && game.getApk().size() > 0) { - view.setText(String.format("%s - %s", game.getName(), + view.setText(String.format("%s - %s", !isShowSuffix ? game.getNameWithoutSuffix() : game.getName(), PlatformUtils.getInstance(view.getContext()).getPlatformName( game.getApk().get(0).getPlatform()))); } else { - view.setText(game.getName()); + view.setText(!isShowSuffix ? game.getNameWithoutSuffix() : game.getName()); } } 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 0186343afa..64fdb50c4e 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -8,6 +8,12 @@ import android.text.TextUtils; import android.view.View; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.collection.ArrayMap; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + import com.gh.common.constant.Config; import com.gh.common.dialog.CertificationDialog; import com.gh.common.dialog.DeviceRemindDialog; @@ -34,12 +40,6 @@ import com.lightgame.utils.Utils; import java.util.concurrent.LinkedBlockingQueue; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.collection.ArrayMap; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - /** * todo 下载判断不能以按钮文案为判断条件,否则按钮文案修改时又要修改判断逻辑 */ @@ -134,16 +134,23 @@ public class DownloadItemUtils { public static void updateItem(Context context, GameEntity gameEntity, GameViewHolder holder, boolean isShowPlatform) { - updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, false); + updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, false, null); } public static void updateItem(Context context, GameEntity gameEntity, GameViewHolder holder, boolean isShowPlatform, boolean hideDownloadBtnIfNoAvailableContent) { - updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, hideDownloadBtnIfNoAvailableContent); + updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, hideDownloadBtnIfNoAvailableContent, null); } public static void updateItem(Context context, GameEntity gameEntity, GameViewHolder holder, - boolean isShowPlatform, PluginLocation pluginLocation, boolean hideDownloadBtnIfNoAvailableContent) { + boolean isShowPlatform, String briefStyle) { + updateItem(context, gameEntity, holder, isShowPlatform, PluginLocation.only_game, false, briefStyle); + } + + public static void updateItem(Context context, GameEntity gameEntity, GameViewHolder holder, + boolean isShowPlatform, PluginLocation pluginLocation, + boolean hideDownloadBtnIfNoAvailableContent, + @Nullable String briefStyle) { // 控制是否显示下载按钮 if (!Config.isShowDownload(gameEntity.getId()) || context.getString(R.string.app_name).equals(gameEntity.getName())) { @@ -201,16 +208,16 @@ public class DownloadItemUtils { holder.gameDownloadBtn.setClickable(false); } } else if (gameEntity.getApk().size() == 1) { - updateNormalItem(context, holder, gameEntity, isShowPlatform, pluginLocation); + updateNormalItem(context, holder, gameEntity, isShowPlatform, pluginLocation, briefStyle); } else { - updatePluginItem(context, holder, gameEntity, isShowPlatform, pluginLocation); + updatePluginItem(context, holder, gameEntity, isShowPlatform, pluginLocation, briefStyle); } } // 更新正常的条目,只有一个apk包 static void updateNormalItem(Context context, GameViewHolder holder, GameEntity gameEntity, - boolean isShowPlatform, PluginLocation pluginLocation) { + boolean isShowPlatform, PluginLocation pluginLocation, String briefStyle) { final ArrayMap entryMap = gameEntity.getEntryMap(); final ApkEntity apkEntity = gameEntity.getApk().get(0); @@ -226,14 +233,24 @@ public class DownloadItemUtils { GameUtils.setDownloadBtnStatus(context, gameEntity, holder.gameDownloadBtn, pluginLocation); - holder.gameDes.setVisibility(View.VISIBLE); holder.gameProgressbar.setVisibility(View.GONE); holder.gameInfo.setVisibility(View.GONE); + if (briefStyle != null && briefStyle.contains("star")) { + holder.gameRating.setVisibility(View.VISIBLE); + } else { + holder.gameRating.setVisibility(View.GONE); + } + + if (TextUtils.isEmpty(briefStyle) || briefStyle.contains("brief")) { + holder.gameDes.setVisibility(View.VISIBLE); + } else { + holder.gameDes.setVisibility(View.GONE); + } } // 更新插件的条目,有多个apk包 private static void updatePluginItem(Context context, GameViewHolder holder, GameEntity gameEntity, - boolean isShowPlatform, PluginLocation pluginLocation) { + boolean isShowPlatform, PluginLocation pluginLocation, String briefStyle) { GameUtils.setDownloadBtnStatus(context, gameEntity, holder.gameDownloadBtn, pluginLocation); ArrayMap entryMap = gameEntity.getEntryMap(); @@ -253,15 +270,26 @@ public class DownloadItemUtils { } } - holder.gameDes.setVisibility(View.VISIBLE); holder.gameProgressbar.setVisibility(View.GONE); holder.gameInfo.setVisibility(View.GONE); + if (briefStyle != null && briefStyle.contains("star")) { + holder.gameRating.setVisibility(View.VISIBLE); + } else { + holder.gameRating.setVisibility(View.GONE); + } + + if (TextUtils.isEmpty(briefStyle) || briefStyle.contains("brief")) { + holder.gameDes.setVisibility(View.VISIBLE); + } else { + holder.gameDes.setVisibility(View.GONE); + } } // 更改进度条和提示文本的状态 public static void changeStatus(Context context, GameViewHolder holder, DownloadEntity downloadEntity, boolean isShowPlatform, boolean isNormal) { holder.gameDes.setVisibility(View.GONE); + holder.gameRating.setVisibility(View.GONE); holder.gameProgressbar.setVisibility(View.VISIBLE); holder.gameInfo.setVisibility(View.VISIBLE); @@ -429,7 +457,7 @@ public class DownloadItemUtils { LinkEntity linkEntity = gameEntity.getH5Link(); - boolean isPlay = "play".equals(linkEntity.getType()); // 是否为开始玩 + boolean isPlay = "play".equals(linkEntity.getType()); // 是否为开始玩 if (isPlay) { HistoryHelper.insertGameEntity(gameEntity); } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.kt b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.kt index 0476f281ae..0fe076b3e0 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameHeadViewHolder.kt @@ -9,6 +9,13 @@ import com.gh.gamecenter.entity.SubjectEntity class GameHeadViewHolder(var binding: GameHeadItemBinding) : BaseRecyclerViewHolder(binding.root) { fun bindHead(subject: SubjectEntity) { + if (subject.showName) { + binding.headContainer.visibility = View.VISIBLE + } else { + binding.headContainer.visibility = View.GONE + return + } + binding.subject = subject binding.headPb.visibility = View.GONE val text = if ("change" == subject.home) "换一批" else "全部 >" diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java index a1ee3dc080..f872b5d53b 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewHolder.java @@ -27,6 +27,7 @@ public class GameViewHolder extends BaseRecyclerViewHolder { public TextView gameDownloadSpeed; public TextView gameDownloadPercentage; public TextView gameServerType; + public TextView gameRating; public GameViewHolder(View itemView) { super(itemView); @@ -41,6 +42,7 @@ public class GameViewHolder extends BaseRecyclerViewHolder { gameDownloadPercentage = binding.downloadPercentage; gameDes = binding.gameDes; gameDownloadSpeed = binding.downloadSpeed; + gameRating = binding.gameRating; } public void initServerType(GameEntity gameEntity) { diff --git a/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt b/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt index ba038292d0..90f011a286 100644 --- a/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt @@ -81,7 +81,6 @@ class NewCategoryListAdapter(context: Context, val gameEntity = mEntityList[position] holder.binding.game = gameEntity - holder.binding.subjectTag = "type" holder.initServerType(gameEntity) holder.binding.executePendingBindings() diff --git a/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java index 4ce3f36756..b2f7b5e808 100644 --- a/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/InstalledGameFragmentAdapter.java @@ -37,7 +37,6 @@ import com.gh.gamecenter.manager.PackagesManager; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.adapter.BaseRecyclerAdapter; -import com.lightgame.utils.Utils; import java.util.ArrayList; import java.util.Collections; @@ -278,7 +277,6 @@ public class InstalledGameFragmentAdapter extends BaseRecyclerAdapter = arrayListOf(), @SerializedName("p_button_add_word") var pluginDesc: String = "", //插件功能描述 - var pluggableCollection: GameCollectionEntity? = null //插件化包所在的合集 + var pluggableCollection: GameCollectionEntity? = null, //插件化包所在的合集 + @SerializedName("assign_remark") + val assignRemark: AssignRemark = AssignRemark() ) : Parcelable { @IgnoredOnParcel @@ -417,4 +418,12 @@ data class GameEntity( override fun toString() = value } + + @Parcelize + data class AssignRemark(@SerializedName("first_line") + val firstLine: String = "", + @SerializedName("second_line") + val secondLine: String = "", + @SerializedName("marked_red") + val markedRed: Boolean = false) : Parcelable } diff --git a/app/src/main/java/com/gh/gamecenter/entity/SubjectData.kt b/app/src/main/java/com/gh/gamecenter/entity/SubjectData.kt index d6abbd6c72..d69a389eb5 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/SubjectData.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/SubjectData.kt @@ -13,6 +13,8 @@ data class SubjectData( var sort: String = "", // Filter:最新/最热 var filter: String = "", // Filter: 类型(分类) var tagType: String? = "", // 游戏Item 标签类型 + var briefStyle: String = "", + var showSuffix: Boolean = true, var requireUpdateSetting: Boolean = false // 多专题页面需要专题页面自行获取专题配置 ) : Parcelable, Cloneable { diff --git a/app/src/main/java/com/gh/gamecenter/entity/SubjectEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/SubjectEntity.kt index 77540e5f4c..ca7df48025 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/SubjectEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/SubjectEntity.kt @@ -25,7 +25,17 @@ data class SubjectEntity(@SerializedName("_id") @SerializedName("relation_column_id") var relatedColumnId: String? = null, var style: String? = "", // 值为 "top" 时表示此专题(合集)为排行榜 https://gitlab.ghzs.com/pm/halo-app-issues/issues/699 - val list: Int = 0) : Parcelable { + val list: Int = 0, + + @SerializedName("show_name") + var showName: Boolean = true, // 是否显示“专题名字”,true、false + @SerializedName("show_suffix") + var showSuffix: Boolean = true, // 是否显示”游戏后缀“,true、false + @SerializedName("type_style") + var typeStyle: String = "", // 横屏样式,不显示(default)、评分(star)、备注(remark) + @SerializedName("brief_style") + var briefStyle: String = "" // 简介样式,大小+简介(size&brief)、评分+简介(star&brief)、评分(star) +) : Parcelable { fun getFilterName(): String { if (!TextUtils.isEmpty(name) && !Config.isShowPlugin()) { diff --git a/app/src/main/java/com/gh/gamecenter/entity/SubjectSettingEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/SubjectSettingEntity.kt index 4600d076a7..bc13ae987d 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/SubjectSettingEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/SubjectSettingEntity.kt @@ -14,7 +14,12 @@ data class SubjectSettingEntity( var typeEntity: TypeEntity = TypeEntity(), var tag: String = "", var filter: String = "", // rows: off/on - var order: Boolean = false // 是否显示序号 + var order: Boolean = false, // 是否显示序号 + + @SerializedName("show_suffix") + var showSuffix: Boolean = true, + @SerializedName("brief_style") + var briefStyle: String = "" ) : Parcelable { @Parcelize data class TypeEntity( diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt index 67b816ea2b..41b9d7227d 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt @@ -470,7 +470,8 @@ class GameFragmentAdapter(context: Context, } holder.binding.game = gameEntity - holder.binding.subjectTag = subjectData.tag + holder.binding.isShowSuffix = subjectData.isShowSuffix + holder.binding.briefStyle = subjectData.briefStyle holder.initServerType(gameEntity) holder.binding.executePendingBindings() @@ -484,7 +485,7 @@ class GameFragmentAdapter(context: Context, this@GameFragmentAdapter, StringUtils.buildString("(游戏-专题:", subjectData.name, "-列表[", (position + 1).toString(), "])"), StringUtils.buildString("游戏-专题-", subjectData.name, ":", gameEntity.name), itemData.exposureEvent) - DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable) + DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable, subjectData.briefStyle) holder.itemView.setOnClickListener { DataCollectionUtils.uploadClick(mContext, subjectData.name + "-列表", "游戏-专题", gameEntity.name) diff --git a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt index ade73c4001..0d619004d8 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameViewModel.kt @@ -424,7 +424,8 @@ class GameViewModel(application: Application, var blockData: SubjectRecommendEnt val gameEntity = data[0] if (gameEntity.id.isNullOrEmpty()) gameEntity.id = gameEntity.link ?: "" - if (data[0].type == "column") { + // 图片专题样式(后台操作->只显示(滑动)) + if (data[0].type == "column" && subjectEntity.type == "image_slide") { itemDataImage.imageSlide = gameEntity mItemDataListCache.add(itemDataImage) } else { @@ -452,7 +453,9 @@ class GameViewModel(application: Application, var blockData: SubjectRecommendEnt name = subjectEntity.name, tag = subjectEntity.tag, position = i + if (data[0].image.isNullOrEmpty()) 1 else 0, - isOrder = subjectEntity.isOrder) + isOrder = subjectEntity.isOrder, + briefStyle = subjectEntity.briefStyle, + isShowSuffix = subjectEntity.showSuffix) addGamePositionAndPackage(game) } @@ -488,7 +491,9 @@ class GameViewModel(application: Application, var blockData: SubjectRecommendEnt name = subjectEntity.name, tag = subjectEntity.tag, position = i + if (data[0].image.isNullOrEmpty()) 1 else 0, - isOrder = subjectEntity.isOrder) + isOrder = subjectEntity.isOrder, + briefStyle = subjectEntity.briefStyle, + isShowSuffix = subjectEntity.showSuffix) val itemDataGame = GameItemData() game.sequence = i itemDataGame.game = game diff --git a/app/src/main/java/com/gh/gamecenter/game/data/GameSubjectData.kt b/app/src/main/java/com/gh/gamecenter/game/data/GameSubjectData.kt index 3b853375c4..b9cfadd3de 100644 --- a/app/src/main/java/com/gh/gamecenter/game/data/GameSubjectData.kt +++ b/app/src/main/java/com/gh/gamecenter/game/data/GameSubjectData.kt @@ -4,4 +4,9 @@ import android.os.Parcelable import kotlinx.android.parcel.Parcelize @Parcelize -data class GameSubjectData(val name: String? = "", val tag: String? = "", val position: Int? = 0, val isOrder: Boolean) : Parcelable +data class GameSubjectData(val name: String? = "", + val tag: String? = "", + val position: Int? = 0, + val isOrder: Boolean, + val briefStyle: String = "", + val isShowSuffix: Boolean = true) : Parcelable diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt index f35d8c21b8..09b829fa36 100644 --- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt @@ -1,6 +1,7 @@ package com.gh.gamecenter.game.horizontal import android.content.Context +import android.graphics.Color import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.gh.common.exposure.ExposureEvent @@ -52,7 +53,6 @@ class GameHorizontalAdapter(context: Context, } override fun onBindViewHolder(holder: GameHorizontalItemViewHolder, position: Int) { - holder.binding.root.setPadding(0, 0, 0, 8f.dip2px()) if (exposureEventList.isNullOrEmpty()) { val params = holder.binding.root.layoutParams as RecyclerView.LayoutParams params.width = RecyclerView.LayoutParams.WRAP_CONTENT @@ -61,6 +61,8 @@ class GameHorizontalAdapter(context: Context, val gameEntity = mSubjectEntity.data!![position + getIndex()] holder.binding.game = gameEntity + holder.binding.subject = mSubjectEntity + holder.setRemarkView(mSubjectEntity, gameEntity) holder.itemView.setOnClickListener { if (exposureEventList.isNullOrEmpty()) { DataCollectionUtils.uploadClick(mContext, "大家都在玩", "游戏详情", gameEntity.name) diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalItemViewHolder.kt index f1b9b1c513..c1b0355a14 100644 --- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalItemViewHolder.kt @@ -2,21 +2,61 @@ package com.gh.gamecenter.game.horizontal import android.text.TextUtils import android.view.Gravity +import android.view.View import android.view.ViewTreeObserver import android.widget.TextView import androidx.databinding.BindingAdapter import com.gh.base.BaseRecyclerViewHolder import com.gh.gamecenter.databinding.GameHorizontalItemBinding import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.SubjectEntity class GameHorizontalItemViewHolder(val binding: GameHorizontalItemBinding) : BaseRecyclerViewHolder(binding.root) { + /** + * 备注显示规则如下: + * 一个专题中,只要有一个或以上的备注信息存在则显示或者隐藏占位,没有则隐藏 + */ + fun setRemarkView(subjectEntity: SubjectEntity, gameEntity: GameEntity) { + if (subjectEntity.typeStyle == "remark") { + var isHasFirstRemakeDate = false + var isHasSecondRemakeDate = false + for (entity in subjectEntity.data!!) { + if (!isHasFirstRemakeDate && entity.assignRemark.firstLine.isNotEmpty()) isHasFirstRemakeDate = true + if (!isHasSecondRemakeDate && entity.assignRemark.secondLine.isNotEmpty()) isHasSecondRemakeDate = true + if (isHasFirstRemakeDate && isHasSecondRemakeDate) break + } + if (isHasFirstRemakeDate) { + if (gameEntity.assignRemark.firstLine.isNotEmpty()) { + binding.firstRemake.visibility = View.VISIBLE + } else { + binding.firstRemake.visibility = View.INVISIBLE + } + } else { + binding.firstRemake.visibility = View.GONE + } + + if (isHasSecondRemakeDate) { + if (gameEntity.assignRemark.secondLine.isNotEmpty()) { + binding.secondRemake.visibility = View.VISIBLE + } else { + binding.secondRemake.visibility = View.INVISIBLE + } + } else { + binding.secondRemake.visibility = View.GONE + } + } else { + binding.firstRemake.visibility = View.GONE + binding.secondRemake.visibility = View.GONE + } + } + companion object { @JvmStatic @BindingAdapter("setHorizontalNameAndGravity") fun setHorizontalNameAndGravity(view: TextView, name: String?) { view.text = name - view.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{ + view.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { view.viewTreeObserver.removeOnGlobalLayoutListener(this); view.gravity = if (view.lineCount >= 2) { diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt index f960e82d46..393490d654 100644 --- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt @@ -5,11 +5,14 @@ import android.view.ViewGroup import com.gh.common.exposure.ExposureEvent import com.gh.common.util.StringUtils import com.gh.common.util.dip2px +import com.gh.common.util.goneIf +import com.gh.common.util.visibleIf import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.R import com.gh.gamecenter.databinding.GameHorizontalItemBinding import com.gh.gamecenter.entity.SubjectEntity import com.lightgame.adapter.BaseRecyclerAdapter +import com.lightgame.utils.Utils class GameHorizontalSlideAdapter(context: Context, private var mSubjectEntity: SubjectEntity, @@ -47,13 +50,15 @@ class GameHorizontalSlideAdapter(context: Context, } override fun onBindViewHolder(holder: GameHorizontalItemViewHolder, position: Int) { - val padL = if (position == 0) 16f.dip2px() else 8f.dip2px() - holder.binding.root.setPadding(padL, 0, 0, 8f.dip2px()) + val padL = if (position == 0) 20f.dip2px() else 18f.dip2px() + holder.binding.root.setPadding(padL, 8f.dip2px(), 0, 8f.dip2px()) holder.binding.root.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) val gameEntity = mSubjectEntity.data!![position + getIndex()] holder.binding.game = gameEntity + holder.binding.subject = mSubjectEntity + holder.setRemarkView(mSubjectEntity, gameEntity) holder.itemView.setOnClickListener { val exposureEvent = exposureEventList?.get(position) if (exposureEvent != null) { diff --git a/app/src/main/java/com/gh/gamecenter/game/vertical/GameVerticalAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/vertical/GameVerticalAdapter.kt index eaee7a12d3..8821938f3d 100644 --- a/app/src/main/java/com/gh/gamecenter/game/vertical/GameVerticalAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/vertical/GameVerticalAdapter.kt @@ -18,7 +18,7 @@ class GameVerticalAdapter(context: Context, private var mSubjectEntity: SubjectEntity, private var mItemClick: (Int, GameEntity) -> Unit, private var mTransparentBackground: Boolean = false, - private val mShowGameIconGif :Boolean = true) + private val mShowGameIconGif: Boolean = true) : BaseRecyclerAdapter(context) { private val mMaxWidth = mContext.resources.displayMetrics.widthPixels @@ -69,13 +69,14 @@ class GameVerticalAdapter(context: Context, val subjectData = gameEntity.subjectData!! holder.binding.game = gameEntity - holder.binding.subjectTag = subjectData.tag + holder.binding.isShowSuffix = subjectData.isShowSuffix + holder.binding.briefStyle = subjectData.briefStyle holder.initServerType(gameEntity) holder.binding.executePendingBindings() DownloadItemUtils.setOnClickListener(mContext, holder.binding.downloadBtn, gameEntity, position, this@GameVerticalAdapter, "", "", gameEntity.exposureEvent) - DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable) + DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable, subjectData.briefStyle) holder.itemView.setOnClickListener { mItemClick.invoke(position % mSubjectEntity.list, gameEntity) } diff --git a/app/src/main/java/com/gh/gamecenter/history/HistoryGameListAdapter.kt b/app/src/main/java/com/gh/gamecenter/history/HistoryGameListAdapter.kt index 831c0c8f60..f8541e4563 100644 --- a/app/src/main/java/com/gh/gamecenter/history/HistoryGameListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/history/HistoryGameListAdapter.kt @@ -53,7 +53,6 @@ class HistoryGameListAdapter(context: Context, private val mViewModel: HistoryGa holder.binding.game = gameEntity holder.initServerType(gameEntity) - holder.binding.subjectTag = "type" holder.binding.executePendingBindings() holder.itemView.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt index f1999b48f7..b44623ce7a 100644 --- a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt +++ b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt @@ -32,6 +32,7 @@ import com.gh.gamecenter.game.vertical.GameVerticalSlideViewHolder import com.gh.gamecenter.subject.SubjectActivity import com.halo.assistant.fragment.game.GamePluginAdapter import com.halo.assistant.fragment.game.GamePluginViewHolder +import com.lightgame.utils.Utils import java.util.* // 产品没定义的数据统计会用[首页]作为默认值,不管了 bite me @@ -398,8 +399,10 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, } holder.binding.game = gameEntity - holder.binding.subjectTag = subjectData.tag holder.initServerType(gameEntity) + holder.binding.isShowSuffix = subjectData.isShowSuffix + holder.binding.briefStyle = subjectData.briefStyle + holder.binding.executePendingBindings() item.exposureEvent = ExposureEvent.createEvent(gameEntity = gameEntity, @@ -421,7 +424,7 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, } } }) - DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable) + DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), !gameEntity.isPluggable, subjectData.briefStyle) holder.itemView.setOnClickListener { if (mOuterType == OuterType.NEW_HOME) { diff --git a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeSubjectTransformer.kt b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeSubjectTransformer.kt index 87edd4897c..c91fd1752a 100644 --- a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeSubjectTransformer.kt +++ b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeSubjectTransformer.kt @@ -53,7 +53,9 @@ object LegacyHomeSubjectTransformer { name = subjectEntity.name, tag = subjectEntity.tag, position = i + if (data[0].image.isNullOrEmpty()) 1 else 0, - isOrder = subjectEntity.isOrder) + isOrder = subjectEntity.isOrder, + briefStyle = subjectEntity.briefStyle, + isShowSuffix = subjectEntity.showSuffix) addGamePositionAndPackage(game) } @@ -92,7 +94,9 @@ object LegacyHomeSubjectTransformer { name = subjectEntity.name, tag = subjectEntity.tag, position = i + if (data[0].image.isNullOrEmpty()) 1 else 0, - isOrder = subjectEntity.isOrder) + isOrder = subjectEntity.isOrder, + briefStyle = subjectEntity.briefStyle, + isShowSuffix = subjectEntity.showSuffix) val itemDataGame = newItemInstance() itemDataGame.blockPosition = blockPosition + 1 game.sequence = i diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt index a56dc5bc80..1d8bdba4da 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt @@ -56,7 +56,6 @@ class MyFollowedGameAdapter(context: Context, var mViewModel: MyFollowedGameView holder.initServerType(gameEntity) holder.initShortcut(gameEntity, mEntrance, path,newPath) holder.updateConcernButton(gameEntity, mViewModel) - holder.binding.gameItemIncluded.subjectTag = "type" holder.binding.executePendingBindings() holder.itemView.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt index 88010d667e..e55ae3e163 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyReservationAdapter.kt @@ -54,7 +54,6 @@ class MyReservationAdapter(context: Context, var mViewModel: MyReservationViewMo holder.binding.gameItemIncluded.hideSize = true holder.initServerType(gameEntity) holder.initShortcut(gameEntity, mEntrance, path, newPath) - holder.binding.gameItemIncluded.subjectTag = "type" holder.binding.executePendingBindings() DownloadItemUtils.updateItemWithReserveStatus(GameViewHolder(holder.binding.gameItemIncluded), gameEntity) diff --git a/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt index 41ccf9f7a4..f468d95f63 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt @@ -99,7 +99,6 @@ open class PlayedGameAdapter(context: Context, } holder.binding.gameItemIncluded.hideSize = true holder.binding.gameItemIncluded.game = gameEntity - holder.binding.gameItemIncluded.subjectTag = "type" holder.binding.executePendingBindings() holder.binding.gameItemIncluded.labelList.removeAllViews() diff --git a/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt index b2416ad38e..d9997ef90a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/CommunityFragment.kt @@ -257,7 +257,9 @@ class CommunityFragment : BaseLazyTabFragment() { override fun destroyItem(container: ViewGroup, position: Int, any: Any) { if (container.tag == NEED_DESTROY_FRAGMENT_TAG) { - super.destroyItem(container, position, any) + tryCatchInRelease { + super.destroyItem(container, position, any) + } } } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt index 0f9489d861..82ae8cccbe 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/GameAdapter.kt @@ -30,7 +30,6 @@ class GameAdapter(context: Context) : ListAdapter(context) { if (holder is GameItemViewHolder) { val entity = mEntityList[position] holder.binding.game = entity - holder.binding.subjectTag = "type" holder.binding.downloadBtn.visibility = View.GONE val layoutParams = holder.binding.gameName.layoutParams layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt index 42148c75cc..8b9460ffc1 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexAdapter.kt @@ -95,7 +95,6 @@ class SearchGameIndexAdapter(context: Context, val binding = holder.binding binding.game = gameEntity - binding.subjectTag = "type" holder.initServerType(gameEntity) binding.executePendingBindings() diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt index 3f39b5c731..3fdc27f908 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt @@ -99,7 +99,6 @@ class SearchGameResultAdapter(context: Context, val binding = holder.binding val gameEntity = mEntityList[holder.adapterPosition] binding.game = gameEntity - binding.subjectTag = "type" holder.initServerType(gameEntity) binding.executePendingBindings() diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt b/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt index 54bbc00e02..08e7e941ed 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt @@ -98,7 +98,8 @@ class SubjectAdapter(context: Context, val gameEntity = mEntityList[position] holder.binding.game = gameEntity - holder.binding.subjectTag = subjectData.tagType + holder.binding.briefStyle = subjectData.briefStyle + holder.binding.isShowSuffix = subjectData.showSuffix holder.initServerType(gameEntity) holder.binding.executePendingBindings() @@ -194,7 +195,7 @@ class SubjectAdapter(context: Context, StringUtils.buildString(subjectData.subjectName, ":", gameEntity.name), exposureEvent) - DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), true) + DownloadItemUtils.updateItem(mContext, gameEntity, GameViewHolder(holder.binding), true, subjectData.briefStyle) } else if (holder is GameImageViewHolder) { val gameEntity = mEntityList[position] holder.binding.gameImageLine.visibility = View.GONE diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectListViewModel.kt b/app/src/main/java/com/gh/gamecenter/subject/SubjectListViewModel.kt index f85b64e79d..28360e3550 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectListViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectListViewModel.kt @@ -44,6 +44,8 @@ class SubjectListViewModel(application: Application, subjectData.requireUpdateSetting = false subjectData.tagType = response?.tag subjectData.isOrder = response?.order + subjectData.briefStyle = response?.briefStyle ?: "" + subjectData.showSuffix = response?.showSuffix ?: true loadData() } diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectViewModel.kt b/app/src/main/java/com/gh/gamecenter/subject/SubjectViewModel.kt index f5b3a8f3fa..c98d4fa668 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectViewModel.kt @@ -75,6 +75,8 @@ class SubjectViewModel(application: Application, var subjectData: SubjectData?) val content = response!!.typeEntity.content content.add(0, "全部") subjectData?.tagType = response.tag + subjectData?.briefStyle = response.briefStyle + subjectData?.showSuffix = response.showSuffix subjectSettingLD.postValue(response) } diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt b/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt index acd5cd8461..aa10a45d05 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt @@ -27,7 +27,6 @@ class SuggestGameCollectAdapter(context: Context, val gameEntity = mGameList[position] holder.binding.game = gameEntity - holder.binding.subjectTag = "type" holder.initServerType(gameEntity) holder.binding.executePendingBindings() holder.binding.downloadBtn.text = "查看" diff --git a/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt b/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt index b063d8b737..045fcb2262 100644 --- a/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt @@ -79,7 +79,6 @@ class TagsListAdapter(context: Context, holder.binding.game = gameEntity holder.initServerType(gameEntity) - holder.binding.subjectTag = "type" holder.binding.executePendingBindings() gameEntity.sequence = position + 1 diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java index 8d93a9237a..dbd180db69 100644 --- a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java +++ b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java @@ -4,6 +4,8 @@ import android.content.Context; import android.view.View; import android.view.ViewGroup; +import androidx.recyclerview.widget.RecyclerView; + import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; @@ -21,8 +23,6 @@ import com.lightgame.download.DownloadEntity; import java.util.List; -import androidx.recyclerview.widget.RecyclerView; - /** * Created by khy on 15/08/17. *

@@ -71,7 +71,6 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { holder.initServerType(gameEntity); GameItemBinding binding = holder.getBinding(); binding.setGame(gameEntity); - binding.setSubjectTag("type"); binding.setIsShowPlatform(true); binding.executePendingBindings(); holder.itemView.setOnClickListener(v -> { @@ -87,7 +86,7 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { StringUtils.buildString("(游戏-专题:", "插件化", "-列表[", String.valueOf(1), "])"), StringUtils.buildString("游戏-专题-", "插件化", ":", gameEntity.getName()), gameEntity.getExposureEvent(), () -> MtaHelper.onEvent("首页_新", "点击", "插件化" + (position + 1) + "_" + gameEntity.getName() + "_" + binding.downloadBtn.getText().toString())); - DownloadItemUtils.updateItem(mContext, gameEntity, new GameViewHolder(binding), !gameEntity.isPluggable(), PluginLocation.only_index, false); + DownloadItemUtils.updateItem(mContext, gameEntity, new GameViewHolder(binding), !gameEntity.isPluggable(), PluginLocation.only_index, false, null); } @Override diff --git a/app/src/main/res/drawable-xxhdpi/game_horizontal_rating.png b/app/src/main/res/drawable-xxhdpi/game_horizontal_rating.png new file mode 100644 index 0000000000..1edb5f02fb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/game_horizontal_rating.png differ diff --git a/app/src/main/res/layout/game_head_item.xml b/app/src/main/res/layout/game_head_item.xml index 6acb30921b..092ee909e7 100644 --- a/app/src/main/res/layout/game_head_item.xml +++ b/app/src/main/res/layout/game_head_item.xml @@ -23,6 +23,7 @@ android:background="@color/background" /> + + + + + + @@ -19,34 +27,86 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" + android:paddingTop="8dp" android:paddingBottom="8dp"> - - + - + + + + + + diff --git a/app/src/main/res/layout/game_item.xml b/app/src/main/res/layout/game_item.xml index 2b254e18ac..d99e9c1fe8 100644 --- a/app/src/main/res/layout/game_item.xml +++ b/app/src/main/res/layout/game_item.xml @@ -3,14 +3,22 @@ + + + + + + @@ -72,7 +80,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="8dp" - android:layout_marginRight="20dp" + android:layout_marginRight="8dp" android:layout_weight="1" android:orientation="vertical"> @@ -85,6 +93,7 @@ + +