diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index 609970f906..c181c952e7 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -1,142 +1,141 @@ -package com.gh.common.util; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.text.TextUtils; - -import com.gh.gamecenter.MainActivity; -import com.gh.gamecenter.NormalActivity; -import com.gh.gamecenter.SplashScreenActivity; -import com.gh.gamecenter.normal.NormalFragment; - -/** - * @author CsHeng - * @Date 2017/4/25 - * @Time 16:39 - */ - -public class EntranceUtils { - - public static final String KEY_TO = "to"; - public static final String KEY_NEWSID = "newsId"; - public static final String KEY_GAMEID = "gameId"; - public static final String KEY_ID = "id"; - public static final String KEY_URL = "url"; - public static final String KEY_GAMENAME = "gameName"; - public static final String HOST_ARTICLE = "article"; - public static final String HOST_COMMUNITY_ARTICLE = "community_article"; - public static final String HOST_GAME = "game"; - public static final String HOST_GAME_DOWNLOAD = "game_download"; - public static final String HOST_COLUMN = "column"; - public static final String HOST_WEB = "web"; - public static final String HOST_QQ = "qq"; - public static final String HOST_DOWNLOAD = "download"; - public static final String HOST_UPDATE = "update"; - public static final String HOST_LIBAO = "libao"; - public static final String HOST_COMMUNITY = "community"; - public static final String HOST_SUGGESTION = "suggestion"; - public static final String HOST_ANSWER = "answer"; - public static final String HOST_QUESTION = "question"; - public static final String KEY_DATA = "data"; - public static final String KEY_MESSAGE = "message"; - public static final String KEY_TYPE = "type"; - public static final String KEY_LINK = "link"; - public static final String KEY_NAME = "name"; - public static final String KEY_ENTRANCE = "entrance"; - public static final String KEY_TARGET = "target"; - public static final String ENTRANCE_BROWSER = "(浏览器)"; - public static final String ENTRANCE_WELCOME = "(启动弹窗)"; - public static final String ENTRANCE_UMENG = "(友盟推送)"; - public static final String ENTRANCE_MIPUSH = "(小米推送)"; - public static final String ENTRANCE_DOWNLOAD = "(下载跳转)"; - public static final String ENTRANCE_RECOMMEND = "(落地页)"; - public static final String ENTRANCE_BLOCK_RECOMMEND = "(推荐入口)"; - public static final String KEY_SUGGEST_HINT_TYPE = "suggestHintType"; - public static final String KEY_PACKAGENAME = "packageName"; - public static final String KEY_PLATFORM = "platform"; - public static final String KEY_GAME_NAME = "game_name"; - public static final String KEY_VERSION = "version"; - public static final String KEY_CONTENT = "content"; - public static final String KEY_PLUGIN = "plugin"; - public static final String KEY_CURRENTITEM = "currentItem"; - public static final String KEY_COMMENTID = "commentId"; - public static final String KEY_PATH = "path"; - public static final String KEY_OUTER_INFO = "outerInfo"; - public static final String KEY_OLDERUSER = "isOldUser"; - public static final String KEY_SEARCHKEY = "searchKey"; - public static final String KEY_HINT = "hint"; - public static final String KEY_GAME_ICON_URL = "gameIconUrl"; - public static final String KEY_SHARECONTENT = "shareContent"; - public static final String KEY_SUGGESTTYPE = "suggestType"; - public static final String KEY_PROLIST = "provinceList"; - public static final String KEY_ORDER = "order"; - public static final String KEY_TAGTYPE = "tagType"; - public static final String KEY_ANSWER_ID = "answerId"; - public static final String KEY_ANSWER_CONTENT = "answerContent"; - public static final String KEY_QUESTIONS_ID = "questionsId"; - public static final String KEY_QUESTIONS_TITLE = "questionsTitle"; - public static final String KEY_ANSWER_OPEN_IN_NEW_PAGE = "openInNewPage"; - public static final String KEY_QUESTIONS_PATCH = "questionsPatch"; - public static final String KEY_INVITE_SEARCH_KEY = "inviteSearchKey"; - public static final String KEY_MESSAGE_TYPE = "messageType"; - public static final String KEY_QUESTIONS_SEARCH_KEY = "questionsSearchKey"; - public static final String KEY_SHOW_ANSWER_COMMENT = "showAnswerComment"; - public static final String KEY_RECOMMENDS_CONTENTS = "isRecommendsContents"; - public static final String KEY_VERSION_UPDATE = "versionUpdate"; - public static final String KEY_CHECK_QUESTION_CONCERN = "check_question_concern"; - public static final String KEY_DRAFT_ID = "draft_id"; - public static final String KEY_KAIFU_LIST = "kaifuList"; - public static final String KEY_CATEGORY_ID = "category_id"; - public static final String KEY_CATEGORY_TITLE = "category_title"; - public static final String KEY_CATEGORY_INIT_TITLE = "category_init_title"; - public static final String KEY_BLOCK_DATA = "blockData"; - public static final String KEY_ASK_TAG = "askTag"; - public static final String KEY_ASK_COLUMN_TAG = "askColumnTag"; - public static final String KEY_COMMUNITY_ID = "community_id"; - public static final String KEY_COMMUNITY_NAME = "community_name"; - public static final String KEY_COMMUNITY_DATA = "communityData"; - public static final String KEY_TRACE_EVENT = "trace_event"; - public static final String KEY_SUBJECT_DATA = "subjectData"; - public static final String KEY_USER_ID = "user_id"; - public static final String KEY_QUESTION_TAG = "question_tag"; - public static final String KEY_COLUMN_ID = "column_id"; - public static final String KEY_AUTO_DOWNLOAD = "auto_download"; - public static final String KEY_HIDE_SUGGEST_HINT = "hide_suggest_hint"; - public static final String KEY_COMMUNITY_ARTICLE_ID = "communityArticleId"; - public static final String KEY_ARTICLE_COMMENT_ID = "articleCommentId"; - public static final String KEY_DEVICE_NAME = "deviceName"; - public static final String KEY_SHOW_ARTICLE_COMMENT = "showArticleComment"; - public static final String KEY_RATING_STAR_COUNT = "ratingStarCount"; - public static final String KEY_QUESTION_MODERATOR_PATCH = "questionModeratorPatch"; - public static final String KEY_SKIP_GAME_COMMENT = "skipGameComment"; - public static final String KEY_OPEN_PLATFORM_WINDOW = "openPlatformWindow"; - public static final String KEY_OPEN_KEYBOARD = "openKeyboard"; - - public static void jumpActivity(Context context, Bundle bundle) { - - //TODO 把其他类似的跳转启动逻辑也处理掉 - if (RunningUtils.isRunning(context) - && MainActivity.class.getName().equals(RunningUtils.getBaseActivity(context))) { - // 应用正在运行,前台或后台 - String to = bundle.getString(KEY_TO); - if (!TextUtils.isEmpty(to)) { - Class clazz = ClassUtils.forName(to); - if (clazz != null) { - if (NormalFragment.class.isAssignableFrom(clazz)) { // 兼容NormalFragment - NormalActivity.startFragmentNewTask(context, (Class) clazz, bundle); - } else { - Intent intent1 = new Intent(context, clazz); - intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent1.putExtras(bundle); - context.startActivity(intent1); - } - } - } - } else { - // 应用未在运行 - context.startActivity(SplashScreenActivity.getSplashScreenIntent(context, bundle)); - } - } - -} +package com.gh.common.util; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; + +import com.gh.gamecenter.MainActivity; +import com.gh.gamecenter.NormalActivity; +import com.gh.gamecenter.SplashScreenActivity; +import com.gh.gamecenter.normal.NormalFragment; + +/** + * @author CsHeng + * @Date 2017/4/25 + * @Time 16:39 + */ + +public class EntranceUtils { + + public static final String KEY_TO = "to"; + public static final String KEY_NEWSID = "newsId"; + public static final String KEY_GAMEID = "gameId"; + public static final String KEY_ID = "id"; + public static final String KEY_URL = "url"; + public static final String KEY_GAMENAME = "gameName"; + public static final String HOST_ARTICLE = "article"; + public static final String HOST_COMMUNITY_ARTICLE = "community_article"; + public static final String HOST_GAME = "game"; + public static final String HOST_GAME_DOWNLOAD = "game_download"; + public static final String HOST_COLUMN = "column"; + public static final String HOST_WEB = "web"; + public static final String HOST_QQ = "qq"; + public static final String HOST_DOWNLOAD = "download"; + public static final String HOST_UPDATE = "update"; + public static final String HOST_LIBAO = "libao"; + public static final String HOST_COMMUNITY = "community"; + public static final String HOST_SUGGESTION = "suggestion"; + public static final String HOST_ANSWER = "answer"; + public static final String HOST_QUESTION = "question"; + public static final String KEY_DATA = "data"; + public static final String KEY_MESSAGE = "message"; + public static final String KEY_TYPE = "type"; + public static final String KEY_LINK = "link"; + public static final String KEY_NAME = "name"; + public static final String KEY_ENTRANCE = "entrance"; + public static final String KEY_TARGET = "target"; + public static final String ENTRANCE_BROWSER = "(浏览器)"; + public static final String ENTRANCE_WELCOME = "(启动弹窗)"; + public static final String ENTRANCE_UMENG = "(友盟推送)"; + public static final String ENTRANCE_MIPUSH = "(小米推送)"; + public static final String ENTRANCE_DOWNLOAD = "(下载跳转)"; + public static final String ENTRANCE_RECOMMEND = "(落地页)"; + public static final String ENTRANCE_BLOCK_RECOMMEND = "(推荐入口)"; + public static final String KEY_SUGGEST_HINT_TYPE = "suggestHintType"; + public static final String KEY_PACKAGENAME = "packageName"; + public static final String KEY_PLATFORM = "platform"; + public static final String KEY_GAME_NAME = "game_name"; + public static final String KEY_VERSION = "version"; + public static final String KEY_CONTENT = "content"; + public static final String KEY_PLUGIN = "plugin"; + public static final String KEY_CURRENTITEM = "currentItem"; + public static final String KEY_COMMENTID = "commentId"; + public static final String KEY_PATH = "path"; + public static final String KEY_OUTER_INFO = "outerInfo"; + public static final String KEY_OLDERUSER = "isOldUser"; + public static final String KEY_SEARCHKEY = "searchKey"; + public static final String KEY_HINT = "hint"; + public static final String KEY_GAME_ICON_URL = "gameIconUrl"; + public static final String KEY_SHARECONTENT = "shareContent"; + public static final String KEY_SUGGESTTYPE = "suggestType"; + public static final String KEY_PROLIST = "provinceList"; + public static final String KEY_ORDER = "order"; + public static final String KEY_TAGTYPE = "tagType"; + public static final String KEY_ANSWER_ID = "answerId"; + public static final String KEY_ANSWER_CONTENT = "answerContent"; + public static final String KEY_QUESTIONS_ID = "questionsId"; + public static final String KEY_QUESTIONS_TITLE = "questionsTitle"; + public static final String KEY_ANSWER_OPEN_IN_NEW_PAGE = "openInNewPage"; + public static final String KEY_QUESTIONS_PATCH = "questionsPatch"; + public static final String KEY_INVITE_SEARCH_KEY = "inviteSearchKey"; + public static final String KEY_MESSAGE_TYPE = "messageType"; + public static final String KEY_QUESTIONS_SEARCH_KEY = "questionsSearchKey"; + public static final String KEY_SHOW_ANSWER_COMMENT = "showAnswerComment"; + public static final String KEY_RECOMMENDS_CONTENTS = "isRecommendsContents"; + public static final String KEY_VERSION_UPDATE = "versionUpdate"; + public static final String KEY_CHECK_QUESTION_CONCERN = "check_question_concern"; + public static final String KEY_DRAFT_ID = "draft_id"; + public static final String KEY_KAIFU_LIST = "kaifuList"; + public static final String KEY_CATEGORY_ID = "category_id"; + public static final String KEY_CATEGORY_TITLE = "category_title"; + public static final String KEY_CATEGORY_INIT_TITLE = "category_init_title"; + public static final String KEY_BLOCK_DATA = "blockData"; + public static final String KEY_ASK_TAG = "askTag"; + public static final String KEY_ASK_COLUMN_TAG = "askColumnTag"; + public static final String KEY_COMMUNITY_ID = "community_id"; + public static final String KEY_COMMUNITY_NAME = "community_name"; + public static final String KEY_COMMUNITY_DATA = "communityData"; + public static final String KEY_TRACE_EVENT = "trace_event"; + public static final String KEY_SUBJECT_DATA = "subjectData"; + public static final String KEY_USER_ID = "user_id"; + public static final String KEY_QUESTION_TAG = "question_tag"; + public static final String KEY_COLUMN_ID = "column_id"; + public static final String KEY_AUTO_DOWNLOAD = "auto_download"; + public static final String KEY_HIDE_SUGGEST_HINT = "hide_suggest_hint"; + public static final String KEY_COMMUNITY_ARTICLE_ID = "communityArticleId"; + public static final String KEY_ARTICLE_COMMENT_ID = "articleCommentId"; + public static final String KEY_SHOW_ARTICLE_COMMENT = "showArticleComment"; + public static final String KEY_RATING_STAR_COUNT = "ratingStarCount"; + public static final String KEY_QUESTION_MODERATOR_PATCH = "questionModeratorPatch"; + public static final String KEY_SKIP_GAME_COMMENT = "skipGameComment"; + public static final String KEY_OPEN_PLATFORM_WINDOW = "openPlatformWindow"; + public static final String KEY_OPEN_KEYBOARD = "openKeyboard"; + + public static void jumpActivity(Context context, Bundle bundle) { + + //TODO 把其他类似的跳转启动逻辑也处理掉 + if (RunningUtils.isRunning(context) + && MainActivity.class.getName().equals(RunningUtils.getBaseActivity(context))) { + // 应用正在运行,前台或后台 + String to = bundle.getString(KEY_TO); + if (!TextUtils.isEmpty(to)) { + Class clazz = ClassUtils.forName(to); + if (clazz != null) { + if (NormalFragment.class.isAssignableFrom(clazz)) { // 兼容NormalFragment + NormalActivity.startFragmentNewTask(context, (Class) clazz, bundle); + } else { + Intent intent1 = new Intent(context, clazz); + intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent1.putExtras(bundle); + context.startActivity(intent1); + } + } + } + } else { + // 应用未在运行 + context.startActivity(SplashScreenActivity.getSplashScreenIntent(context, bundle)); + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/entity/RatingComment.kt b/app/src/main/java/com/gh/gamecenter/entity/RatingComment.kt index 673c0d88a5..db84ecb539 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/RatingComment.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/RatingComment.kt @@ -8,25 +8,36 @@ import kotlinx.android.parcel.Parcelize @Parcelize class RatingComment(@SerializedName("_id") val id: String = "", - val content: String = "", + @Synchronize + var content: String = "", val order: Int = 0, @Synchronize val me: MeEntity = MeEntity(), + @Synchronize private var device: String = "", - val time: Long = 0, + @Synchronize + var time: Long = 0, @Synchronize var vote: Int = 0, - val star: Int = 0, + @Synchronize + var star: Int = 0, @Synchronize var reply: Int = 0, val user: UserEntity = UserEntity(), var isServiceComment: Boolean = false, @SerializedName("attached") - var replyData: Reply? = null) : Parcelable { + var replyData: Reply? = null, + @Synchronize + @SerializedName("is_edit_content") + var isEditContent: Boolean? = null) : Parcelable { fun getDevice(): String { return device.trim() } + fun setDevice(device: String) { + this.device = device + } + @Parcelize class Reply(val user: UserEntity = UserEntity(), val content: String = "") : Parcelable 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 d91678ef5c..81bf0d693f 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 @@ -1,14 +1,12 @@ package com.gh.gamecenter.gamedetail.desc import android.content.Context -import androidx.databinding.DataBindingUtil -import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView import android.text.TextUtils import android.view.View import android.view.ViewGroup +import androidx.databinding.DataBindingUtil +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.gh.common.util.* import com.gh.common.view.HorizontalItemDecoration import com.gh.gamecenter.GameDetailActivity @@ -32,7 +30,7 @@ class DescAdapter(context: Context, private val mFragment: androidx.fragment.app.Fragment, private val mEntrance: String, private val mViewModel: DescViewModel) - : BaseRecyclerAdapter(context) { + : BaseRecyclerAdapter(context) { companion object { const val INFO = 1 @@ -51,7 +49,7 @@ class DescAdapter(context: Context, var firstGamePosition = 0 var gameList = arrayListOf() - private var mDescItemList = arrayListOf() + var descItemList = arrayListOf() private var isFuliNoData: Boolean = false @@ -68,9 +66,9 @@ class DescAdapter(context: Context, } fun updateDescItemList(descItemList: ArrayList) { - mDescItemList = descItemList + this.descItemList = descItemList gameList.clear() - for ((index, descItem) in mDescItemList.withIndex()) { + for ((index, descItem) in this.descItemList.withIndex()) { if (descItem.recommendedGame != null) { gameList.add(descItem.recommendedGame!!) if (firstGamePosition == 0) { @@ -81,7 +79,7 @@ class DescAdapter(context: Context, notifyDataSetChanged() } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): androidx.recyclerview.widget.RecyclerView.ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { INFO -> { val view = mLayoutInflater.inflate(R.layout.gamedetail_item_plugin, parent, false) @@ -128,16 +126,16 @@ class DescAdapter(context: Context, } } - override fun onBindViewHolder(holder: androidx.recyclerview.widget.RecyclerView.ViewHolder, position: Int) { + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { - is GameDetailBasicViewHolder -> initBasicInfoViewHolder(holder, mDescItemList[position]) - is GameDetailPluginViewHolder -> initPluginViewHolder(holder, mDescItemList[position]) - is GameDetailIntroViewHolder -> initIntroViewHolder(holder, mDescItemList[position]) - is GameDetailGameTagViewHolder -> initGameTagViewHolder(holder, mDescItemList[position]) + is GameDetailBasicViewHolder -> initBasicInfoViewHolder(holder, descItemList[position]) + is GameDetailPluginViewHolder -> initPluginViewHolder(holder, descItemList[position]) + is GameDetailIntroViewHolder -> initIntroViewHolder(holder, descItemList[position]) + is GameDetailGameTagViewHolder -> initGameTagViewHolder(holder, descItemList[position]) is GameItemViewHolder -> initGameNormalViewHolder(holder.binding, position) - is GameDetailUpdateContentViewHolder -> bindUpdateHolder(holder, mDescItemList[position].update) - is GameDetailRecommendImageViewHolder -> bindImageViewHolder(holder, mDescItemList[position].recommendedImage) - is GameDetailCommentsViewHolder -> bindCommentsViewHolder(holder, mDescItemList[position].comments) + is GameDetailUpdateContentViewHolder -> bindUpdateHolder(holder, descItemList[position].update) + is GameDetailRecommendImageViewHolder -> bindImageViewHolder(holder, descItemList[position].recommendedImage) + is GameDetailCommentsViewHolder -> bindCommentsViewHolder(holder, descItemList[position].comments) is FooterViewHolder -> { holder.loading.visibility = View.GONE holder.hint.text = " ← 查看游戏动态" @@ -154,7 +152,7 @@ class DescAdapter(context: Context, if (position == itemCount - 1 && !isFuliNoData) { return FOOTER } else { - val descItemData = mDescItemList[position] + val descItemData = descItemList[position] return if (descItemData.plugin != null) { PLUGIN } else if (descItemData.intro != null) { @@ -181,16 +179,16 @@ class DescAdapter(context: Context, override fun getItemCount(): Int { return if (isFuliNoData) { - mDescItemList.size + descItemList.size } else { - mDescItemList.size + 1 + descItemList.size + 1 } } private fun bindCommentsViewHolder(viewHolder: GameDetailCommentsViewHolder, comments: ArrayList?) { val commentsAdapter = DescCommentsAdapter(mContext, mViewModel, mEntrance) viewHolder.binding.recyclerview.adapter = commentsAdapter - viewHolder.binding.recyclerview.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(mContext) + viewHolder.binding.recyclerview.layoutManager = LinearLayoutManager(mContext) viewHolder.binding.tvAll.setOnClickListener { EventBus.getDefault().post(EBReuse(GameDetailFragment.SKIP_RATING)) MtaHelper.onEvent("游戏详情_新", "玩家评论_点击全部", gameName) @@ -285,7 +283,7 @@ class DescAdapter(context: Context, val tips = descItemData.plugin?.tips val tag = descItemData.plugin?.tagList - val linearLayoutManager = androidx.recyclerview.widget.LinearLayoutManager(mContext) + val linearLayoutManager = LinearLayoutManager(mContext) val layoutManager = androidx.recyclerview.widget.GridLayoutManager(mContext, 3) layoutManager.spanSizeLookup = object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() { override fun getSpanSize(position: Int): Int { @@ -324,7 +322,7 @@ class DescAdapter(context: Context, viewHolder.introGallery.isNestedScrollingEnabled = false if (viewHolder.introGallery.adapter == null) { viewHolder.introGallery.setHasFixedSize(true) - viewHolder.introGallery.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(mContext, androidx.recyclerview.widget.LinearLayoutManager.HORIZONTAL, false) + viewHolder.introGallery.layoutManager = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false) viewHolder.introGallery.adapter = GameGalleryAdapter(mContext, mFragment, descItemData.intro!!.video, @@ -380,7 +378,7 @@ class DescAdapter(context: Context, private fun initGameTagViewHolder(holder: GameDetailGameTagViewHolder, descItemData: DescItemData) { if (holder.gametagRv.adapter == null) { holder.gametagRv.setHasFixedSize(true) - holder.gametagRv.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(mContext, androidx.recyclerview.widget.LinearLayoutManager.HORIZONTAL, false) + holder.gametagRv.layoutManager = LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false) holder.gametagRv.addItemDecoration(HorizontalItemDecoration(mContext, 8, descItemData.gameTag!!.size)) holder.gametagRv.adapter = GameDetailGameTagAdapter(mContext, descItemData.gameTag) } @@ -388,10 +386,10 @@ class DescAdapter(context: Context, private fun initGameNormalViewHolder(binding: GameItemBinding, position: Int) { - val gameEntity = mDescItemList[position].recommendedGame!! + val gameEntity = descItemList[position].recommendedGame!! binding.game = gameEntity - binding.root.setOnClickListener { _ -> + binding.root.setOnClickListener { DataCollectionUtils.uploadClick(mContext, "大家都在玩", "游戏详情", gameEntity.name) DataUtils.onMtaEvent(mContext, "游戏详情_新", "大家都在玩", gameName + "->" + gameEntity.name) @@ -413,9 +411,9 @@ class DescAdapter(context: Context, class GameDetailBasicViewHolder(view: View) : GameDetailPluginViewHolder(view) - class GameDetailUpdateContentViewHolder(var binding: GamedetailItemUpdateContentBinding) : androidx.recyclerview.widget.RecyclerView.ViewHolder(binding.root) + class GameDetailUpdateContentViewHolder(var binding: GamedetailItemUpdateContentBinding) : RecyclerView.ViewHolder(binding.root) - class GameDetailRecommendImageViewHolder(var binding: GamedetailItemImageBinding) : androidx.recyclerview.widget.RecyclerView.ViewHolder(binding.root) + class GameDetailRecommendImageViewHolder(var binding: GamedetailItemImageBinding) : RecyclerView.ViewHolder(binding.root) - class GameDetailCommentsViewHolder(var binding: GamedetailItemCommentsBinding) : androidx.recyclerview.widget.RecyclerView.ViewHolder(binding.root) + class GameDetailCommentsViewHolder(var binding: GamedetailItemCommentsBinding) : RecyclerView.ViewHolder(binding.root) } \ No newline at end of file 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 e3aaddd403..5ea283a9a3 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 @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.gh.common.constant.ItemViewType import com.gh.common.util.MtaHelper +import com.gh.common.util.SyncDataBetweenPageHelper import com.gh.common.util.ifLogin import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListAdapter @@ -39,10 +40,12 @@ class DescCommentsAdapter(context: Context, override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (holder is RatingCommentItemViewHolder) { val commentData = comments[position] - holder.setContent(commentData, mViewModel.gameId, mEntrance, path) + // handle edit sync 理论上此列表不会存在自身评分,所以不用处理 + holder.setContent(commentData, mViewModel.game, position, mEntrance, path) holder.binding.run { commentItem.setOnClickListener { - mContext.startActivity(RatingReplyActivity.getIntent(mContext, mViewModel.game!!, commentData, mEntrance, path)) + val intent = RatingReplyActivity.getIntent(mContext, mViewModel.game!!, commentData, mEntrance, path) + SyncDataBetweenPageHelper.startActivityForResult(mContext, intent, RATING_REPLY_REQUEST, position) MtaHelper.onEvent("游戏详情_新", "玩家评论_点击评论", mViewModel.game?.name) } content.setExpandCallback { @@ -67,4 +70,8 @@ class DescCommentsAdapter(context: Context, } } } + + companion object { + const val RATING_REPLY_REQUEST = 233 + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt index aaaa19c3ce..1fc1c616a2 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt @@ -1,5 +1,7 @@ package com.gh.gamecenter.gamedetail.desc +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.View import androidx.lifecycle.Observer @@ -13,10 +15,13 @@ import cn.jzvd.JzvdMgr import com.gh.base.fragment.BaseFragment import com.gh.common.util.DownloadItemUtils import com.gh.common.util.NetworkUtils +import com.gh.common.util.OnSyncCallBack +import com.gh.common.util.SyncDataBetweenPageHelper import com.gh.download.DownloadManager import com.gh.gamecenter.R import com.gh.gamecenter.entity.GameDetailEntity import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.RatingComment import com.gh.gamecenter.eventbus.EBDownloadStatus import com.gh.gamecenter.eventbus.EBNetworkState import com.gh.gamecenter.eventbus.EBPackage @@ -57,6 +62,30 @@ class DescFragment : BaseFragment() { } } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (DescCommentsAdapter.RATING_REPLY_REQUEST == requestCode && resultCode == Activity.RESULT_OK) { + var commentPosition = 0 + SyncDataBetweenPageHelper.resultHandle(data, object : OnSyncCallBack { + override fun onData(dataPosition: Int): RatingComment? { + val descItemList = mAdapter.descItemList + for (i in 0 until descItemList.size) { + val comments = descItemList[i].comments + if (comments != null) { + commentPosition = i + return comments[dataPosition] + } + } + return null + } + + override fun onNotify(dataPosition: Int) { + mAdapter.notifyItemChanged(commentPosition) + } + }) + } + } + override fun onCreate(savedInstanceState: Bundle?) { val arguments = arguments mGameEntity = arguments!!.getParcelable(GameEntity.TAG) 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 1aacc23126..9d0604e090 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,11 +2,11 @@ package com.gh.gamecenter.gamedetail.desc import android.annotation.SuppressLint import android.app.Application +import android.text.TextUtils import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import android.text.TextUtils import com.gh.common.repository.RemenkapaiRepository import com.gh.common.util.ApkActiveUtils import com.gh.common.util.ErrorHelper diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt index 8a0d8ab162..3e4d51da7a 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt @@ -138,7 +138,7 @@ class RatingAdapter(context: Context, } private fun initRatingComment(holder: RatingCommentItemViewHolder, commentData: RatingComment, dataPosition: Int) { - holder.setContent(commentData, mListViewModel.game.id, mEntrance, path) + holder.setContent(commentData, mListViewModel.game, dataPosition, mEntrance, path) holder.binding.run { commentItem.setOnClickListener { skipRatingReply(false, commentData, dataPosition) @@ -179,7 +179,7 @@ class RatingAdapter(context: Context, val installPackageName = mListViewModel.canUserCommentThisGame() if (!installPackageName.isNullOrEmpty()) { if (mContext is Activity) { - val intent = RatingEditActivity.getIntent(mContext, mListViewModel.game, ratingData?.device, starCount, installPackageName!!) + val intent = RatingEditActivity.getIntent(mContext, mListViewModel.game, starCount, installPackageName) (mContext as Activity).startActivityForResult(intent, RatingFragment.RATING_EDIT_REQUEST) } } 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 4095e443d0..9a82892b89 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 @@ -14,15 +14,27 @@ import com.gh.common.view.DrawableView import com.gh.gamecenter.PersonalHomeActivity import com.gh.gamecenter.R import com.gh.gamecenter.databinding.RatingCommentItemBinding +import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.entity.RatingComment +import com.gh.gamecenter.gamedetail.rating.edit.RatingEditActivity import com.gh.gamecenter.manager.UserManager class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseRecyclerViewHolder(binding.root) { - fun setContent(commentData: RatingComment, gameId: String?, entrance: String, path: String) { + fun setContent(commentData: RatingComment, game: GameEntity?, dataPosition: Int, entrance: String, path: String) { binding.run { val context = itemView.context data = commentData + if (commentData.isEditContent == null) { + time.text = NewsUtils.getFormattedTime(commentData.time) + time.setTextColor(context.resources.getColor(R.color.hint)) + } else if (commentData.isEditContent!!) { + time.text = (NewsUtils.getFormattedTime(commentData.time) + "已修改 >") + time.setTextColor(context.resources.getColor(R.color.tag_orange)) + } else { + time.text = (NewsUtils.getFormattedTime(commentData.time) + "已修改") + time.setTextColor(context.resources.getColor(R.color.tag_orange)) + } if (commentData.replyData != null) { replyContent.text = context.getString( @@ -58,12 +70,13 @@ class RatingCommentItemViewHolder(val binding: RatingCommentItemBinding) : BaseR when (text) { "复制" -> commentData.content.copyTextAndToast() "修改" -> { - + val intent = RatingEditActivity.getPatchIntent(context, game!!, commentData) + SyncDataBetweenPageHelper.startActivityForResult(context, intent, RatingFragment.RATING_PATCH_REQUEST, dataPosition) } "投诉" -> { context.ifLogin(BaseActivity.mergeEntranceAndPath(entrance, path)) { OptionDialogHelper.showOptionDialog(context, Constants.REPORT_LIST.toList(), callback = { reportType -> - SimpleRequestHelper.reportGameComment(gameId!!, commentData.id, reportType) + SimpleRequestHelper.reportGameComment(game!!.id, commentData.id, reportType) }) } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt index 779b3b7499..9b12004913 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt @@ -33,7 +33,9 @@ class RatingFragment : ListFragment() { super.onActivityResult(requestCode, resultCode, data) if (requestCode == RATING_EDIT_REQUEST && resultCode == Activity.RESULT_OK) { mListViewModel.initData() - } else if (requestCode == RATING_REPLAY_REQUEST && resultCode == Activity.RESULT_OK) { + } else if ( + (requestCode == RATING_REPLAY_REQUEST || requestCode == RATING_PATCH_REQUEST) + && resultCode == Activity.RESULT_OK) { mAdapter?.handleSyncData(data) } } @@ -157,5 +159,6 @@ class RatingFragment : ListFragment() { const val RATING_EDIT_REQUEST = 222 const val RATING_REPLAY_REQUEST = 223 + const val RATING_PATCH_REQUEST = 224 } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyActivity.kt index 87feab9b7e..ec56c79a9e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyActivity.kt @@ -1,5 +1,6 @@ package com.gh.gamecenter.gamedetail.rating +import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle @@ -62,6 +63,13 @@ class RatingReplyActivity : ListActivity { val commentData = mEntityList[position].comment!! - holder.setContent(commentData, viewModel.game?.id, entrance, path) + holder.setContent(commentData, viewModel.game, position, entrance, path) holder.binding.run { line.visibility = View.GONE content.setExpendMaxLines(Int.MAX_VALUE) @@ -322,6 +324,18 @@ class RatingReplyAdapter(context: Context, } } + fun handleSyncData(intent: Intent?) { + SyncDataBetweenPageHelper.resultHandle(intent, object : OnSyncCallBack { + override fun onData(dataPosition: Int): RatingComment? { + return mEntityList[dataPosition].comment + } + + override fun onNotify(dataPosition: Int) { + notifyItemChanged(dataPosition) + } + }) + } + class RatingReplyHeadItemViewHolder(val binding: RatingReplyHeadItemBinding) : BaseRecyclerViewHolder(binding.root) class RatingReplyItemViewHolder(val binding: RatingReplyItemBinding) : BaseRecyclerViewHolder(binding.root) } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index cdc0c0402c..b8a1bf8b72 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -1,5 +1,6 @@ package com.gh.gamecenter.gamedetail.rating.edit +import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.Intent @@ -12,8 +13,11 @@ import com.gh.common.util.* import com.gh.gamecenter.R import com.gh.gamecenter.databinding.ActivityRatingEditBinding import com.gh.gamecenter.entity.GameEntity -import com.gh.gamecenter.retrofit.Response +import com.gh.gamecenter.entity.RatingComment +import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.RetrofitManager +import com.halo.assistant.HaloApp +import com.lightgame.utils.Utils import com.qq.gdt.action.ActionType import com.walkud.rom.checker.RomIdentifier import io.reactivex.android.schedulers.AndroidSchedulers @@ -26,12 +30,15 @@ import retrofit2.HttpException class RatingEditActivity : BaseActivity() { + private val mApi = RetrofitManager.getInstance(HaloApp.getInstance().application).api private var mPostDialog: WaitingDialogFragment? = null + private var mInstallPackageName: String? = null private lateinit var mBinding: ActivityRatingEditBinding private lateinit var mGame: GameEntity - private lateinit var mInstallPackageName: String + + private var mComment: RatingComment? = null override fun getLayoutId(): Int { return R.layout.activity_rating_edit @@ -42,12 +49,20 @@ class RatingEditActivity : BaseActivity() { setNavigationTitle("评论") setToolbarMenu(R.menu.menu_game_comment) mGame = intent.getParcelableExtra(GameEntity.TAG) + mComment = intent.getParcelableExtra(RatingComment::class.java.simpleName) mInstallPackageName = intent.getStringExtra(EntranceUtils.KEY_PACKAGENAME) mBinding = ActivityRatingEditBinding.bind(mContentView) - mBinding.ratingScore.rating = intent.getFloatExtra(EntranceUtils.KEY_RATING_STAR_COUNT, 1.0F) - mBinding.deviceName.text = intent.getStringExtra(EntranceUtils.KEY_DEVICE_NAME) mBinding.content.hint = "你觉得《${mGame.name}》怎么样..." mBinding.content.filters = arrayOf(TextHelper.getFilter(RATING_CONTENT_LIMIT, "最多" + RATING_CONTENT_LIMIT + "个字")) + + if (mComment == null) { + mBinding.ratingScore.rating = intent.getFloatExtra(EntranceUtils.KEY_RATING_STAR_COUNT, 1.0F) + } else { + mBinding.ratingScore.rating = mComment!!.star.toFloat() + mBinding.content.setText(mComment!!.content) + } + + getDeviceName() } override fun onMenuItemClick(item: MenuItem?): Boolean { @@ -57,6 +72,7 @@ class RatingEditActivity : BaseActivity() { return super.onMenuItemClick(item) } + @SuppressLint("CheckResult") private fun postGameComment() { val rating = mBinding.ratingScore.rating if (rating == 0F) { @@ -82,34 +98,67 @@ class RatingEditActivity : BaseActivity() { jsonObject.put("rom", RomIdentifier.getRom().name + " " + RomIdentifier.getRom().versionName) val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString()) - RetrofitManager.getInstance(this).api.postGameComment(mGame.id, body) + val observable = if (mComment != null) { + mApi.patchGameRating(mGame.id, mComment!!.id, body) + } else { + mApi.postGameComment(mGame.id, body) + } + observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Response() { - override fun onResponse(response: ResponseBody?) { + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { mPostDialog?.dismiss() setResult(Activity.RESULT_OK) toast("提交成功") - finish() - GdtHelper.logAction(ActionType.RATE, GdtHelper.GAME_ID, mGame.id, GdtHelper.PLATFORM, rating.toString()) + + if (mComment != null) { // patch + if (mComment!!.content != content) { + mComment!!.content = content + mComment!!.isEditContent = true + } else { + mComment!!.isEditContent = false + } + + mComment!!.time = System.currentTimeMillis() / 1000 + mComment!!.star = rating.toInt() + if (!mBinding.deviceBox.isChecked) { + mComment!!.setDevice("") + } else { + mComment!!.setDevice(mBinding.deviceName.text.toString()) + } + if (!SyncDataBetweenPageHelper.setResultAndFinish(this@RatingEditActivity, mComment)) { + Utils.log("RatingEditActivity没有触发页面数据同步") + finish() + } + } else { + finish() + } } - override fun onFailure(e: HttpException?) { + override fun onFailure(exception: Exception) { mPostDialog?.dismiss() var errorString: String? = null try { - errorString = e?.response()?.errorBody()?.string() + if (exception is HttpException) { + errorString = exception.response()?.errorBody()?.string() + } } catch (e1: Exception) { e1.printStackTrace() } ErrorHelper.handleError(this@RatingEditActivity, errorString) } + }) } + private fun getDeviceName() { + mBinding.deviceName.text = "设备名称"// todo 网络获取 + } + override fun handleBackPressed(): Boolean { val content = mBinding.content.text.toString() if (!TextUtils.isEmpty(content)) { @@ -125,13 +174,19 @@ class RatingEditActivity : BaseActivity() { companion object { const val RATING_CONTENT_LIMIT = 5000 - fun getIntent(context: Context, game: GameEntity, deviceName: String?, starCount: Float, installPackageName: String): Intent { + fun getIntent(context: Context, game: GameEntity, starCount: Float, installPackageName: String): Intent { val intent = Intent(context, RatingEditActivity::class.java) intent.putExtra(GameEntity.TAG, game) - intent.putExtra(EntranceUtils.KEY_DEVICE_NAME, deviceName) intent.putExtra(EntranceUtils.KEY_RATING_STAR_COUNT, starCount) intent.putExtra(EntranceUtils.KEY_PACKAGENAME, installPackageName) return intent } + + fun getPatchIntent(context: Context, game: GameEntity, comment: RatingComment): Intent { + val intent = Intent(context, RatingEditActivity::class.java) + intent.putExtra(GameEntity.TAG, game) + intent.putExtra(RatingComment::class.java.simpleName, comment) + return intent + } } } \ No newline at end of file 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 675c230721..5ae8760de2 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 @@ -1434,7 +1434,7 @@ public interface ApiService { * 添加游戏评论 */ @POST("games/{game_id}/comments") - Observable postGameComment(@Path("game_id") String gameId, @Body RequestBody body); + Single postGameComment(@Path("game_id") String gameId, @Body RequestBody body); /** * 赞同游戏评论 @@ -1753,4 +1753,10 @@ public interface ApiService { @GET("users/{user_id}/games/comments") Single> getMyRating(@Path("user_id") String userId, @Query("page") int page); + /** + * 游戏评分-修改 + */ + @PUT("games/{game_id}/comments/{comment_id}") + Single patchGameRating(@Path("game_id") String gameId, @Path("comment_id") String commentId, @Body RequestBody body); + } \ No newline at end of file diff --git a/app/src/main/res/layout/rating_comment_item.xml b/app/src/main/res/layout/rating_comment_item.xml index 32522d9118..27aba7524b 100644 --- a/app/src/main/res/layout/rating_comment_item.xml +++ b/app/src/main/res/layout/rating_comment_item.xml @@ -127,7 +127,6 @@ android:layout_height = "wrap_content" android:layout_marginLeft = "8dp" android:gravity = "center" - android:text = "@{NewsUtils.getFormattedTime(data.time)}" android:textColor = "@color/hint" android:textSize = "12sp" app:layout_constraintBottom_toBottomOf = "@+id/rating_start"