Merge branch 'fix/GHZS-2953' into 'dev'

fix: 消息中心优化测试:消息中心入口的未读与消息列表不一致 https://jira.shanqu.cc/browse/GHZS-3208

See merge request halo/android/assistant-android!1254
This commit is contained in:
叶子维
2023-08-11 16:17:55 +08:00
9 changed files with 43 additions and 23 deletions

View File

@ -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);
}

View File

@ -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()

View File

@ -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+"
}
}

View File

@ -793,9 +793,10 @@ public class MessageItemViewHolder extends BaseRecyclerViewHolder<MessageEntity>
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<MessageEntity>
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))

View File

@ -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()
}

View File

@ -53,7 +53,7 @@ class MessageListViewModel(application: Application, private val mType: String,
}
private fun getNormalMessageList(page: Int, observableEmitter: ObservableEmitter<MutableList<MessageItemData>>) {
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<List<MessageEntity>>() {

View File

@ -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 {

View File

@ -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()
}
}

View File

@ -7,13 +7,15 @@
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iconIv"
style="@style/frescoStyle"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:roundedCornerRadius="12dp" />
<LinearLayout
android:id="@+id/titleContainer"
@ -64,7 +66,7 @@
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:singleLine="true"
android:textColor="@color/hint"
android:textColor="@color/text_neutral"
android:textSize="@dimen/little_secondary_size"
app:layout_constraintBottom_toBottomOf="@+id/titleContainer"
app:layout_constraintEnd_toEndOf="parent"