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:
@ -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);
|
||||
}
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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+"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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>>() {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
Reference in New Issue
Block a user