diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.kt index 0fe210a577..a92b9a5d79 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.kt @@ -111,7 +111,7 @@ class GameDetailEntity( @Parcelize data class Video( - @SerializedName("video_id") + @SerializedName("_id") var videoId: String = "", @SerializedName("new_video_count", alternate = ["video_count"]) // 选用 JSON 最后一个值作为 videoCount 的值 var videoCount: Int = 0, diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 64159d7ba2..9ccea786c9 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -6,10 +6,7 @@ import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.* -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.PopupWindow -import android.widget.TextView +import android.widget.* import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat @@ -23,7 +20,6 @@ import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.BaseActivity import com.gh.base.adapter.FragmentAdapter import com.gh.base.fragment.BaseFragment_TabLayout -import com.gh.base.fragment.BaseFragment_TabLayout.createDefaultTabCustomView import com.gh.common.exposure.ExposureEvent import com.gh.common.util.* import com.gh.common.view.FlexLinearLayout @@ -49,7 +45,6 @@ import com.gh.gamecenter.gamedetail.video.TopVideoView import com.gh.gamecenter.mvvm.Status import com.gh.gamecenter.normal.NormalFragment import com.gh.gamecenter.packagehelper.PackageViewModel -import com.gh.gamecenter.subject.SubjectActivity import com.gh.gamecenter.suggest.SuggestType import com.gh.gamecenter.tag.TagsActivity import com.google.android.material.appbar.AppBarLayout @@ -266,8 +261,8 @@ class GameDetailFragment : NormalFragment() { if (mFirstTimeSelected) { when (position) { INDEX_DESC -> MtaHelper.onEvent("游戏详情_新", "默认[详情]", mGameEntity!!.name) - INDEX_TRENDES -> MtaHelper.onEvent("游戏详情_新", "默认[专区]", mGameEntity!!.name) - else -> MtaHelper.onEvent("游戏详情_新", "默认[评论]", mGameEntity!!.name) +// INDEX_TRENDES -> MtaHelper.onEvent("游戏详情_新", "默认[专区]", mGameEntity!!.name) +// else -> MtaHelper.onEvent("游戏详情_新", "默认[评论]", mGameEntity!!.name) } mFirstTimeSelected = false } else { @@ -513,7 +508,7 @@ class GameDetailFragment : NormalFragment() { for (i in 0 until mTabLayout.tabCount) { val tab = mTabLayout.getTabAt(i) ?: continue val tabTitle = if (tab.text != null) tab.text.toString() else "" - val tabView = createDefaultTabCustomView(tabTitle) + val tabView = getTabView(tabTitle) tab.customView = tabView } @@ -785,15 +780,12 @@ class GameDetailFragment : NormalFragment() { fun onEventMainThread(reuse: EBReuse) { if (SKIP_DESC == reuse.type) { tabPerformClick(INDEX_DESC) - MtaHelper.onEvent("游戏详情_新", "默认_介绍", mGameEntity!!.name) } else if (OPEN_APPBAR == reuse.type && !mIsTouchScreen) { mAppBarLayout.setExpanded(true, true) } else if (SKIP_FULI == reuse.type) { mViewPager.currentItem = INDEX_TRENDES - MtaHelper.onEvent("游戏详情_新", "默认_动态", mGameEntity!!.name) } else if (SKIP_RATING == reuse.type) { mViewPager.currentItem = INDEX_RATING - MtaHelper.onEvent("游戏详情_新", "默认_评分", mGameEntity!!.name) } else if ("hideKaifuHint" == reuse.type) { mIsShowKaifuHint = false mKaifuHint.visibility = View.GONE @@ -896,6 +888,15 @@ class GameDetailFragment : NormalFragment() { updateDownloadCountHint(mPackageViewModel.filterSameUpdateLiveData.value) } + private fun getTabView(title: String): View { + val view = LayoutInflater.from(HaloApp.getInstance().application.baseContext).inflate(R.layout.tab_item_gamedetail, null) + val tabTitle = view.findViewById(R.id.tab_title) + if (tabTitle is CheckedTextView) { + tabTitle.setText(title) + } + return view + } + private fun pauseVideo() { if (mViewModel.displayTopVideo) { mTopVideoView.onVideoPause() 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 a6eac519bf..afba905b50 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 @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import anet.channel.util.Utils.context import com.gh.base.OnListClickListener import com.gh.common.util.* import com.gh.common.view.GridSpacingItemColorDecoration @@ -202,7 +203,9 @@ class DescAdapter(context: Context, private fun bindCustomColumnViewHolder(viewHolder: GameDetailCustomColumnViewHolder, detailEntity: DetailEntity) { val customColumn = detailEntity.customColumn!! val tags = if (customColumn.showInfoTag == true) customColumn.infoTag else arrayListOf() - val maxDesLines = if (mExpandSparseBooleanArray.get(viewHolder.adapterPosition)) { Int.MAX_VALUE } else { + val maxDesLines = if (mExpandSparseBooleanArray.get(viewHolder.adapterPosition)) { + Int.MAX_VALUE + } else { when { customColumn.showDesType == "all" || customColumn.showDesRowNum == 0 -> { Int.MAX_VALUE @@ -255,7 +258,7 @@ class DescAdapter(context: Context, viewHolder.binding.titleHintTv.performClick() } viewHolder.binding.titleHintTv.setOnClickListener { - MtaHelper.onEvent("游戏详情_新", "自定义栏目标题后跳转", "${gameName}-${customColumn.name}-${customColumn.nameLink}") + MtaHelper.onEvent("游戏详情_新", "自定义栏目标题后跳转", "${gameName}-${customColumn.name}-${customColumn.nameLink?.value}") DirectUtils.directToLinkPage(mContext, customColumn.nameLink!!, StringUtils.buildString(mEntrance, "游戏详情[", gameName, "]:自定义栏目"), "") } @@ -275,6 +278,7 @@ class DescAdapter(context: Context, if (subjectAdapter == null) { viewHolder.binding.galleryRv.layoutManager = GridLayoutManager(mContext, 4) subjectAdapter = GameHorizontalAdapter(mContext, subjectEntity, true) + subjectAdapter.gameName = gameName ?: "" (viewHolder.binding.galleryRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false viewHolder.binding.galleryRv.adapter = subjectAdapter } else { @@ -354,8 +358,8 @@ class DescAdapter(context: Context, params.rightMargin = 0 layoutParams = params layoutManager = LinearLayoutManager(mContext, RecyclerView.HORIZONTAL, false) - val gameGalleryAdapter = GameGalleryAdapter(mContext, videos, null, gameName!!, - StringUtils.buildString(mEntrance, "+(游戏详情[", gameName, "]:游戏介绍)")) + val gameGalleryAdapter = GameGalleryAdapter(mContext, videos, null, mViewModel.game!!, + StringUtils.buildString(mEntrance, "+(游戏详情[", gameName, "]:视频)")) adapter = gameGalleryAdapter val snapHelper = LeftPagerSnapHelper(0) snapHelper.attachToRecyclerView(this) @@ -373,6 +377,7 @@ class DescAdapter(context: Context, viewHolder.binding.moreTv.visibleIf(videoCount >= 3) viewHolder.binding.moreTv.setOnClickListener { MtaHelper.onEvent("游戏详情_新", "视频_更多", gameName) + DirectUtils.directToGameVideo(mContext, mViewModel.gameId ?: "", mEntrance, "游戏详情") } } @@ -386,8 +391,8 @@ class DescAdapter(context: Context, params.rightMargin = 0 layoutParams = params layoutManager = LinearLayoutManager(mContext, RecyclerView.HORIZONTAL, false) - val gameGalleryAdapter = GameGalleryAdapter(mContext, null, gallery, gameName!!, - StringUtils.buildString(mEntrance, "+(游戏详情[", gameName, "]:游戏介绍)")) + val gameGalleryAdapter = GameGalleryAdapter(mContext, null, gallery, mViewModel.game!!, + StringUtils.buildString(mEntrance, "+(游戏详情[", gameName, "]:图片)")) adapter = gameGalleryAdapter } } @@ -412,6 +417,7 @@ class DescAdapter(context: Context, ?: GameEntity(), mEntrance, "更新内容") mContext.startActivity(intent) } + holder.binding.historyVersionTv.goneIf(updateContent?.historyApkStatus != "on") holder.binding.contentTv.setExpandCallback { MtaHelper.onEvent("游戏详情_新", "展开更新内容", gameName) } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescCommentsAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescCommentsAdapter.kt index da0946dcc0..8fc2577cbc 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescCommentsAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescCommentsAdapter.kt @@ -131,6 +131,7 @@ class DescCommentsAdapter(context: Context, MtaHelper.onEvent("游戏详情_新", "玩家评论_复制", mViewModel.game?.name) } "修改" -> { + MtaHelper.onEvent("游戏详情_新", "玩家评论_修改", mViewModel.game?.name) val intent = RatingEditActivity.getPatchIntent(mContext, mViewModel.game!!, commentData) SyncDataBetweenPageHelper.startActivityForResult(mContext, intent, RatingFragment.RATING_PATCH_REQUEST, position) } 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 c5ed1f95bb..2c0b6970cd 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 @@ -2,6 +2,8 @@ package com.gh.gamecenter.gamedetail.desc import android.annotation.SuppressLint import android.app.Application +import android.graphics.Bitmap +import android.graphics.drawable.Drawable import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -18,6 +20,8 @@ import com.gh.gamecenter.gamedetail.entity.CustomColumn import com.gh.gamecenter.gamedetail.entity.DetailEntity import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager +import com.squareup.picasso.Picasso +import com.squareup.picasso.Target import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers @@ -204,9 +208,30 @@ class DescViewModel(application: Application, } } + loadCustomColumnImageInAdvance(detailEntityList) + return detailEntityList } + /** + * 预加载自定义栏目的标签小图标 + */ + private fun loadCustomColumnImageInAdvance(detailEntityList: ArrayList) { + for (item in detailEntityList) { + if (item.type == DetailEntity.Type.CUSTOM_COLUMN.value) { + item.customColumn?.infoTag?.let { + for (tag in it) { + Picasso.with(getApplication()).load(tag.icon).into(object : Target { + override fun onPrepareLoad(placeHolderDrawable: Drawable?) {} + override fun onBitmapFailed(errorDrawable: Drawable?) {} + override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {} + }) + } + } + } + } + } + class Factory(private val mApplication: Application, private val game: GameEntity?) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt index 775f940d38..72f956e2d4 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt @@ -4,7 +4,6 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable -import android.net.Uri import android.text.Spanned import android.view.View import android.view.ViewGroup @@ -46,10 +45,13 @@ class GameDetailCustomColumnAdapter(context: Context) val marginBetweenIconAndName = " " val content = if (mShowTagDes) "$marginBetweenIconAndName$name $des" else "$marginBetweenIconAndName$name" - val spannable = SpanBuilder(content).color(marginBetweenIconAndName.length, name?.length?.plus(marginBetweenIconAndName.length) ?: 1, color - ?: "#000000").build() + val spannable = SpanBuilder(content) + .color(marginBetweenIconAndName.length, + name?.length?.plus(marginBetweenIconAndName.length) ?: 1, + color ?: "#000000") + .build() - Picasso.with(mContext).load(Uri.parse(icon)) + Picasso.with(mContext).load(icon) .priority(Picasso.Priority.HIGH) .into(object : Target { override fun onPrepareLoad(placeHolderDrawable: Drawable?) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt index d95c6fd0d1..05e0e99cfe 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt @@ -56,7 +56,7 @@ class GameDetailInfoItemAdapter(val context: Context, gameInfo: GameInfo, privat "求更新" -> { MtaHelper.onEvent("游戏详情_新", "详细信息_我要求更新", gameName) DialogUtils.showTrackableDialog(context, "版本求更新", "如果游戏上线了新版本,您可以提交申请,让小助手尽快更新版本喔!", - "提交申请", "取消退出", { + "提交申请", "取消", { mViewModel.sendSuggestion() MtaHelper.onEvent("版本求更新", "弹窗", "点击提交申请") MtaHelper.onEvent("版本求更新", "提交申请", gameName) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt index ce4265c06b..00cfc20a39 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameGalleryAdapter.kt @@ -15,12 +15,13 @@ import com.gh.gamecenter.R import com.gh.gamecenter.ViewImageActivity import com.gh.gamecenter.databinding.GalleryVideoItemBinding import com.gh.gamecenter.entity.GameDetailEntity +import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel class GameGalleryAdapter(var context: Context, private val mVideo: ArrayList? = null, private val mGallery: ArrayList? = null, - private val mGameName: String, + val mGame: GameEntity, private val mEntrance: String) : RecyclerView.Adapter() { var mLayoutInflater: LayoutInflater = (context as Activity).layoutInflater @@ -62,7 +63,7 @@ class GameGalleryAdapter(var context: Context, } holder.itemView.setOnClickListener { DataCollectionUtils.uploadClick(context, "游戏介绍", "游戏详情") - MtaHelper.onEvent("游戏详情_新", "点击游戏截图", mGameName) + MtaHelper.onEvent("游戏详情_新", "点击游戏截图", mGame.name) val intent = ViewImageActivity.getViewImageIntent(context, mGallery, holder.adapterPosition, mEntrance) context.startActivity(intent) @@ -74,9 +75,10 @@ class GameGalleryAdapter(var context: Context, holder.binding.usernameTv.text = video?.user?.name holder.binding.videoTitleTv.text = video?.title holder.binding.screenshotItemIv.setOnClickListener { - MtaHelper.onEvent("游戏详情_新", "点击视频", "${mGameName}+${video?.title}") -// DirectUtils.directToVideoDetail(holder.binding.root.context, video?.videoId -// ?: "", VideoDetailContainerViewModel.Location.VIDEO_HOT.value, path = "游戏详情-视频") + MtaHelper.onEvent("游戏详情_新", "点击视频", "${mGame.name}+${video?.title}") + DirectUtils.directToVideoDetail(context, video?.videoId + ?: "", VideoDetailContainerViewModel.Location.GAME_DETAIL.value, + false, mGame.id, mEntrance, "游戏详情") } } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt index 477bf64689..f63c5840bc 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameLibaoAdapter.kt @@ -50,7 +50,7 @@ class GameLibaoAdapter(val context: Context, val libaos: ArrayList, val available = libaoEntity.available if (total != 0) { holder.binding.libaoSchedulePb.progress = (((total - available) / total.toFloat()) * 100).toInt() - holder.binding.remainingTv.text = String.format(Locale.CHINA, "剩余%.2f", ((available) / total.toFloat()) * 100) + "%" + holder.binding.remainingTv.text = String.format(Locale.CHINA, "剩余%.1f", ((available) / total.toFloat()) * 100) + "%" } LibaoUtils.setLiBaoBtnStatusRound(holder.binding.receiveTv, libaoEntity.status, context) holder.itemView.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/answer/GameDetailAnswerAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/answer/GameDetailAnswerAdapter.kt index 0d3f85d9c1..aed7877c61 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/answer/GameDetailAnswerAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/answer/GameDetailAnswerAdapter.kt @@ -54,7 +54,7 @@ class GameDetailAnswerAdapter(context: Context, HaloApp.put(Constants.GAME_DETAIL_COME_IN, true) MtaHelper.onEvent("进入问答", "游戏详情", mViewModel.gameCommunity?.name + "+" + mViewModel.game?.name) if ("community_article" == entity.type) { - MtaHelper.onEvent("游戏详情_新", "点击文章", mViewModel.game?.name + "+" + entity.questions.title) + MtaHelper.onEvent("游戏详情_新", "点击社区文章", mViewModel.game?.name + "+" + entity.questions.title) mContext.startActivity(ArticleDetailActivity.getIntent(mContext, CommunityEntity(entity.articleCommunityId, ""), entity.id!!, mEntrance, path)) } else { MtaHelper.onEvent("游戏详情_新", "点击问题", mViewModel.game?.name + "+" + entity.questions.title) @@ -66,7 +66,7 @@ class GameDetailAnswerAdapter(context: Context, HaloApp.put(Constants.GAME_DETAIL_COME_IN, true) MtaHelper.onEvent("进入问答", "游戏详情", mViewModel.gameCommunity?.name + "+" + mViewModel.game?.name) if ("community_article" == entity.type) { - MtaHelper.onEvent("游戏详情_新", "点击文章", mViewModel.game?.name + "+" + entity.questions.title) + MtaHelper.onEvent("游戏详情_新", "点击社区文章", mViewModel.game?.name + "+" + entity.questions.title) mContext.startActivity(ArticleDetailActivity.getIntent(mContext, CommunityEntity(entity.articleCommunityId, ""), entity.id!!, mEntrance, path)) } else { MtaHelper.onEvent("游戏详情_新", "点击回答", mViewModel.game?.name + "+" + StringUtils.shrinkStringWithDot(entity.brief, 10)) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/history/HistoryApkListAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/history/HistoryApkListAdapter.kt index 758cd3539d..4d7bafe3ed 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/history/HistoryApkListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/history/HistoryApkListAdapter.kt @@ -42,7 +42,7 @@ class HistoryApkListAdapter(context: Context, private var mViewModel: HistoryApk view = mLayoutInflater.inflate(R.layout.item_history_apk, parent, false) HistoryApkViewHolder(ItemHistoryApkBinding.bind(view)) } - else -> throw NullPointerException() + else -> throw IllegalAccessException("No viewType is matched.") } } @@ -54,6 +54,7 @@ class HistoryApkListAdapter(context: Context, private var mViewModel: HistoryApk val maxDesLines = if (mExpandSparseBooleanArray.get(holder.adapterPosition)) Int.MAX_VALUE else 1 holder.binding.apk = apkEntity + holder.binding.versionTv.text = "版本${apkEntity.version}" holder.binding.updateDescTv.setExpandMaxLines(maxDesLines) holder.binding.updateDescTv.setIsExpanded(maxDesLines == Int.MAX_VALUE) holder.binding.releaseDateTv.text = TimeUtils.getFormatTime(apkEntity.updateTime, "yyyy.MM.dd") @@ -105,6 +106,8 @@ class HistoryApkListAdapter(context: Context, private var mViewModel: HistoryApk if (PackagesManager.isInstalledWithSpecificVersion(apkEntity.packageName, apkEntity.version ?: "")) { setText(R.string.launch) + } else { + setText(R.string.download) } } } @@ -169,7 +172,7 @@ class HistoryApkListAdapter(context: Context, private var mViewModel: HistoryApk private fun setDownloadBtnStatus(context: Context, gameEntity: GameEntity, downloadBtn: TextView) { val status = GameUtils.getSimpleDownloadBtnText(context, gameEntity) downloadBtn.text = status - if ("启动" == status) { + if ("下载中" == status) { downloadBtn.setBackgroundResource(R.drawable.detail_download_open_style) downloadBtn.setTextColor(ContextCompat.getColor(context, R.color.theme_font)) } else { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt index 22f4e30c92..c513fc2491 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingCommentItemViewHolder.kt @@ -48,7 +48,7 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR val p = Pattern.compile(LABEL_REGEX) val m = p.matcher(commentData.content) if (m.find()) { - val contents = TextHelper.getCommentLabelSpannableStringBuilder(commentData.content,R.color.theme_font) + val contents = TextHelper.getCommentLabelSpannableStringBuilder(commentData.content, R.color.theme_font) content.setTextWithHighlightedTextWrappedInsideWrapper(text = contents, copyClickedText = true) } else { content.setTextWithHighlightedTextWrappedInsideWrapper(text = commentData.content, copyClickedText = true) @@ -183,6 +183,7 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR commentData.content.replace(RatingEditActivity.LABEL_REPLACE_REGEX.toRegex(), "").copyTextAndToast() } "修改" -> { + if (path == "游戏详情:评分") MtaHelper.onEvent("游戏详情_新", "评论Tab_修改", game?.name) val intent = RatingEditActivity.getPatchIntent(context, game!!, commentData) SyncDataBetweenPageHelper.startActivityForResult(context, intent, RatingFragment.RATING_PATCH_REQUEST, dataPosition) } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 81f84a6063..4484f89509 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -1889,6 +1889,12 @@ public interface ApiService { @POST("videos/stream?page_size=20") Single> getVideoStream(@Query("type") String type, @Body RequestBody cacheVideoIds, @Query("video_id") String videoId, @Query("cache_id") String cacheId, @Query("page") int page); + /** + * 游戏详情视频流播放算法 + */ + @POST("videos/stream?page_size=20") + Single> getGameDetailVideoStream(@Query("type") String type, @Body RequestBody cacheVideoIds, @Query("video_id") String videoId, @Query("game_id") String gameId, @Query("page") int page); + /** * 获取最新排序的视频流(首页最新Tab) */ diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt index dca49107b8..1159cf2cc0 100644 --- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt @@ -69,7 +69,8 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel fun getVideoDetailList(videoId: String, location: String, isLoadNext: Boolean) { when (location) { Location.VIDEO_CHOICENESS.value, - Location.VIDEO_HOT.value -> { + Location.VIDEO_HOT.value, + Location.GAME_DETAIL.value -> { if (isLoadNext) { getVideoStream(location, videoId) } @@ -186,8 +187,13 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel if (cacheId.isEmpty()) { cacheId = "${Util_System_Phone_State.getImei(HaloApp.getInstance().application)}${System.currentTimeMillis()}${Random.nextInt(9999)}" } - RetrofitManager.getInstance(getApplication()) - .api.getVideoStream(type, body, videoId, cacheId, page) + if (type == Location.GAME_DETAIL.value) { + RetrofitManager.getInstance(getApplication()) + .api.getGameDetailVideoStream(type, body, videoId, gameId, page) + } else { + RetrofitManager.getInstance(getApplication()) + .api.getVideoStream(type, body, videoId, cacheId, page) + } }.subscribeOn(Schedulers.io()) .subscribe(object : BiResponse>() { override fun onSuccess(data: ArrayList) { @@ -443,6 +449,9 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel * v375新增 [https://gitlab.ghzs.com/halo/halo-api/wikis/v3.7.5/api-v3.7.5#get-videosstream] * newest 获取最新排序的视频流 * activity_video 获取活动的视频流 + * + * v400新增[https://gitlab.ghzs.com/halo/halo-api/-/wikis/v4.0.0/API-v4.0.0#post-videosstream] + * game_detail 游戏详情视频流播放算法,使用场景:游戏详情 */ enum class Location(val value: String) { HOTTEST_GAME_VIDEO("hottest_game_video"), @@ -463,7 +472,9 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel VIDEO_NEWEST("newest"), - VIDEO_ACTIVITY("activity_video") + VIDEO_ACTIVITY("activity_video"), + + GAME_DETAIL("game_detail") } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_history_apk_list.xml b/app/src/main/res/layout/fragment_history_apk_list.xml index 27a83679ee..10216aa2e7 100644 --- a/app/src/main/res/layout/fragment_history_apk_list.xml +++ b/app/src/main/res/layout/fragment_history_apk_list.xml @@ -11,8 +11,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/ECF6FF" - android:paddingTop="12dp" - android:paddingBottom="12dp" + android:paddingTop="9dp" + android:paddingBottom="9dp" android:visibility="gone"> diff --git a/app/src/main/res/layout/game_update_content.xml b/app/src/main/res/layout/game_update_content.xml index c04139133a..74e4635322 100644 --- a/app/src/main/res/layout/game_update_content.xml +++ b/app/src/main/res/layout/game_update_content.xml @@ -7,12 +7,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="20dp" - android:paddingTop="16dp" + android:paddingTop="12dp" android:paddingRight="20dp" android:paddingBottom="11dp" android:background="@color/white"> - - diff --git a/app/src/main/res/layout/item_history_apk.xml b/app/src/main/res/layout/item_history_apk.xml index 3759f4266e..209a1ca96d 100644 --- a/app/src/main/res/layout/item_history_apk.xml +++ b/app/src/main/res/layout/item_history_apk.xml @@ -37,7 +37,6 @@ android:id="@+id/versionTv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@{apk.version}" android:textColor="@color/text_999999" android:textSize="12sp" app:layout_constraintBottom_toBottomOf="@id/downloadBtn" @@ -61,7 +60,7 @@ android:id="@+id/updateDescTv" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="9dp" android:includeFontPadding="false" android:lineSpacingExtra="4dp" android:maxLines="1" diff --git a/app/src/main/res/layout/layout_video_detail_surface.xml b/app/src/main/res/layout/layout_video_detail_surface.xml index 06895f1512..eae8d0ea80 100644 --- a/app/src/main/res/layout/layout_video_detail_surface.xml +++ b/app/src/main/res/layout/layout_video_detail_surface.xml @@ -134,9 +134,9 @@ android:textSize="14sp" android:textStyle="bold" app:layout_constrainedWidth="true" - android:shadowColor="#B3000000" + android:shadowColor="#0D000000" android:shadowDx="0" - android:shadowDy="3" + android:shadowDy="0.5" android:shadowRadius="1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/sdv_user_badge" @@ -185,9 +185,9 @@ android:lineSpacingExtra="4dp" android:textColor="@color/white" android:textSize="14sp" - android:shadowColor="#B3000000" + android:shadowColor="#0D000000" android:shadowDx="0" - android:shadowDy="3" + android:shadowDy="0.5" android:shadowRadius="1" tools:text="举例:比如切换之前,当前视频已播放了 ,切换App或者回到手机桌面,在切换回光环助手,要从开始播放" /> diff --git a/app/src/main/res/layout/tab_item_gamedetail.xml b/app/src/main/res/layout/tab_item_gamedetail.xml new file mode 100644 index 0000000000..39081a444e --- /dev/null +++ b/app/src/main/res/layout/tab_item_gamedetail.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file