diff --git a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java index 31d3397e88..9e62e98bf3 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java @@ -206,11 +206,14 @@ public class SearchToolbarFragment extends BaseLazyFragment implements View.OnCl mUnreadViewModel = ViewModelProviders.of(this, new MessageUnreadViewModel.Factory(HaloApp.getInstance().getApplication())).get(MessageUnreadViewModel.class); - mUnreadViewModel.getLiveData().observe(this, unreadEntity -> { + mUnreadViewModel.getMessageUnreadCountLiveData().observe(this, unreadEntity -> { if (unreadEntity != null) { - int count = unreadEntity.getTotal() - unreadEntity.getFans(); - mMessageUnread.setVisibility(count > 0 ? View.VISIBLE : View.GONE); - BindingAdapters.setMessageUnread(mMessageUnread, count); + mMessageUnread.setVisibility(unreadEntity.getMessage() == 0 ? View.GONE : View.VISIBLE); + if (unreadEntity.getMessage() == -1) { + mMessageUnread.setText(""); + } else { + BindingAdapters.setMessageUnread(mMessageUnread, unreadEntity.getMessage()); + } } else { mMessageUnread.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt b/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt index 6e68f1d908..44bc7425b3 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/HaloPersonalFragment.kt @@ -10,6 +10,7 @@ import android.view.View import androidx.appcompat.content.res.AppCompatResources import androidx.constraintlayout.widget.ConstraintSet import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager @@ -35,6 +36,7 @@ import com.gh.gamecenter.databinding.FragmentHaloPersonalBinding import com.gh.gamecenter.databinding.FragmentPersonalStubBinding import com.gh.gamecenter.entity.BadgeEntity import com.gh.gamecenter.feature.entity.Badge +import com.gh.gamecenter.feature.entity.MessageUnreadCount import com.gh.gamecenter.feature.entity.MessageUnreadEntity import com.gh.gamecenter.feature.eventbus.EBConcernChanged import com.gh.gamecenter.fragment.MainWrapperFragment @@ -419,12 +421,14 @@ class HaloPersonalFragment : BaseLazyFragment() { } } - mUnreadViewModel.liveData.observe(this) { messageUnread: MessageUnreadEntity? -> - if (messageUnread != null && messageUnread.total > 0) { - val count = messageUnread.total - messageUnread.fans - mStubBinding.loginMessageHint.visibility = - if (count > 0) View.VISIBLE else View.GONE - BindingAdapters.setMessageUnread(mStubBinding.loginMessageHint, count) + mUnreadViewModel.messageUnreadCountLiveData.observe(this) { messageUnread: MessageUnreadCount? -> + if (messageUnread != null) { + mStubBinding.loginMessageHint.goneIf(messageUnread.message == 0) + if (messageUnread.message == -1) { + mStubBinding.loginMessageHint.text = "" + } else { + BindingAdapters.setMessageUnread(mStubBinding.loginMessageHint, messageUnread.message) + } } else { mStubBinding.loginMessageHint.visibility = View.GONE EventBus.getDefault() diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/MessageWrapperActivity.kt b/module_message/src/main/java/com/gh/gamecenter/message/view/MessageWrapperActivity.kt index eca0842224..ba45f51add 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/MessageWrapperActivity.kt +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/MessageWrapperActivity.kt @@ -149,6 +149,8 @@ class MessageWrapperActivity : BaseActivity_TabLayout() { tabTitle?.typeface = if (isChecked) Typeface.DEFAULT_BOLD else Typeface.DEFAULT tabTitle?.setTextColor(if (isChecked) R.color.text_title.toColor(this) else R.color.text_subtitle.toColor(this)) + hintTv?.background = R.drawable.message_unread_hint.toDrawable(this) + ovalHint?.background = R.drawable.oval_message_hint_bg.toDrawable(this) if (tabTitle?.text == TAB_CONCERN) { ovalHint?.isVisible = mConcernUnread @@ -156,7 +158,7 @@ class MessageWrapperActivity : BaseActivity_TabLayout() { } else if (tabTitle?.text == TAB_MESSAGE) { ovalHint?.isVisible = mUnreadCount != null && mUnreadCount!!.message == -1 hintTv?.isVisible = mUnreadCount != null && mUnreadCount!!.message > 0 - hintTv?.text = mUnreadCount?.message.toString() + hintTv?.text = if ((mUnreadCount?.message ?: 0) < 100) mUnreadCount?.message.toString() else "99+" } } diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageItemViewHolder.java b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageItemViewHolder.java index 45834d055b..04b930cb21 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageItemViewHolder.java +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageItemViewHolder.java @@ -793,9 +793,10 @@ public class MessageItemViewHolder extends BaseRecyclerViewHolder community = new CommunityEntity(entity.getArticle().getCommunityId(), ""); ARouter.getInstance().build(RouteConsts.activity.articleDetailActivity) .withString(EntranceConsts.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) - .withString(EntranceConsts.KEY_COMMUNITY_ID, entity.getArticle().getId()) + .withString(EntranceConsts.KEY_COMMUNITY_ARTICLE_ID, entity.getArticle().getId()) .withString(EntranceConsts.KEY_TOP_COMMENT_ID, entity.getComment().getId()) .withParcelable(EntranceConsts.KEY_COMMUNITY_DATA, community) + .withBoolean(EntranceConsts.KEY_SCROLL_TO_COMMENT_AREA, true) .withString(EntranceConsts.KEY_PATH, path) .navigation(); break; @@ -889,7 +890,7 @@ public class MessageItemViewHolder extends BaseRecyclerViewHolder exposureSourceList.add(exposureSource); ARouter.getInstance().build(RouteConsts.activity.ratingReplyActivity) .withString(EntranceConsts.KEY_GAMEID, entity.getGame().getId()) - .withString(EntranceConsts.KEY_COMMENTID, entity.getGame().getId()) + .withString(EntranceConsts.KEY_COMMENTID, entity.getReply().getCommentId()) .withString(EntranceConsts.KEY_TOP_COMMENT_ID, entity.getReply().getId()) .withString(EntranceConsts.KEY_EXPOSURE_SOURCE, GsonUtils.toJson(exposureSourceList)) .withString(EntranceConsts.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListAdapter.kt b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListAdapter.kt index d259f808f1..14f7fa9dc0 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListAdapter.kt +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListAdapter.kt @@ -99,6 +99,8 @@ class MessageListAdapter( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { mEntityList.safelyGetInRelease(position)?.let { if (holder is MessageItemViewHolder && it.normalMessage != null) { + val entity = it.normalMessage + entity?.read = true holder.setMessageItem(it.normalMessage, mContext, mEntrance) } if (holder is KeFuViewHolder) { @@ -424,10 +426,8 @@ class MessageListAdapter( "问题" -> if (!TextUtils.isEmpty(data.id)) { ARouter.getInstance().build(RouteConsts.activity.questionDetailActivity) .withString(EntranceConsts.KEY_QUESTIONS_ID, data.id) - .withString( - EntranceConsts.KEY_ENTRANCE, - BaseActivity.mergeEntranceAndPath(mEntrance, "(消息-客服)") - ) + .withString(EntranceConsts.KEY_ENTRANCE, mEntrance) + .withString(EntranceConsts.KEY_PATH, "(消息-客服)") .navigation() } diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListViewModel.kt b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListViewModel.kt index cb67d96e56..090ce6919d 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListViewModel.kt +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/message/MessageListViewModel.kt @@ -53,7 +53,7 @@ class MessageListViewModel(application: Application, private val mType: String, } private fun getNormalMessageList(page: Int, observableEmitter: ObservableEmitter>) { - mApi.getMessage(UserManager.getInstance().userId, null, Utils.getTime(getApplication()), page) + mApi.getMessage(UserManager.getInstance().userId, "all", Utils.getTime(getApplication()), page) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Response>() { diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListAdapter.kt b/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListAdapter.kt index 7912a3905a..f1e4719d09 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListAdapter.kt +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListAdapter.kt @@ -2,6 +2,7 @@ package com.gh.gamecenter.message.view.message import android.content.Context import android.graphics.Typeface +import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintSet @@ -41,7 +42,7 @@ class SortedMessageListAdapter( } override fun areContentsTheSame(oldItem: SortedMessageEntity?, newItem: SortedMessageEntity?): Boolean { - return (oldItem?.id == newItem?.id) && (oldItem?.unreadCount == newItem?.unreadCount) + return (oldItem?.id == newItem?.id) && (oldItem?.unreadCount == newItem?.unreadCount) && (oldItem?.setting == newItem?.setting) } override fun getItemViewType(position: Int): Int { @@ -67,6 +68,9 @@ class SortedMessageListAdapter( divider.setBackgroundColor(R.color.divider.toColor(mContext)) titleTv.setTextColor(R.color.text_title.toColor(mContext)) contentTv.setTextColor(R.color.text_subtitleDesc.toColor(mContext)) + timeTv.setTextColor(R.color.text_neutral.toColor(mContext)) + hintTv.background = R.drawable.message_unread_hint.toDrawable(mContext) + ovalHint.background = R.drawable.oval_message_hint_bg.toDrawable(mContext) titleTv.text = entity.title if (mMessageTypeMap.getOrDefault(entity.type, null) != null && entity.icon.isEmpty()) { @@ -76,6 +80,8 @@ class SortedMessageListAdapter( } if (entity.type == TYPE_GAME && entity.game != null) { GameItemViewHolder.initGameSubtitleAndAdLabel(entity.game!!.toGameEntity(), gameSubtitleTv) + } else { + gameSubtitleTv.visibility = View.GONE } val commentUtils = ARouter.getInstance().build(RouteConsts.provider.commentUtils) @@ -83,7 +89,7 @@ class SortedMessageListAdapter( timeTv.text = commentUtils?.getCommentTime(entity.latestContent?.time ?: 0) contentTv.text = entity.latestContent?.text hintTv.isVisible = entity.setting.doNotDisturb == false && entity.unreadCount > 0 - hintTv.text = entity.unreadCount.toString() + hintTv.text = if (entity.unreadCount < 100) entity.unreadCount.toString() else "99+" hintTv.typeface = Typeface.createFromAsset(mContext.assets, "fonts/d_din_bold_only_number.ttf") ovalHint.isVisible = entity.setting.doNotDisturb == true && entity.unreadCount > 0 ConstraintSet().apply { diff --git a/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListViewModel.kt b/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListViewModel.kt index f65b745f5f..089fb2fbe2 100644 --- a/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListViewModel.kt +++ b/module_message/src/main/java/com/gh/gamecenter/message/view/message/SortedMessageListViewModel.kt @@ -121,9 +121,11 @@ class SortedMessageListViewModel(application: Application) : patchSortedMessageSetting(id, mapOf("do_not_disturb" to doNotDisturb).toRequestBody()) { mListLiveData.value?.let { val messageEntityList = ArrayList(it) - messageEntityList[position].setting.doNotDisturb = doNotDisturb + messageEntityList[position] = + messageEntityList[position].copy(setting = messageEntityList[position].setting.copy(doNotDisturb = doNotDisturb)) mListLiveData.postValue(messageEntityList) } + loadMessageUnreadData() } } diff --git a/module_message/src/main/res/layout/item_sorted_message.xml b/module_message/src/main/res/layout/item_sorted_message.xml index c036472ad1..a96a6af57f 100644 --- a/module_message/src/main/res/layout/item_sorted_message.xml +++ b/module_message/src/main/res/layout/item_sorted_message.xml @@ -7,13 +7,15 @@ + app:layout_constraintTop_toTopOf="parent" + app:roundedCornerRadius="12dp" />