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 e6973ec76e..9e750262bc 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -30,7 +30,7 @@ public class Constants { public static final String SP_LAST_OPENING_TIME = "last_opening_dialog_time"; public static final String SP_SHOWED_NOTIFICATION_HINT = "show_notification_hint"; - //标记安装的游戏为已玩过弹窗,最多取消1次 + //标记安装的游戏为已玩过弹窗,最多取消2次 public static final String SP_MARK_INSTALLED_GAME = "mark_installed_game"; //手机号码匹配规则 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 6f6406abc7..7bf0827e59 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 @@ -69,13 +69,13 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR } if (commentData.user.badge != null) { - binding.sdvUserBadge.visibility = View.VISIBLE - binding.tvBadgeName.visibility = View.VISIBLE - ImageUtils.display(binding.sdvUserBadge, commentData.user.badge.icon) - binding.tvBadgeName.text = commentData.user.badge.name + sdvUserBadge.visibility = View.VISIBLE + tvBadgeName.visibility = View.VISIBLE + ImageUtils.display(sdvUserBadge, commentData.user.badge.icon) + tvBadgeName.text = commentData.user.badge.name } else { - binding.sdvUserBadge.visibility = View.GONE - binding.tvBadgeName.visibility = View.GONE + sdvUserBadge.visibility = View.GONE + tvBadgeName.visibility = View.GONE } if (commentData.replyData != null) { @@ -111,7 +111,7 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR override fun onNewResultImpl(bitmap: Bitmap?) { val bitmapDrawable = BitmapDrawable(context.resources, bitmap) bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F)) - contentSpan.setSpan(CenterImageSpan(bitmapDrawable), commentData.replyData?.user?.name!!.length, commentData.replyData?.user?.name!!.length + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + contentSpan.setSpan(CenterImageSpan(bitmapDrawable), commentData.replyData?.user?.name!!.length + 1, commentData.replyData?.user?.name!!.length + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) contentSpan.setSpan(object : ClickableSpan() { override fun updateDrawState(ds: TextPaint) { super.updateDrawState(ds) @@ -119,15 +119,18 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR } override fun onClick(widget: View) { - when (path) { - "游戏详情:介绍" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏详情-玩家评论", "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})") - "游戏详情:评分" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏详情-评论列表", "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})") - "评论详情" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})") + val key = when (path) { + "游戏详情:介绍" -> "游戏详情-玩家评论" + "游戏详情:评分" -> "游戏详情-评论列表" + "评论详情" -> "游戏评论详情" + else -> "" } + MtaHelper.onEvent("进入徽章墙_用户记录", key, "${commentData.replyData?.user?.name}(${commentData.replyData?.user?.id})") DirectUtils.directToBadgeWall(context, commentData.replyData!!.user.id, commentData.replyData!!.user.name, commentData.replyData!!.user.icon) } - }, commentData.replyData?.user?.name!!.length, commentData.replyData?.user?.name!!.length + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + }, commentData.replyData?.user?.name!!.length + 1, commentData.replyData?.user?.name!!.length + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + userName.movementMethod = LinkMovementMethod.getInstance() replyContent.text = contentSpan } }, CallerThreadExecutor.getInstance()) @@ -165,15 +168,17 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR DirectUtils.directToHomeActivity(context, commentData.user.id, entrance, path) } - binding.sdvUserBadge.setOnClickListener { - when (path) { - "游戏详情:介绍" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏详情-玩家评论", "${commentData.user.name}(${commentData.user.id})") - "游戏详情:评分" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏详情-评论列表", "${commentData.user.name}(${commentData.user.id})") - "评论详情" -> MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${commentData.user.name}(${commentData.user.id})") + sdvUserBadge.setOnClickListener { + val key = when (path) { + "游戏详情:介绍" -> "游戏详情-玩家评论" + "游戏详情:评分" -> "游戏详情-评论列表" + "评论详情" -> "游戏评论详情" + else -> "" } + MtaHelper.onEvent("进入徽章墙_用户记录", key, "${commentData.user.name}(${commentData.user.id})") DirectUtils.directToBadgeWall(context, commentData.user.id, commentData.user.name, commentData.user.icon) } - binding.tvBadgeName.performClick() + tvBadgeName.setOnClickListener { sdvUserBadge.performClick() } more.setOnClickListener { showMorePopWindow(it, commentData.user.id == UserManager.getInstance().userId) { text -> diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt index c26094a343..f3abe371f7 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt @@ -8,12 +8,12 @@ import android.graphics.drawable.BitmapDrawable import android.net.Uri import android.text.Spanned import android.text.TextPaint +import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView -import anet.channel.util.Utils.context import com.facebook.common.executors.CallerThreadExecutor import com.facebook.common.references.CloseableReference import com.facebook.datasource.DataSource @@ -247,15 +247,15 @@ class RatingReplyAdapter(context: Context, val parent = replyEntity.parent if (parent != null) { var replyName = "${replyEntity.user.name} 回复 ${parent.user.name}" - var replyNameSpannable = SpanBuilder(replyName).color(mContext, replyEntity.user.name!!.length + 4, replyEntity.user.name!!.length + 6, R.color.text_9a9a9a).build() - if (replyEntity.user.badge != null) { + var replyNameSpannable = SpanBuilder(replyName).color(mContext, parent.user.name!!.length + 5, parent.user.name!!.length + 7, R.color.text_9a9a9a).build() + if (parent.user.badge != null) { val imagePipeline = Fresco.getImagePipeline() val imageRequest = ImageRequestBuilder - .newBuilderWithSource(Uri.parse(replyEntity.user.badge.icon)) + .newBuilderWithSource(Uri.parse(parent.user.badge.icon)) .setProgressiveRenderingEnabled(true) .build() - val dataSource = imagePipeline.fetchDecodedImage(imageRequest, context) + val dataSource = imagePipeline.fetchDecodedImage(imageRequest, mContext) dataSource.subscribe(object : BaseBitmapDataSubscriber() { override fun onFailureImpl(dataSource: DataSource>?) { @@ -264,7 +264,7 @@ class RatingReplyAdapter(context: Context, override fun onNewResultImpl(bitmap: Bitmap?) { val bitmapDrawable = BitmapDrawable(mContext.resources, bitmap) bitmapDrawable.setBounds(0, 0, DensityUtil.dip2px(16F), DensityUtil.dip2px(16F)) - replyNameSpannable.setSpan(CenterImageSpan(bitmapDrawable), replyEntity.user.name!!.length + 1, replyEntity.user.name!!.length + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + replyNameSpannable.setSpan(CenterImageSpan(bitmapDrawable), parent.user.name!!.length + 4, parent.user.name!!.length + 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) replyNameSpannable.setSpan(object : ClickableSpan() { override fun updateDrawState(ds: TextPaint) { super.updateDrawState(ds) @@ -273,16 +273,17 @@ class RatingReplyAdapter(context: Context, override fun onClick(widget: View) { MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${replyEntity.user.name}(${replyEntity.user.id})") - DirectUtils.directToBadgeWall(context, replyEntity.user.id, replyEntity.user.name, replyEntity.user.icon) + DirectUtils.directToBadgeWall(mContext, replyEntity.user.id, replyEntity.user.name, replyEntity.user.icon) } - }, replyEntity.user.name!!.length + 1, replyEntity.user.name!!.length + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + }, parent.user.name!!.length + 4, parent.user.name!!.length + 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + userName.movementMethod=LinkMovementMethod.getInstance() userName.text = replyNameSpannable } }, CallerThreadExecutor.getInstance()) } else { replyName = "${replyEntity.user.name} 回复 ${parent.user.name}" - replyNameSpannable = SpanBuilder(replyName).color(mContext, replyEntity.user.name!!.length + 1, replyEntity.user.name!!.length + 3, R.color.text_9a9a9a).build() + replyNameSpannable = SpanBuilder(replyName).color(mContext, parent.user.name!!.length + 1, parent.user.name!!.length + 3, R.color.text_9a9a9a).build() userName.text = replyName } } else { @@ -297,6 +298,12 @@ class RatingReplyAdapter(context: Context, tvBadgeName.visibility = View.GONE } } + sdvUserBadge.setOnClickListener { + MtaHelper.onEvent("进入徽章墙_用户记录", "游戏评论详情", "${replyEntity.user.name}(${replyEntity.user.id})") + DirectUtils.directToBadgeWall(mContext, replyEntity.user.id, replyEntity.user.name, replyEntity.user.icon) + } + tvBadgeName.setOnClickListener { sdvUserBadge.performClick() } + vote.setOnClickListener { mContext.ifLogin("游戏详情-评分-评论详情-点赞评论") { if (!vote.isChecked) { diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java index eb895fcc3c..b52078286e 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java @@ -29,6 +29,7 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.baselist.ListAdapter; import com.gh.gamecenter.entity.MessageKeFuEntity; import com.gh.gamecenter.entity.MessageLinkEntity; +import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity; import com.gh.gamecenter.subject.SubjectActivity; import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel; @@ -121,7 +122,8 @@ public class KeFuFragmentAdapter extends ListAdapter { if (TextUtils.isEmpty(link.getQq()) && TextUtils.isEmpty(link.getId()) && TextUtils.isEmpty(link.getUrl()) && - !"7moor".equals(link.getType())) continue; + !"7moor".equals(link.getType()) && + !"个人主页".equals(link.getType())) continue; TextView textView = new TextView(mContext); textView.setTextColor(mContext.getResources().getColor(R.color.theme)); textView.setTextSize(12F); @@ -286,9 +288,7 @@ public class KeFuFragmentAdapter extends ListAdapter { } break; case "个人主页": - if (!TextUtils.isEmpty(data.getId())) { - DirectUtils.directToHomeActivity(mContext, data.getId(), mEntrance, "(消息-客服)"); - } + DirectUtils.directToHomeActivity(mContext, UserManager.getInstance().getUserId(), mEntrance, "(消息-客服)"); break; default: DialogUtils.showLowVersionDialog(mContext); diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt index 11cfaa1352..78f5c75467 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt @@ -10,6 +10,8 @@ import com.gh.common.dialog.TrackableDialog import com.gh.common.util.GsonUtils import com.gh.common.util.MtaHelper import com.gh.common.util.SPUtils +import com.gh.common.util.dip2px +import com.gh.common.view.SpacingItemDecoration import com.gh.gamecenter.R import com.gh.gamecenter.entity.GameInstall import com.gh.gamecenter.manager.UserManager @@ -24,12 +26,15 @@ import okhttp3.ResponseBody class InstalledGameDialog(val mContext: Context, val games: ArrayList, private val mEvent: String, private val mKey: String) : TrackableDialog(mContext, R.style.DialogWindowTransparent, mEvent, mKey) { + var onConfirmClickListener: (() -> Unit)? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val view = View.inflate(mContext, R.layout.dialog_installed_game, null) setContentView(view) view.dialog_installed_game_rv.apply { layoutManager = GridLayoutManager(context, 4) + addItemDecoration(SpacingItemDecoration(bottom = 24F.dip2px())) adapter = InstalledGameAdapter(mContext, games) } view.dialog_cancel.setOnClickListener { @@ -55,6 +60,7 @@ class InstalledGameDialog(val mContext: Context, val games: ArrayList() { override fun onSuccess(data: ResponseBody) { + onConfirmClickListener?.invoke() dismiss() } }) diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt index 59ab0075ad..120f10058f 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt @@ -1,12 +1,12 @@ package com.gh.gamecenter.personalhome -import android.app.Dialog import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.LinearLayout import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil +import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.adapter.FragmentAdapter @@ -48,7 +48,7 @@ class UserHomeFragment : NormalFragment() { private lateinit var mUserHomeViewModel: UserHomeViewModel private lateinit var mUserViewModel: UserViewModel private lateinit var mMessageUnreadViewModel: MessageUnreadViewModel - private lateinit var mDialog: Dialog + private lateinit var mDialog: InstalledGameDialog override fun getInflatedLayout(): View { mHomeBinding = DataBindingUtil.inflate(requireActivity().layoutInflater, R.layout.fragment_home, null, false) @@ -127,16 +127,20 @@ class UserHomeFragment : NormalFragment() { toast("网络异常") } - mUserHomeViewModel.playedGames.observeNonNull(this) { - showPlayedGames(it) + mUserHomeViewModel.playedGames.observe(this, Observer { + if (!it.isNullOrEmpty()) { + showPlayedGames(it) + } val installedList = PackagesManager.getInstalledList() val count = SPUtils.getInt(Constants.SP_MARK_INSTALLED_GAME, 0) if (count < 2 && it.isEmpty() && installedList.isNotEmpty()) { mDialog = InstalledGameDialog(requireContext(), installedList, "个人主页详情", "个人主页详情") mDialog.show() + mDialog.onConfirmClickListener = { + mUserHomeViewModel.getUserPlayedGame() + } } - - } + }) mMessageUnreadViewModel.liveData.observeNonNull(this) { updateUnreadInfo(it) diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt index 6b1df3c70a..28bc166b12 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt @@ -71,6 +71,8 @@ class UserHomeViewModel(application: Application, val userId: String) : AndroidV if (data.isNotEmpty()) { playedGames.postValue(data.take(10)) + }else{ + playedGames.postValue(null) } } }) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d274cfa91c..8b36ff5e69 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -652,5 +652,5 @@ 还不错 完美,太棒了 - 将以下游戏标记为玩过的游戏 + 将已安装游戏标记为玩过的游戏