Merge branch 'dev' of gitlab.ghzhushou.com:halo/assistant-android into dev
This commit is contained in:
@ -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,
|
||||
|
||||
@ -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<View>(R.id.tab_title)
|
||||
if (tabTitle is CheckedTextView) {
|
||||
tabTitle.setText(title)
|
||||
}
|
||||
return view
|
||||
}
|
||||
|
||||
private fun pauseVideo() {
|
||||
if (mViewModel.displayTopVideo) {
|
||||
mTopVideoView.onVideoPause()
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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<DetailEntity>) {
|
||||
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 <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
|
||||
@ -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?) {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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<GameDetailEntity.Video>? = null,
|
||||
private val mGallery: ArrayList<String>? = null,
|
||||
private val mGameName: String,
|
||||
val mGame: GameEntity,
|
||||
private val mEntrance: String) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
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, "游戏详情")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ class GameLibaoAdapter(val context: Context, val libaos: ArrayList<LibaoEntity>,
|
||||
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 {
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -1889,6 +1889,12 @@ public interface ApiService {
|
||||
@POST("videos/stream?page_size=20")
|
||||
Single<ArrayList<VideoEntity>> 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<ArrayList<VideoEntity>> getGameDetailVideoStream(@Query("type") String type, @Body RequestBody cacheVideoIds, @Query("video_id") String videoId, @Query("game_id") String gameId, @Query("page") int page);
|
||||
|
||||
/**
|
||||
* 获取最新排序的视频流(首页最新Tab)
|
||||
*/
|
||||
|
||||
@ -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<ArrayList<VideoEntity>>() {
|
||||
override fun onSuccess(data: ArrayList<VideoEntity>) {
|
||||
@ -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")
|
||||
}
|
||||
|
||||
}
|
||||
@ -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">
|
||||
|
||||
<TextView
|
||||
@ -21,6 +21,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:includeFontPadding="false"
|
||||
android:text="@string/history_apk_hint"
|
||||
android:textColor="@color/text_1383EB"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -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">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/titleTv"
|
||||
android:layout_width="wrap_content"
|
||||
@ -24,12 +23,11 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<com.gh.common.view.ExpandTextView
|
||||
android:id="@+id/contentTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="13dp"
|
||||
android:layout_marginTop="7dp"
|
||||
android:textSize="13sp"
|
||||
android:textColor="@color/text_333333"
|
||||
android:maxLines="4"
|
||||
@ -49,8 +47,10 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/contentTv"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:textColor="@color/theme_font"
|
||||
android:layout_marginTop="14dp"
|
||||
android:layout_marginTop="6dp"
|
||||
android:textSize="13sp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:text="历史版本 >"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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或者回到手机桌面,在切换回光环助手,要从开始播放" />
|
||||
|
||||
|
||||
17
app/src/main/res/layout/tab_item_gamedetail.xml
Normal file
17
app/src/main/res/layout/tab_item_gamedetail.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="37dp"
|
||||
android:gravity="center">
|
||||
|
||||
<CheckedTextView
|
||||
android:id="@+id/tab_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:textColor="@color/text_tabbar_style"
|
||||
android:textSize="14dp"
|
||||
tools:text="详情" />
|
||||
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user