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 02af4e5a5e..d76a5918d3 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -28,10 +28,14 @@ public class Constants { public static final String XPOSED_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer"; public static final String EB_QUIT_LOGIN = "quit_login"; - - public static final String GAME_ID_DIVIDER = ":"; // 用于避免历史下载掺和到普通下载状态的 ID 修饰符 - public static final String GAME_NAME_DECORATOR = " "; // 用于避免历史下载影响到部分依赖名字作为数据更新条件的修饰符 + // 用于避免历史下载掺和到普通下载状态的 ID 修饰符 + public static final String GAME_ID_DIVIDER = ":"; + // 用于避免历史下载影响到部分依赖名字作为数据更新条件的修饰符 + public static final String GAME_NAME_DECORATOR = " "; + + // 游戏详情进入时的自定义栏目标签是否已经默认展开过一次的标记 + public static final String SP_HAS_EXPANDED_GAME_DETAIL_TAGS = "has_expanded_game_detail_tags"; // 最近显示的弹窗信息 public static final String SP_LAST_OPENING_ID = "last_opening_dialog_id"; diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt index c131be7bb8..cdff80d106 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt @@ -53,7 +53,8 @@ class DescAdapter(context: Context, var descItemList = arrayListOf() - private var mExpandSparseBooleanArray = SparseBooleanArray() + private var mExpandableTextExpandStatusSparseBooleanArray = SparseBooleanArray() + private var mCustomColumnTagsExpandStatusSparseBooleanArray = SparseBooleanArray() fun updateDescItemList(descItemList: ArrayList) { this.descItemList = descItemList @@ -431,12 +432,12 @@ class DescAdapter(context: Context, holder.binding.containerPaddingTop = itemData.paddingTop holder.binding.containerPaddingBottom = itemData.paddingBottom holder.binding.contentTv.text = updateContent?.updateDes ?: "" - val maxDesLines = if (mExpandSparseBooleanArray.get(holder.adapterPosition)) Int.MAX_VALUE else 4 + val maxDesLines = if (mExpandableTextExpandStatusSparseBooleanArray.get(holder.adapterPosition)) Int.MAX_VALUE else 4 holder.binding.contentTv.setExpandMaxLines(maxDesLines) holder.binding.contentTv.setIsExpanded(Int.MAX_VALUE == maxDesLines) holder.binding.executePendingBindings() holder.binding.contentTv.setExpandCallback { - mExpandSparseBooleanArray.put(holder.adapterPosition, true) + mExpandableTextExpandStatusSparseBooleanArray.put(holder.adapterPosition, true) MtaHelper.onEvent("游戏详情_新", "展开更新内容", gameName) } holder.binding.historyVersionTv.setOnClickListener { @@ -618,7 +619,7 @@ class DescAdapter(context: Context, linkHintTv: View, linkHintArrowIv: View) { val tags = if (customColumn.showInfoTag == true) customColumn.infoTag else arrayListOf() - val maxDesLines = if (mExpandSparseBooleanArray.get(position)) { + val maxDesLines = if (mExpandableTextExpandStatusSparseBooleanArray.get(position)) { Int.MAX_VALUE } else { when { @@ -626,6 +627,16 @@ class DescAdapter(context: Context, else -> customColumn.showDesRowNum!! } } + val layoutManager = if (customColumn.showInfoTagDesType == "expand" || mCustomColumnTagsExpandStatusSparseBooleanArray.get(position)) { + if (customColumn.showInfoTagDes == false) { + GridLayoutManager(mContext, 3) + } else { + mCustomColumnTagsExpandStatusSparseBooleanArray.put(position, true) + LinearLayoutManager(mContext) + } + } else { + GridLayoutManager(mContext, 3) + } titleHintTv.paint?.isUnderlineText = true contentTv.setExpandMaxLines(maxDesLines) @@ -633,10 +644,12 @@ class DescAdapter(context: Context, contentTv.setTextWithHighlightedTextWrappedInsideWrapper(customColumn.des ?: "") recyclerView.isNestedScrollingEnabled = false - recyclerView.layoutManager = if (customColumn.showInfoTagDes == true) { - LinearLayoutManager(mContext) - } else { - GridLayoutManager(mContext, 3) + recyclerView.layoutManager = layoutManager + recyclerView.setOnClickListener { + if (customColumn.showInfoTagDes == true) { + mCustomColumnTagsExpandStatusSparseBooleanArray.put(position, true) + notifyItemChanged(position) + } } if (recyclerView.adapter == null) { @@ -644,9 +657,9 @@ class DescAdapter(context: Context, } (recyclerView.adapter as GameDetailCustomColumnAdapter) - .updateData(ArrayList(tags!!), customColumn.showInfoTagDes ?: false) + .updateData(ArrayList(tags!!), mCustomColumnTagsExpandStatusSparseBooleanArray.get(position)) contentTv.setExpandCallback { - mExpandSparseBooleanArray.put(position, true) + mExpandableTextExpandStatusSparseBooleanArray.put(position, true) if (customColumn.name == "游戏简介") { MtaHelper.onEvent("游戏详情_新", "展开游戏介绍", gameName) } else { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt index 5d98131d46..306be2a696 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescViewModel.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.facebook.common.util.UriUtil +import com.gh.common.constant.Constants import com.gh.common.repository.RemenkapaiRepository import com.gh.common.util.* import com.gh.gamecenter.R @@ -208,6 +209,8 @@ class DescViewModel(application: Application, val specialPadding = DisplayUtils.dip2px(12F) val defaultPadding = DisplayUtils.dip2px(15F) + var containsFirstTimeExpandCustomColumnTags = false + // A 确定每个 item 的上下内边距 for ((index, rawItem) in detailEntityList.withIndex()) { rawItem.paddingTop = defaultPadding @@ -247,6 +250,21 @@ class DescViewModel(application: Application, } } + // D 根据是否已打开过页面判断自定义栏目的标签是否需要进入就自动展开 + for (rawItem in detailEntityList) { + if (rawItem.type == DetailEntity.Type.CUSTOM_COLUMN.value) { + if (rawItem.customColumn?.showInfoTagDesType == "first_expand" + && !SPUtils.getBoolean(Constants.SP_HAS_EXPANDED_GAME_DETAIL_TAGS)) { + containsFirstTimeExpandCustomColumnTags = true + rawItem.customColumn?.showInfoTagDesType = "expand" + } + } + } + + if (containsFirstTimeExpandCustomColumnTags) { + SPUtils.setBoolean(Constants.SP_HAS_EXPANDED_GAME_DETAIL_TAGS, true) + } + loadCustomColumnImageInAdvance(detailEntityList) return detailEntityList diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt index 335615892a..e2e809a3a3 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt @@ -93,6 +93,8 @@ data class CustomColumn( var showInfoTag: Boolean? = false, @SerializedName("show_info_tag_des") var showInfoTagDes: Boolean? = false, + @SerializedName("show_info_tag_des_type") + var showInfoTagDesType: String? = "", // first_expand (用于默认展开), collapse, expand @SerializedName("info_tag") var infoTag: List? = listOf(), var time: Long? = 0) diff --git a/app/src/main/res/layout/gamedetail_item_custom_column.xml b/app/src/main/res/layout/gamedetail_item_custom_column.xml index e513ebd4f9..b8d3147935 100644 --- a/app/src/main/res/layout/gamedetail_item_custom_column.xml +++ b/app/src/main/res/layout/gamedetail_item_custom_column.xml @@ -33,7 +33,6 @@