From dbd6eccb2eedcc4d198436a4d7b9068478919c2d Mon Sep 17 00:00:00 2001
From: wlh <646507849@qq.com>
Date: Thu, 14 Dec 2023 16:52:42 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=BB=BA365-=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle | 6 ++
app/src/main/AndroidManifest.xml | 8 +++
.../com/zj365/dc/activity/MainActivity.kt | 9 +--
.../zj365/dc/activity/MessageDetailNewAct.kt | 22 +++++++
.../zj365/dc/adapter/HomeMessageAdapter.kt | 46 ++++++++++++--
.../com/zj365/dc/fragment/MessageFragment.kt | 36 ++++++++++-
.../java/com/zj365/dc/fragment/MineFrag.kt | 10 +--
.../main/java/com/zj365/dc/vm/MessageVm.kt | 16 +++++
app/src/main/res/layout/frag_message.xml | 5 +-
app/src/main/res/layout/item_home_message.xml | 57 ++++++++++++++----
.../res/mipmap-xxhdpi/icon_msg_assistant.png | Bin 0 -> 8994 bytes
.../res/mipmap-xxhdpi/icon_msg_welfare.png | Bin 0 -> 8477 bytes
.../java/com/xty/common/arouter/ARouterUrl.kt | 1 +
.../com/xty/common/event/MessageReadEvent.kt | 4 ++
.../java/com/zj365/mime/act/MessageAct.kt | 8 +--
.../com/zj365/mime/act/MessageDetailAct.kt | 2 +-
.../com/zj365/mime/act/MessageTypeListAct.kt | 49 ++++++++-------
.../com/zj365/mime/adapter/MessageAdapter.kt | 3 +-
.../main/java/com/zj365/mime/vm/MessageVm.kt | 15 ++---
.../main/res/mipmap-xhdpi/ic_round_choice.png | Bin 884 -> 714 bytes
.../main/java/com/xty/network/ApiInterface.kt | 20 +++++-
.../xty/network/model/MessageTypeDataBean.kt | 34 +++++++++++
.../com/xty/network/model/SystemMsgBean.kt | 4 +-
23 files changed, 286 insertions(+), 69 deletions(-)
create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_msg_assistant.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_msg_welfare.png
create mode 100644 common/src/main/java/com/xty/common/event/MessageReadEvent.kt
create mode 100644 network/src/main/java/com/xty/network/model/MessageTypeDataBean.kt
diff --git a/app/build.gradle b/app/build.gradle
index 95e54ef..661e259 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -32,9 +32,15 @@ android {
//暂时填写默认值即可.
JPUSH_CHANNEL : "developer-default",
+ OPPO_APPKEY : "OP-", // OPPO平台注册的appkey
+ OPPO_APPID : "OP-", // OPPO平台注册的appid
+ OPPO_APPSECRET: "OP-",//OPPO平台注册的appsecret
+
XIAOMI_APPKEY : "MI-5992028541716",// 小米平台注册的appkey
XIAOMI_APPID : "MI-2882303761520285716", // 小米平台注册的appid
+ VIVO_APPKEY:"",
+ VIVO_APPID:"",
HONOR_APPID:"109849297"
]
// 配置 APK 输出路径
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2f42e35..2e1925b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -165,6 +165,14 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
+
+
+
+
(), Consumer {
}
private fun initUnreadCountReceiver() {
- /* unreadCountReceiver = object : BroadcastReceiver() {
+ unreadCountReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val unreadCount = intent.getLongExtra(TUIConstants.UNREAD_COUNT_EXTRA, 0)
// if (unreadCount > 0) {
@@ -91,7 +92,7 @@ class MainActivity : BaseVmAct(), Consumer {
val unreadCountFilter = IntentFilter()
unreadCountFilter.addAction(TUIConstants.CONVERSATION_UNREAD_COUNT_ACTION)
LocalBroadcastManager.getInstance(this)
- .registerReceiver(unreadCountReceiver as BroadcastReceiver, unreadCountFilter)*/
+ .registerReceiver(unreadCountReceiver as BroadcastReceiver, unreadCountFilter)
}
private val listFragment by lazy {
@@ -128,7 +129,7 @@ class MainActivity : BaseVmAct(), Consumer {
Log.e("yansu", "请求 ${MMkvHelper.getString(Const.USER_ID)}")
mViewModel.getImUserSig("user_" + MMkvHelper.getLong(Const.USER_ID))
}*/
-// initUnreadCountReceiver()
+ initUnreadCountReceiver()
JPushInterface.setBadgeNumber(this, 0)
// //前台空服务
// val service = RouteManager.getAny(ARouterUrl.NONE_SERVICE) as Service
@@ -374,7 +375,7 @@ class MainActivity : BaseVmAct(), Consumer {
private fun addNv() {
val menuView = binding.mBottom.getChildAt(0) as BottomNavigationMenuView
//这里就是获取所添加的每一个Tab(或者叫menu),
- val tab = menuView.getChildAt(3) as BottomNavigationItemView
+ val tab = menuView.getChildAt(2) as BottomNavigationItemView
//加载我们的角标View,新创建的一个布局
badegView = LayoutInflater.from(this).inflate(R.layout.item_msg_count, tab, true)
diff --git a/app/src/main/java/com/zj365/dc/activity/MessageDetailNewAct.kt b/app/src/main/java/com/zj365/dc/activity/MessageDetailNewAct.kt
index 503ddb5..6b82632 100644
--- a/app/src/main/java/com/zj365/dc/activity/MessageDetailNewAct.kt
+++ b/app/src/main/java/com/zj365/dc/activity/MessageDetailNewAct.kt
@@ -4,13 +4,18 @@ import android.view.View
import com.alibaba.android.arouter.facade.annotation.Route
import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
+import com.xty.common.Dateutils
import com.xty.common.arouter.ARouterUrl
+import com.xty.network.model.MessageBean
+import com.xty.network.model.MessageTypeDataBean
import com.zj365.dc.databinding.ActMessageDetailNewBinding
@Route(path = ARouterUrl.MESSAGE_DETAIL_NEW)
class MessageDetailNewAct: BaseVmAct() {
val binding by lazy { ActMessageDetailNewBinding.inflate(layoutInflater) }
+ var msgBean : MessageTypeDataBean.MessageTypeBean? = null
+
override fun liveObserver() {
}
@@ -25,4 +30,21 @@ class MessageDetailNewAct: BaseVmAct() {
finish()
}
}
+
+ override fun initData() {
+ super.initData()
+ intent.extras?.let {
+ if(it.containsKey("bean")){
+ msgBean=it.getSerializable("bean") as MessageTypeDataBean.MessageTypeBean
+ msgBean?.let {
+ binding.tvMsgTitle.text = it.notifyTitle
+ binding.tvMsgTime.text = Dateutils.formatTime(it.notifyCreateTime,Dateutils.YYYY_MM_DD_HH_MM)
+ binding.tvMsgContent.text = it.notifyContent
+ }
+
+
+ }
+ }
+
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/zj365/dc/adapter/HomeMessageAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/HomeMessageAdapter.kt
index b762f01..7bea6f7 100644
--- a/app/src/main/java/com/zj365/dc/adapter/HomeMessageAdapter.kt
+++ b/app/src/main/java/com/zj365/dc/adapter/HomeMessageAdapter.kt
@@ -1,17 +1,55 @@
package com.zj365.dc.adapter
+import android.text.TextUtils
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.cardview.widget.CardView
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.xty.base.adapter.BaseAdapter
import com.xty.common.Dateutils
-import com.xty.network.model.ScienceBean
import com.xty.network.model.SystemMsgBean
import com.zj365.dc.R
class HomeMessageAdapter : BaseAdapter(R.layout.item_home_message) {
override fun convert(holder: BaseViewHolder, item: SystemMsgBean) {
- holder.setText(R.id.tv_msg_title,item.title)
- holder.setText(R.id.tv_msg_content,item.content)
- holder.setText(R.id.tv_msg_time,Dateutils.formatTime(item.time,Dateutils.YYYY_MM_DD_HH_MM))
+ if (item.type == 1){
+ holder.getView(R.id.img_msg).setImageDrawable(context.resources.getDrawable(R.mipmap.icon_msg_system))
+ }else if (item.type == 2){
+ holder.getView(R.id.img_msg).setImageDrawable(context.resources.getDrawable(R.mipmap.icon_msg_assistant))
+ }else{
+ holder.getView(R.id.img_msg).setImageDrawable(context.resources.getDrawable(R.mipmap.icon_msg_welfare))
+ }
+ holder.setText(R.id.tv_msg_title,item.name)
+ holder.setText(R.id.tv_msg_content,item.msg)
+ if(!TextUtils.isEmpty(item.time)){
+ holder.setText(R.id.tv_msg_time,Dateutils.formatTime(item.time.toLong(),Dateutils.YYYY_MM_DD_HH_MM))
+ }
+
+ var num = holder.getView(R.id.mBadge)
+ var card = holder.getView(R.id.mCard)
+ if(item.unReadCount > 0){
+ card.visibility = View.VISIBLE
+ num.text = if (item.unReadCount > 99) "99+" else "${item.unReadCount}"
+
+ num.post{
+ var layoutParams = num.layoutParams as ViewGroup.LayoutParams
+ var numTxt = num.text.toString()
+ card.radius = num.height / 2f
+ var textWidth = num.paint.measureText(numTxt)
+ if (num.height >= textWidth) { //等宽高的圆形
+ layoutParams.width = num.height
+
+ } else { //宽高不等 将宽度两边加10
+ layoutParams.width = textWidth.toInt() + 20
+ }
+ num.layoutParams = layoutParams
+ }
+
+ }else{
+ card.visibility = View.GONE
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt b/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt
index 6e5c7f3..17fc404 100644
--- a/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt
+++ b/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt
@@ -1,14 +1,18 @@
package com.zj365.dc.fragment
+import android.content.Intent
import android.graphics.Color
import android.view.View
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.recyclerview.widget.LinearLayoutManager
-import com.alibaba.android.arouter.facade.annotation.Route
+import com.tencent.qcloud.tuicore.TUIConstants
import com.xty.base.fragment.BaseFragList
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.event.LoginOrRegisterEvent
import com.xty.common.event.LoginOutEvent
+import com.xty.common.event.MessageReadEvent
+import com.xty.network.model.SystemMsgBean
import com.zj365.dc.adapter.HomeMessageAdapter
import com.zj365.dc.databinding.FragMessageBinding
import com.zj365.dc.vm.MessageVm
@@ -20,14 +24,24 @@ class MessageFragment : BaseFragList() {
val binding by lazy { FragMessageBinding.inflate(layoutInflater) }
val adapter by lazy { HomeMessageAdapter() }
+
+ var msgList = ArrayList()
override fun initAdapter() {
binding.mRecycle.layoutManager= LinearLayoutManager(requireContext())
binding.mRecycle.adapter=adapter
adapter.setOnItemClickListener { adapter, view, position ->
- RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL_NEW)
+ var bean = adapter.getItem(position) as SystemMsgBean
+ bundle.clear()
+ bundle.putInt("msgType",bean.type)
+ RouteManager.goAct(ARouterUrl.MESSAGE_TYPE,bundle)
}
}
+ override fun initData() {
+ super.initData()
+
+ }
+
override fun initView() {
super.initView()
statusBar(binding.title.mView)
@@ -37,7 +51,7 @@ class MessageFragment : BaseFragList() {
binding.title.mTvRight.visibility = View.VISIBLE
binding.title.mIvBack.visibility = View.INVISIBLE
binding.title.mTvRight.setOnClickListener {
-
+ mViewModel.setAllRead()
}
initAdapter()
setRecycleRefresh(binding.mRecycle,binding.mRefresh)
@@ -50,6 +64,17 @@ class MessageFragment : BaseFragList() {
override fun setViewModel()= MessageVm()
override fun observer() {
+ mViewModel.msgData.observe(this){
+ adapter.setNewInstance(it.data.list)
+ val intent = Intent()
+ intent.action = TUIConstants.CONVERSATION_UNREAD_COUNT_ACTION
+ intent.putExtra(TUIConstants.UNREAD_COUNT_EXTRA, it.data.unReadCount)
+ LocalBroadcastManager.getInstance(requireContext())
+ .sendBroadcast(intent)
+ }
+ mViewModel.msgAllRead.observe(this){
+ refresh()
+ }
}
@@ -65,4 +90,9 @@ class MessageFragment : BaseFragList() {
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun readMsg(event:MessageReadEvent){
+ refresh()
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt b/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt
index 9a65b7f..9adc28e 100644
--- a/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt
+++ b/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt
@@ -188,14 +188,14 @@ class MineFrag : BaseVmFrag(),EasyPermissions.PermissionCallbacks {
override fun onResume() {
super.onResume()
- if (!checkNetworkAvailable(requireContext())) {
+ /* if (!checkNetworkAvailable(requireContext())) {
binding.mNoNetwork.root.visibility = View.VISIBLE
} else {
- if (binding.mNoNetwork.root.visibility == View.VISIBLE) {
+ if (binding.mNoNetwork.root.visibility == View.VISIBLE) {*/
mViewModel.getMySetting()
- }
+// }
mViewModel.getScore(1)
- }
+// }
}
override fun observer() {
@@ -265,7 +265,7 @@ class MineFrag : BaseVmFrag(),EasyPermissions.PermissionCallbacks {
if (null == it.data) return@observe
it.data.let { settingBean ->
Const.mainLiveData.value = settingBean
- binding.mNoNetwork.root.visibility = View.GONE
+// binding.mNoNetwork.root.visibility = View.GONE
}
}
diff --git a/app/src/main/java/com/zj365/dc/vm/MessageVm.kt b/app/src/main/java/com/zj365/dc/vm/MessageVm.kt
index 04b8cf1..168469f 100644
--- a/app/src/main/java/com/zj365/dc/vm/MessageVm.kt
+++ b/app/src/main/java/com/zj365/dc/vm/MessageVm.kt
@@ -1,10 +1,26 @@
package com.zj365.dc.vm
+import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
+import com.xty.network.model.RespBody
+import com.xty.network.model.SystemMsgDataResp
class MessageVm(): BaseVm() {
+ val msgData by lazy { MutableLiveData> ()}
+
+ val msgAllRead by lazy { MutableLiveData>() }
fun getSystemMsg(){
+ startHttp {
+ var response = apiInterface().getSystemMsg()
+ response.getCodeStatus(msgData, nowData)
+ }
+ }
+ fun setAllRead(){
+ startHttp(true) {
+ var response = apiInterface().setMessageReadAll()
+ response.getCodeStatus(msgAllRead, nowData)
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/frag_message.xml b/app/src/main/res/layout/frag_message.xml
index be11b72..0274418 100644
--- a/app/src/main/res/layout/frag_message.xml
+++ b/app/src/main/res/layout/frag_message.xml
@@ -4,7 +4,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/white"
+ android:background="@color/col_6F7"
tools:ignore="MissingDefaultResource">
+ android:background="@color/white"
+ />
-
+ app:layout_constraintLeft_toLeftOf="parent">
+
+
+
+
+
+
+
+
+
+
+ tools:text="17已经预约成功17已经预约成功17已经预约成功17已经预约成功17已经预约成功17已经预约成功"/>
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
IM6N<$f|e&$`~Uy|
literal 0
HcmV?d00001
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_msg_welfare.png b/app/src/main/res/mipmap-xxhdpi/icon_msg_welfare.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc6596dcc05d94095addf487643d7c63e3507291
GIT binary patch
literal 8477
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 {
} else {
bundle.clear()
bundle.putSerializable("bean", data)
- RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL, bundle)
+ RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL_NEW, bundle)
}
}
}
@@ -110,10 +110,10 @@ class MessageAct : BaseListAct() {
adapter.notifyItemChanged(clickPosition)
bundle.clear()
bundle.putSerializable("bean", clickBean)
- RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL, bundle)
+ RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL_NEW, bundle)
}
mViewModel.messageLive.observe(this) {
- when (nowPosition) {
+ /* when (nowPosition) {
3 -> {
val list = mutableListOf()
list.add(it.data.message)
@@ -130,7 +130,7 @@ class MessageAct : BaseListAct() {
else -> {
setDate(adapter, it.data.systemMessage as MutableList)
}
- }
+ }*/
}
mViewModel.deleteLive.observe(this) {
mViewModel.getMessageList(page, 0)
diff --git a/mine/src/main/java/com/zj365/mime/act/MessageDetailAct.kt b/mine/src/main/java/com/zj365/mime/act/MessageDetailAct.kt
index b81e8bf..b980dc6 100644
--- a/mine/src/main/java/com/zj365/mime/act/MessageDetailAct.kt
+++ b/mine/src/main/java/com/zj365/mime/act/MessageDetailAct.kt
@@ -31,7 +31,7 @@ class MessageDetailAct: IBaseAct() {
}
binding.mMsg.text=content
- onEventObject(baseContext, UmengEventId.WarningMsg, "查看预警消息详情$content")
+ // onEventObject(baseContext, UmengEventId.WarningMsg, "查看预警消息详情$content")
}
override fun initView() {
diff --git a/mine/src/main/java/com/zj365/mime/act/MessageTypeListAct.kt b/mine/src/main/java/com/zj365/mime/act/MessageTypeListAct.kt
index d58252e..bf4e0e1 100644
--- a/mine/src/main/java/com/zj365/mime/act/MessageTypeListAct.kt
+++ b/mine/src/main/java/com/zj365/mime/act/MessageTypeListAct.kt
@@ -8,6 +8,7 @@ import com.alibaba.android.arouter.facade.annotation.Route
import com.xty.base.act.BaseListAct
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
+import com.xty.common.event.MessageReadEvent
import com.xty.common.getImageUrl
import com.xty.common.util.CommonToastUtils
import com.zj365.mime.R
@@ -16,20 +17,24 @@ import com.zj365.mime.databinding.ActMessageBinding
import com.zj365.mime.vm.MessageVm
import com.zj365.mime.weight.MessagePop
import com.xty.network.model.MessageBean
+import com.xty.network.model.MessageTypeDataBean
+import org.greenrobot.eventbus.EventBus
import java.lang.StringBuilder
/**
* 我的消息
*/
-@Route(path = ARouterUrl.MESSAGE)
+@Route(path = ARouterUrl.MESSAGE_TYPE)
class MessageTypeListAct : BaseListAct() {
var choiceMode:Boolean = false
val binding by lazy { ActMessageBinding.inflate(layoutInflater) }
val adapter by lazy { MessageAdapter() }
- var clickBean: MessageBean.SysMsg? = null
+ var clickBean: MessageTypeDataBean.MessageTypeBean? = null
var clickPosition = 0
val array by lazy { resources.getStringArray(R.array.msg_array) }
var nowPosition = 1
+
+ var msgType:Int = 1 //根据type消息获取消息列表 消息类型1,消息消息,2,福利官,3,小助手
val popWindow by lazy {
MessagePop(this) {
if (it != nowPosition) {
@@ -46,6 +51,8 @@ class MessageTypeListAct : BaseListAct() {
override fun initData() {
super.initData()
isDarkBar = true
+
+ msgType = intent.getIntExtra("msgType",0)
}
override fun initView() {
@@ -56,7 +63,7 @@ class MessageTypeListAct : BaseListAct() {
mTvTitle.text = getString(R.string.sys_message)
mTvRight.visibility = View.VISIBLE
mTvRight.text = getString(R.string.message_manager)
- mTvRight.setTextColor(ContextCompat.getColor(this@MessageTypeListAct,R.color.col_25C))
+ mTvRight.setTextColor(ContextCompat.getColor(this@MessageTypeListAct,R.color.col_02c))
titleBg.setBackgroundColor(ContextCompat.getColor(this@MessageTypeListAct,R.color.white))
mTvRight.setOnClickListener {
@@ -76,7 +83,7 @@ class MessageTypeListAct : BaseListAct() {
binding.llDelete.setOnClickListener{
val ids = StringBuilder()
adapter.data.forEachIndexed{ pos, any ->
- var msg = any as MessageBean.SysMsg
+ var msg = any as MessageTypeDataBean.MessageTypeBean
if(msg.isChoice){
ids.append("${msg.id},")
}
@@ -88,11 +95,6 @@ class MessageTypeListAct : BaseListAct() {
binding.title.mIvBack.setOnClickListener {
finish()
}
-// binding.mSpinner.setOnClickListener {
-// popWindow.showAction(it)
-// }
-
-// binding.mSpinner.text = array[nowPosition]
}
private fun choiceMode(mode:Boolean){
@@ -132,7 +134,7 @@ class MessageTypeListAct : BaseListAct() {
bundle.putString("chatImage", getImageUrl(bean.avatar))
RouteManager.goAct(ARouterUrl.CHAT_MSG, bundle)
} else {
- val data = bean as MessageBean.SysMsg
+ val data = bean as MessageTypeDataBean.MessageTypeBean
if (data.notifyStatus == 0) {
clickBean = data
mViewModel.readMsg(data.id, data.notifyId)
@@ -140,17 +142,17 @@ class MessageTypeListAct : BaseListAct() {
} else {
bundle.clear()
bundle.putSerializable("bean", data)
- RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL, bundle)
+ RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL_NEW, bundle)
}
}
}
R.id.mDelete -> {
- val sysBean = bean as MessageBean.SysMsg
+ val sysBean = bean as MessageTypeDataBean.MessageTypeBean
mViewModel.deleteMsg(sysBean.notifyId)
}
R.id.cbChoice->{
- val sysBean = bean as MessageBean.SysMsg
+ val sysBean = bean as MessageTypeDataBean.MessageTypeBean
val choiceView = view as CheckBox
sysBean.isChoice = choiceView.isChecked
if(choiceView.isChecked){
@@ -165,58 +167,61 @@ class MessageTypeListAct : BaseListAct() {
override fun liveObserver() {
mViewModel.readLive.observe(this) {
- (adapter.data[clickPosition] as MessageBean.SysMsg).notifyStatus = 1
+ (adapter.data[clickPosition] as MessageTypeDataBean.MessageTypeBean).notifyStatus = 1
adapter.notifyItemChanged(clickPosition)
bundle.clear()
bundle.putSerializable("bean", clickBean)
- RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL, bundle)
+ RouteManager.goAct(ARouterUrl.MESSAGE_DETAIL_NEW, bundle)
+ EventBus.getDefault().post(MessageReadEvent())
}
mViewModel.messageLive.observe(this) {
when (nowPosition) {
3 -> {
val list = mutableListOf()
- list.add(it.data.message)
+ list.add(it.data.records)
setDate(adapter, list)
}
0 -> {
val list = mutableListOf()
- list.add(it.data.message)
+ list.add(it.data.records)
it?.data?.let {
- it.systemMessage.let { it1 -> list.addAll(it1) }
+ it.records.let { it1 -> list.addAll(it1) }
}
setDate(adapter, list)
}
else -> {
it?.data?.let {
- setDate(adapter, it?.systemMessage as MutableList)
+ setDate(adapter, it?.records as MutableList)
}
}
}
}
mViewModel.deleteLive.observe(this) {
- mViewModel.getMessageList(page, 0)
+ mViewModel.getMessageList(page, msgType)
}
mViewModel.deletesLive.observe(this){
adapter.getDeletePos().forEachIndexed{_, any ->
if (adapter.data.size > any){
adapter.data.removeAt(any)
+ EventBus.getDefault().post(MessageReadEvent())
}else{
CommonToastUtils.showLoserToast("删除失败")
}
}
adapter.data.forEachIndexed{_, any ->
- val msg = any as MessageBean.SysMsg
+ val msg = any as MessageTypeDataBean.MessageTypeBean
msg.isChoice = false
}
adapter.getDeletePos().clear()
choiceMode(false)
CommonToastUtils.showSucceedToast("删除成功")
+ EventBus.getDefault().post(MessageReadEvent())
}
}
override fun loadData() {
adapter.getDeletePos().clear()
- mViewModel.getMessageList(page, 0)
+ mViewModel.getMessageList(page, msgType)
}
}
\ No newline at end of file
diff --git a/mine/src/main/java/com/zj365/mime/adapter/MessageAdapter.kt b/mine/src/main/java/com/zj365/mime/adapter/MessageAdapter.kt
index 274c8df..9ed2075 100644
--- a/mine/src/main/java/com/zj365/mime/adapter/MessageAdapter.kt
+++ b/mine/src/main/java/com/zj365/mime/adapter/MessageAdapter.kt
@@ -15,6 +15,7 @@ import com.xty.base.adapter.BaseAdapter
import com.xty.common.setImageUser
import com.zj365.mime.R
import com.xty.network.model.MessageBean
+import com.xty.network.model.MessageTypeDataBean
import de.hdodenhof.circleimageview.CircleImageView
import okhttp3.internal.filterList
@@ -36,7 +37,7 @@ class MessageAdapter():BaseAdapter(R.layout.item_message) {
// holder.setGone(R.id.mDelete,true)
// setBadge(item.count,holder.getView(R.id.msgCard),holder.getView(R.id.mBadge))
// }else
- if(item is MessageBean.SysMsg){
+ if(item is MessageTypeDataBean.MessageTypeBean){
holder.setGone(R.id.mRelMsg,false).setGone(R.id.mChat,true)
holder.setText(R.id.mContent,item.notifyContent)
.setText(R.id.mTvTime,RxTimeTool.milliseconds2String(item.notifyCreateTime))
diff --git a/mine/src/main/java/com/zj365/mime/vm/MessageVm.kt b/mine/src/main/java/com/zj365/mime/vm/MessageVm.kt
index 4127f91..aa5541a 100644
--- a/mine/src/main/java/com/zj365/mime/vm/MessageVm.kt
+++ b/mine/src/main/java/com/zj365/mime/vm/MessageVm.kt
@@ -4,23 +4,23 @@ import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
import com.xty.common.util.CommonUtils
import com.xty.network.model.MessageBean
+import com.xty.network.model.MessageTypeDataBean
import com.xty.network.model.RespBody
import org.json.JSONObject
class MessageVm : BaseVm(){
- val messageLive by lazy{MutableLiveData>()}
+ val messageLive by lazy{MutableLiveData>()}
val readLive by lazy{MutableLiveData>()}
val deleteLive by lazy{MutableLiveData>()}
val deletesLive by lazy { MutableLiveData>() }
fun getMessageList(page:Int,type:Int){
startHttp {
var json=JSONObject()
- // json.put("pageNum",page)
- //json.put("pageSize",Const.PAGE_SIZE)
json.put("type",type)
- json.put("userId", CommonUtils.getMyUserId())
+ json.put("pageNum", page)
+ json.put("pageSize",20)
- var respnse=apiInterface().getMessageList(retrofits.getRequestBody(json.toString()))
+ var respnse=apiInterface().getMessageListForType(retrofits.getRequestBody(json.toString()))
respnse.getCodeStatus(messageLive,nowData)
}
}
@@ -29,11 +29,8 @@ class MessageVm : BaseVm(){
startHttp {
var json=JSONObject()
json.put("id", id)
- json.put("notifyId", notifyId)
- json.put("notifyStatus",1)
- json.put("notifyHandStatus",2)
- var respnse=apiInterface().readMsg(retrofits.getRequestBody(json.toString()))
+ var respnse=apiInterface().setMessageRead(retrofits.getRequestBody(json.toString()))
respnse.getCodeStatus(readLive,nowData)
}
}
diff --git a/mine/src/main/res/mipmap-xhdpi/ic_round_choice.png b/mine/src/main/res/mipmap-xhdpi/ic_round_choice.png
index eb0fc97e7a797e5a94a092b5ce3df4d5d4727920..b81185e109d8457071638f226b91edeb1fcd7f3b 100644
GIT binary patch
delta 678
zcmV;X0$Kg^2FeAHFnGBQ8|
zn`B4XjjS7xG$#u|bcddnTC)}u9dTQpW*fjzwSW@y#?Aaf5dP6r@z^RT8gKf=6xIuq#v2T*1;y>t7V)fZkQE^#oPjs^JliFr
zBW`+{KM`oJH-AXLXU#8kX3vXAL;@B#UT;WV&p<=y2~Ci3J4xbDtsp^f1wAG#n?TEY
z9SQH`4R+H?*ckw>T0jD)wQI*IbOq8(L}m&0me6rbddZUosWu2^)UwczeWNKWId%)u
zjdD7MI8q6e0rW&*FM-Zt5dm+s#D4S*|F+`xZ4lQhZGYB4=gNX4P0JhVL+n8-nTeCw
zn|q8xOh0)t2lfD6jtCtDs^V#dRHc
z5I|!ImuW%oYp?6pE5`2ZhUMB1p~FR2qa!B`Vjm91`3T>&@709)54(#f6%6nyApigX
M07*qoM6N<$f=)s?vH$=8
delta 849
zcmV-X1Frna1@s1xFn)VwT|Dppa%qETz!FR#^*rkNzY
ztM|D7{l9z9z2}}QDAzhWN4S2DSgP2~MnZAs%EdI(rbtK1{(rk2jg5V!tfW|{8i|Y*
z#jyjXYz0_XdOp$(g_mglIA`ek*FxHYAT`{zT106DFs;K5Rf|@
zKLEk8{{#$@lRRShy)A>nocp6j6D>j>t_G4b_E1vSvJ=j($Q_EWgn~Q61R1a~u__tR
z?pmMypxQ*DW`9hYh5%EC6GY&BuT#_>kLO!I$Q_9v1aNdXA^9N`T)k>jXU=&mKy6hZ
z!7mb<0nQi5zJFc>dW<)(ri<>+b53Ea;K%1d!8|y-$2@Yj+P=E#H_H^JdlsVp}V0+4^
zU6>t>&ryIw#_Ly`Y8x6HW7D)YesMX-Ky+ncE|W@B3M}o#L`ft#qfEK^nc%V4ec++n6`8ZB9luR2)==+sT2b8
zqmpsDUM`v2n=KQrXl#u_xlyr61wvD}Hs$l)w4{S7tUDY#4w3y8c$Ae8IBMuxwulZX
zkxouUVxh+X_BT+>yk3fENqi2&LEZ0g&dT?zx^XEBf5B64I%R-UYA;
zkV=WA{rL%y*0lNkbax=|xsbLf=%2VQ6mpJ2%`ycHK#_R>{}xE;A^04E(2vabV0R#p
bE;X4yZ-zx}kGVi900000NkvXXu0mjf@|uwA
diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt
index 5c084d3..f97916a 100644
--- a/network/src/main/java/com/xty/network/ApiInterface.kt
+++ b/network/src/main/java/com/xty/network/ApiInterface.kt
@@ -1017,6 +1017,9 @@ interface ApiInterface {
@POST("customer/message")
suspend fun getMessageList(@Body rb: RequestBody): RespBody
+ @POST("customer/message/messageList")
+ suspend fun getMessageListForType(@Body rb: RequestBody):RespBody
+
/**
* 我的预警消息
*/
@@ -1032,7 +1035,7 @@ interface ApiInterface {
/**
* 批量删除消息
*/
- @POST("butler/message/deleteMsg")
+ @POST("customer/message/deleteMsg")
suspend fun deleteMsgs(@Body ids: RequestBody): RespBody
/**
@@ -1326,6 +1329,21 @@ interface ApiInterface {
@GET("customer/device/findUserBaseInfo")
suspend fun getUserInfo(@Query("userId") userId: String): RespBody
+ /**
+ * 获取首页系统消息
+ */
+ @POST("customer/message/index")
+ suspend fun getSystemMsg():RespBody
+
+ /**
+ * 设置消息已读
+ */
+ @POST("customer/message/setMessageRead")
+ suspend fun setMessageRead(@Body rb: RequestBody): RespBody
+
+ @POST("customer/message/setAllMessageRead")
+ suspend fun setMessageReadAll(): RespBody
+
/**
* 解绑设备SN号
*/
diff --git a/network/src/main/java/com/xty/network/model/MessageTypeDataBean.kt b/network/src/main/java/com/xty/network/model/MessageTypeDataBean.kt
new file mode 100644
index 0000000..52f2feb
--- /dev/null
+++ b/network/src/main/java/com/xty/network/model/MessageTypeDataBean.kt
@@ -0,0 +1,34 @@
+package com.xty.network.model
+
+import com.google.gson.annotations.SerializedName
+import java.io.Serializable
+
+data class MessageTypeDataBean (
+ var records:ArrayList,
+ var total:Int,
+ var size:Int,
+ var current:Int
+):Serializable{
+
+ data class MessageTypeBean(
+
+ val notifyContent: String,
+ val notifyCreateTime: Long,
+ val notifyHandStatus: Int,
+ val notifyId: String,
+ var notifyStatus: Int,
+ val notifyTitle: String,
+ val notifyType: Int,
+ val notifyUserType: Int,
+ val remark: Any,
+ val type: Int,
+ val userId: String,
+ val id: String,
+ val reportPresetId:String,
+ val titleStatus:String,
+ val time:String,
+ var isChoice:Boolean = false
+ ):Serializable{
+
+ }
+}
\ No newline at end of file
diff --git a/network/src/main/java/com/xty/network/model/SystemMsgBean.kt b/network/src/main/java/com/xty/network/model/SystemMsgBean.kt
index 58fb3dc..c743aa3 100644
--- a/network/src/main/java/com/xty/network/model/SystemMsgBean.kt
+++ b/network/src/main/java/com/xty/network/model/SystemMsgBean.kt
@@ -2,4 +2,6 @@ package com.xty.network.model
import android.content.ContentResolver
-data class SystemMsgBean(var id:Long,var title:String,var time:Long,var content:String)
+data class SystemMsgBean(var unReadCount:Long,var name:String,var time:String,var msg:String,var type:Int)
+
+data class SystemMsgDataResp(var unReadCount:Long,var list:ArrayList)