diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index 5a06108..97a351f 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -108,10 +108,9 @@ } /** - * TODO 参数异常 * 通知公告已读 */ - suspend fun readNotice(userId: String, ids: Array): String { + suspend fun readNotice(userId: String, ids: Array): String { val param = JsonObject() param.addProperty("userId", userId) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index 5a06108..97a351f 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -108,10 +108,9 @@ } /** - * TODO 参数异常 * 通知公告已读 */ - suspend fun readNotice(userId: String, ids: Array): String { + suspend fun readNotice(userId: String, ids: Array): String { val param = JsonObject() param.addProperty("userId", userId) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt index 9596985..9e3a5ed 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt @@ -3,12 +3,13 @@ import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Paint -import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R import com.casic.xz.meterage.extensions.formatTextFromHtml import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile -import com.casic.xz.meterage.vm.NoticeViewModel +import com.casic.xz.meterage.model.NoticeListModel +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.obtainScreenWidth @@ -19,47 +20,42 @@ @SuppressLint("SetTextI18n") class NoticeDetailActivity : KotlinBaseActivity() { - private lateinit var noticeViewModel: NoticeViewModel + private val gson by lazy { Gson() } override fun initData() { leftBackView.setOnClickListener { finish() } titleView.text = "通知公告" - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + val noticeJson = intent.getStringExtra(Constant.INTENT_PARAM)!! + val dataRow = gson.fromJson( + noticeJson, object : TypeToken() {}.type + ) - noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java] - noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1) - noticeViewModel.noticeList.observe(this) { - if (it.code == 200) { - val dataRow = it.data?.rows!![0] + noticeDateView.text = dataRow.noticeTime + noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" + noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" - noticeDateView.text = dataRow.noticeTime - noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" - noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" + noticeNoView.text = dataRow.noticeNo + noticeTitleView.text = dataRow.noticeTitle + noticeSketchView.text = dataRow.noticeSketch - noticeNoView.text = dataRow.noticeNo - noticeTitleView.text = dataRow.noticeTitle - noticeSketchView.text = dataRow.noticeSketch + dataRow.noticeContent.formatTextFromHtml( + this, noticeContentView, obtainScreenWidth() + ) - dataRow.noticeContent.formatTextFromHtml( - this, noticeContentView, obtainScreenWidth() - ) + if (dataRow.minioFileName.isNullOrBlank()) { + minioFileView.text = "暂无附件" + } else { + val minioFileName = dataRow.minioFileName - if (dataRow.minioFileName.isNullOrBlank()) { - minioFileView.text = "暂无附件" - } else { - val minioFileName = dataRow.minioFileName + minioFileView.text = minioFileName + val textPaint = minioFileView.paint + textPaint.flags = Paint.UNDERLINE_TEXT_FLAG + textPaint.isAntiAlias = true + minioFileView.setTextColor(Color.BLUE) - minioFileView.text = minioFileName - val textPaint = minioFileView.paint - textPaint.flags = Paint.UNDERLINE_TEXT_FLAG - textPaint.isAntiAlias = true - minioFileView.setTextColor(Color.BLUE) - - minioFileView.setOnClickListener { - minioFileName.watchAttachFile(this) - } - } + minioFileView.setOnClickListener { + minioFileName.watchAttachFile(this) } } } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index 5a06108..97a351f 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -108,10 +108,9 @@ } /** - * TODO 参数异常 * 通知公告已读 */ - suspend fun readNotice(userId: String, ids: Array): String { + suspend fun readNotice(userId: String, ids: Array): String { val param = JsonObject() param.addProperty("userId", userId) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt index 9596985..9e3a5ed 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt @@ -3,12 +3,13 @@ import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Paint -import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R import com.casic.xz.meterage.extensions.formatTextFromHtml import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile -import com.casic.xz.meterage.vm.NoticeViewModel +import com.casic.xz.meterage.model.NoticeListModel +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.obtainScreenWidth @@ -19,47 +20,42 @@ @SuppressLint("SetTextI18n") class NoticeDetailActivity : KotlinBaseActivity() { - private lateinit var noticeViewModel: NoticeViewModel + private val gson by lazy { Gson() } override fun initData() { leftBackView.setOnClickListener { finish() } titleView.text = "通知公告" - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + val noticeJson = intent.getStringExtra(Constant.INTENT_PARAM)!! + val dataRow = gson.fromJson( + noticeJson, object : TypeToken() {}.type + ) - noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java] - noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1) - noticeViewModel.noticeList.observe(this) { - if (it.code == 200) { - val dataRow = it.data?.rows!![0] + noticeDateView.text = dataRow.noticeTime + noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" + noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" - noticeDateView.text = dataRow.noticeTime - noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" - noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" + noticeNoView.text = dataRow.noticeNo + noticeTitleView.text = dataRow.noticeTitle + noticeSketchView.text = dataRow.noticeSketch - noticeNoView.text = dataRow.noticeNo - noticeTitleView.text = dataRow.noticeTitle - noticeSketchView.text = dataRow.noticeSketch + dataRow.noticeContent.formatTextFromHtml( + this, noticeContentView, obtainScreenWidth() + ) - dataRow.noticeContent.formatTextFromHtml( - this, noticeContentView, obtainScreenWidth() - ) + if (dataRow.minioFileName.isNullOrBlank()) { + minioFileView.text = "暂无附件" + } else { + val minioFileName = dataRow.minioFileName - if (dataRow.minioFileName.isNullOrBlank()) { - minioFileView.text = "暂无附件" - } else { - val minioFileName = dataRow.minioFileName + minioFileView.text = minioFileName + val textPaint = minioFileView.paint + textPaint.flags = Paint.UNDERLINE_TEXT_FLAG + textPaint.isAntiAlias = true + minioFileView.setTextColor(Color.BLUE) - minioFileView.text = minioFileName - val textPaint = minioFileView.paint - textPaint.flags = Paint.UNDERLINE_TEXT_FLAG - textPaint.isAntiAlias = true - minioFileView.setTextColor(Color.BLUE) - - minioFileView.setOnClickListener { - minioFileName.watchAttachFile(this) - } - } + minioFileView.setOnClickListener { + minioFileName.watchAttachFile(this) } } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt index 7f79a55..885777b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt @@ -3,14 +3,11 @@ import android.content.Intent import android.net.Uri import android.os.Handler -import android.util.Log import android.view.View import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.addAll -import com.casic.xz.meterage.extensions.combineFilePath import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.NoticeListModel @@ -25,6 +22,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -42,6 +40,8 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 + private var isAllRead = false override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) @@ -83,7 +83,29 @@ noticeViewModel.readNoticeResult.observe(this) { if (it.code == 200) { //刷新列表小红点 - weakReferenceHandler.sendEmptyMessage(2023013101) + if (isAllRead) { + dataBeans.forEach { notice -> + notice.read = "1" + } + noticeAdapter.notifyDataSetChanged() + + BadeHelper.setBadgeNum(this, 0) + } else { + val rowsModel = dataBeans[clickedPosition] + rowsModel.read = "1" + noticeAdapter.notifyItemChanged(clickedPosition) + noticeAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + } } } } @@ -104,7 +126,23 @@ } override fun onConfirmClick() { - noticeViewModel.readNotice(userInfo.id, arrayOf()) + isAllRead = true + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + //声明一个全是未读消息长度的空数组 + val ids = arrayOfNulls(count) + dataBeans.forEachIndexed { index, model -> + if (model.read == "0") { + ids[index] = model.id + } + } + noticeViewModel.readNotice(userInfo.id, ids) } }).build().show() } @@ -158,7 +196,14 @@ if (isRefresh || isLoadMore) { noticeAdapter.notifyDataSetChanged() } else { - BadeHelper.setBadgeNum(this, dataBeans.size) + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { pageIndex = 1 @@ -176,7 +221,7 @@ item: NoticeListModel.DataModel.RowsModel ) { // holder.noticeTypeIconView.setImageResource() - val state = if (item.isDel == 0) { + val state = if (item.read == "0") { View.VISIBLE } else { View.INVISIBLE @@ -196,14 +241,12 @@ override fun onItemClicked( position: Int, t: NoticeListModel.DataModel.RowsModel ) { - val allArgs = addAll( - t.noticeNo, t.noticeTitle, t.noticePublisher, "", "" - ) - Log.d( - "Casic", - "NoticeListActivity => onItemClicked: ${t.minioFileName.combineFilePath()}" - ) - navigatePageTo(allArgs) + isAllRead = false + //标记被点击的item位置 + clickedPosition = position + noticeViewModel.readNotice(userInfo.id, arrayOf(t.id)) + + navigatePageTo(t.toJson()) } }) } @@ -213,12 +256,6 @@ true } - //TODO 判断是否开启通知权限 - private fun hasNoticePermission(): Boolean { - - return false - } - override fun initLayoutView(): Int = R.layout.activity_notice_list override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index 5a06108..97a351f 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -108,10 +108,9 @@ } /** - * TODO 参数异常 * 通知公告已读 */ - suspend fun readNotice(userId: String, ids: Array): String { + suspend fun readNotice(userId: String, ids: Array): String { val param = JsonObject() param.addProperty("userId", userId) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt index 9596985..9e3a5ed 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt @@ -3,12 +3,13 @@ import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Paint -import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R import com.casic.xz.meterage.extensions.formatTextFromHtml import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile -import com.casic.xz.meterage.vm.NoticeViewModel +import com.casic.xz.meterage.model.NoticeListModel +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.obtainScreenWidth @@ -19,47 +20,42 @@ @SuppressLint("SetTextI18n") class NoticeDetailActivity : KotlinBaseActivity() { - private lateinit var noticeViewModel: NoticeViewModel + private val gson by lazy { Gson() } override fun initData() { leftBackView.setOnClickListener { finish() } titleView.text = "通知公告" - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + val noticeJson = intent.getStringExtra(Constant.INTENT_PARAM)!! + val dataRow = gson.fromJson( + noticeJson, object : TypeToken() {}.type + ) - noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java] - noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1) - noticeViewModel.noticeList.observe(this) { - if (it.code == 200) { - val dataRow = it.data?.rows!![0] + noticeDateView.text = dataRow.noticeTime + noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" + noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" - noticeDateView.text = dataRow.noticeTime - noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" - noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" + noticeNoView.text = dataRow.noticeNo + noticeTitleView.text = dataRow.noticeTitle + noticeSketchView.text = dataRow.noticeSketch - noticeNoView.text = dataRow.noticeNo - noticeTitleView.text = dataRow.noticeTitle - noticeSketchView.text = dataRow.noticeSketch + dataRow.noticeContent.formatTextFromHtml( + this, noticeContentView, obtainScreenWidth() + ) - dataRow.noticeContent.formatTextFromHtml( - this, noticeContentView, obtainScreenWidth() - ) + if (dataRow.minioFileName.isNullOrBlank()) { + minioFileView.text = "暂无附件" + } else { + val minioFileName = dataRow.minioFileName - if (dataRow.minioFileName.isNullOrBlank()) { - minioFileView.text = "暂无附件" - } else { - val minioFileName = dataRow.minioFileName + minioFileView.text = minioFileName + val textPaint = minioFileView.paint + textPaint.flags = Paint.UNDERLINE_TEXT_FLAG + textPaint.isAntiAlias = true + minioFileView.setTextColor(Color.BLUE) - minioFileView.text = minioFileName - val textPaint = minioFileView.paint - textPaint.flags = Paint.UNDERLINE_TEXT_FLAG - textPaint.isAntiAlias = true - minioFileView.setTextColor(Color.BLUE) - - minioFileView.setOnClickListener { - minioFileName.watchAttachFile(this) - } - } + minioFileView.setOnClickListener { + minioFileName.watchAttachFile(this) } } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt index 7f79a55..885777b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt @@ -3,14 +3,11 @@ import android.content.Intent import android.net.Uri import android.os.Handler -import android.util.Log import android.view.View import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.addAll -import com.casic.xz.meterage.extensions.combineFilePath import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.NoticeListModel @@ -25,6 +22,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -42,6 +40,8 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 + private var isAllRead = false override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) @@ -83,7 +83,29 @@ noticeViewModel.readNoticeResult.observe(this) { if (it.code == 200) { //刷新列表小红点 - weakReferenceHandler.sendEmptyMessage(2023013101) + if (isAllRead) { + dataBeans.forEach { notice -> + notice.read = "1" + } + noticeAdapter.notifyDataSetChanged() + + BadeHelper.setBadgeNum(this, 0) + } else { + val rowsModel = dataBeans[clickedPosition] + rowsModel.read = "1" + noticeAdapter.notifyItemChanged(clickedPosition) + noticeAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + } } } } @@ -104,7 +126,23 @@ } override fun onConfirmClick() { - noticeViewModel.readNotice(userInfo.id, arrayOf()) + isAllRead = true + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + //声明一个全是未读消息长度的空数组 + val ids = arrayOfNulls(count) + dataBeans.forEachIndexed { index, model -> + if (model.read == "0") { + ids[index] = model.id + } + } + noticeViewModel.readNotice(userInfo.id, ids) } }).build().show() } @@ -158,7 +196,14 @@ if (isRefresh || isLoadMore) { noticeAdapter.notifyDataSetChanged() } else { - BadeHelper.setBadgeNum(this, dataBeans.size) + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { pageIndex = 1 @@ -176,7 +221,7 @@ item: NoticeListModel.DataModel.RowsModel ) { // holder.noticeTypeIconView.setImageResource() - val state = if (item.isDel == 0) { + val state = if (item.read == "0") { View.VISIBLE } else { View.INVISIBLE @@ -196,14 +241,12 @@ override fun onItemClicked( position: Int, t: NoticeListModel.DataModel.RowsModel ) { - val allArgs = addAll( - t.noticeNo, t.noticeTitle, t.noticePublisher, "", "" - ) - Log.d( - "Casic", - "NoticeListActivity => onItemClicked: ${t.minioFileName.combineFilePath()}" - ) - navigatePageTo(allArgs) + isAllRead = false + //标记被点击的item位置 + clickedPosition = position + noticeViewModel.readNotice(userInfo.id, arrayOf(t.id)) + + navigatePageTo(t.toJson()) } }) } @@ -213,12 +256,6 @@ true } - //TODO 判断是否开启通知权限 - private fun hasNoticePermission(): Boolean { - - return false - } - override fun initLayoutView(): Int = R.layout.activity_notice_list override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt index 3565eb2..d405aac 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt @@ -47,7 +47,7 @@ it.cause.toString().show(BaseApplication.get()) }) - fun readNotice(userId: String, ids: Array) = launch({ + fun readNotice(userId: String, ids: Array) = launch({ val response = RetrofitServiceManager.readNotice(userId, ids) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt index efb9540..e27dac3 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -42,13 +42,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt index d969baf..81ddf4f 100644 --- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -38,13 +38,21 @@ noticeViewModel.getNoticeList("", "", "", "", "", 1) noticeViewModel.noticeList.observe(this) { if (it.code == 200) { - val total = it.data.total - if (total.toString() == "") { + val data = it.data + + var count = 0 + data.rows.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + if (count == 0) { noticeCountView.visibility = View.GONE } else { noticeCountView.visibility = View.VISIBLE - if (total <= 9) { - noticeCountView.text = total.toString() + if (count <= 9) { + noticeCountView.text = count.toString() } else { noticeCountView.text = "9+" } diff --git a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java index ce9ae03..4afd053 100644 --- a/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java +++ b/app/src/main/java/com/casic/xz/meterage/model/NoticeListModel.java @@ -55,7 +55,7 @@ public static class RowsModel { private String createTime; private String id; - private int isDel; + private String isDel; private String minioFileName; private String noticeCompany; private String noticeContent; @@ -64,6 +64,7 @@ private String noticeSketch; private String noticeTime; private String noticeTitle; + private String read; private String updateTime; public String getCreateTime() { @@ -82,11 +83,11 @@ this.id = id; } - public int getIsDel() { + public String getIsDel() { return isDel; } - public void setIsDel(int isDel) { + public void setIsDel(String isDel) { this.isDel = isDel; } @@ -154,6 +155,14 @@ this.noticeTitle = noticeTitle; } + public String getRead() { + return read; + } + + public void setRead(String read) { + this.read = read; + } + public String getUpdateTime() { return updateTime; } diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt index 5a06108..97a351f 100644 --- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt @@ -108,10 +108,9 @@ } /** - * TODO 参数异常 * 通知公告已读 */ - suspend fun readNotice(userId: String, ids: Array): String { + suspend fun readNotice(userId: String, ids: Array): String { val param = JsonObject() param.addProperty("userId", userId) param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray) diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt index 9596985..9e3a5ed 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeDetailActivity.kt @@ -3,12 +3,13 @@ import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Paint -import androidx.lifecycle.ViewModelProvider import com.casic.xz.meterage.R import com.casic.xz.meterage.extensions.formatTextFromHtml import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.watchAttachFile -import com.casic.xz.meterage.vm.NoticeViewModel +import com.casic.xz.meterage.model.NoticeListModel +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.obtainScreenWidth @@ -19,47 +20,42 @@ @SuppressLint("SetTextI18n") class NoticeDetailActivity : KotlinBaseActivity() { - private lateinit var noticeViewModel: NoticeViewModel + private val gson by lazy { Gson() } override fun initData() { leftBackView.setOnClickListener { finish() } titleView.text = "通知公告" - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + val noticeJson = intent.getStringExtra(Constant.INTENT_PARAM)!! + val dataRow = gson.fromJson( + noticeJson, object : TypeToken() {}.type + ) - noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java] - noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1) - noticeViewModel.noticeList.observe(this) { - if (it.code == 200) { - val dataRow = it.data?.rows!![0] + noticeDateView.text = dataRow.noticeTime + noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" + noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" - noticeDateView.text = dataRow.noticeTime - noticePublisherView.text = "发布人 ${dataRow.noticePublisher}" - noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}" + noticeNoView.text = dataRow.noticeNo + noticeTitleView.text = dataRow.noticeTitle + noticeSketchView.text = dataRow.noticeSketch - noticeNoView.text = dataRow.noticeNo - noticeTitleView.text = dataRow.noticeTitle - noticeSketchView.text = dataRow.noticeSketch + dataRow.noticeContent.formatTextFromHtml( + this, noticeContentView, obtainScreenWidth() + ) - dataRow.noticeContent.formatTextFromHtml( - this, noticeContentView, obtainScreenWidth() - ) + if (dataRow.minioFileName.isNullOrBlank()) { + minioFileView.text = "暂无附件" + } else { + val minioFileName = dataRow.minioFileName - if (dataRow.minioFileName.isNullOrBlank()) { - minioFileView.text = "暂无附件" - } else { - val minioFileName = dataRow.minioFileName + minioFileView.text = minioFileName + val textPaint = minioFileView.paint + textPaint.flags = Paint.UNDERLINE_TEXT_FLAG + textPaint.isAntiAlias = true + minioFileView.setTextColor(Color.BLUE) - minioFileView.text = minioFileName - val textPaint = minioFileView.paint - textPaint.flags = Paint.UNDERLINE_TEXT_FLAG - textPaint.isAntiAlias = true - minioFileView.setTextColor(Color.BLUE) - - minioFileView.setOnClickListener { - minioFileName.watchAttachFile(this) - } - } + minioFileView.setOnClickListener { + minioFileName.watchAttachFile(this) } } } diff --git a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt index 7f79a55..885777b 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/notice/NoticeListActivity.kt @@ -3,14 +3,11 @@ import android.content.Intent import android.net.Uri import android.os.Handler -import android.util.Log import android.view.View import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import com.casic.xz.meterage.R -import com.casic.xz.meterage.extensions.addAll -import com.casic.xz.meterage.extensions.combineFilePath import com.casic.xz.meterage.extensions.initLayoutImmersionBar import com.casic.xz.meterage.extensions.showEmptyPage import com.casic.xz.meterage.model.NoticeListModel @@ -25,6 +22,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -42,6 +40,8 @@ private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false + private var clickedPosition = 0 + private var isAllRead = false override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) @@ -83,7 +83,29 @@ noticeViewModel.readNoticeResult.observe(this) { if (it.code == 200) { //刷新列表小红点 - weakReferenceHandler.sendEmptyMessage(2023013101) + if (isAllRead) { + dataBeans.forEach { notice -> + notice.read = "1" + } + noticeAdapter.notifyDataSetChanged() + + BadeHelper.setBadgeNum(this, 0) + } else { + val rowsModel = dataBeans[clickedPosition] + rowsModel.read = "1" + noticeAdapter.notifyItemChanged(clickedPosition) + noticeAdapter.notifyItemRangeChanged( + clickedPosition, dataBeans.size - clickedPosition + ) + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + } } } } @@ -104,7 +126,23 @@ } override fun onConfirmClick() { - noticeViewModel.readNotice(userInfo.id, arrayOf()) + isAllRead = true + + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + + //声明一个全是未读消息长度的空数组 + val ids = arrayOfNulls(count) + dataBeans.forEachIndexed { index, model -> + if (model.read == "0") { + ids[index] = model.id + } + } + noticeViewModel.readNotice(userInfo.id, ids) } }).build().show() } @@ -158,7 +196,14 @@ if (isRefresh || isLoadMore) { noticeAdapter.notifyDataSetChanged() } else { - BadeHelper.setBadgeNum(this, dataBeans.size) + var count = 0 + dataBeans.forEach { notice -> + if (notice.read != "1") { + count++ + } + } + BadeHelper.setBadgeNum(this, count) + if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { pageIndex = 1 @@ -176,7 +221,7 @@ item: NoticeListModel.DataModel.RowsModel ) { // holder.noticeTypeIconView.setImageResource() - val state = if (item.isDel == 0) { + val state = if (item.read == "0") { View.VISIBLE } else { View.INVISIBLE @@ -196,14 +241,12 @@ override fun onItemClicked( position: Int, t: NoticeListModel.DataModel.RowsModel ) { - val allArgs = addAll( - t.noticeNo, t.noticeTitle, t.noticePublisher, "", "" - ) - Log.d( - "Casic", - "NoticeListActivity => onItemClicked: ${t.minioFileName.combineFilePath()}" - ) - navigatePageTo(allArgs) + isAllRead = false + //标记被点击的item位置 + clickedPosition = position + noticeViewModel.readNotice(userInfo.id, arrayOf(t.id)) + + navigatePageTo(t.toJson()) } }) } @@ -213,12 +256,6 @@ true } - //TODO 判断是否开启通知权限 - private fun hasNoticePermission(): Boolean { - - return false - } - override fun initLayoutView(): Int = R.layout.activity_notice_list override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt index 3565eb2..d405aac 100644 --- a/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt +++ b/app/src/main/java/com/casic/xz/meterage/vm/NoticeViewModel.kt @@ -47,7 +47,7 @@ it.cause.toString().show(BaseApplication.get()) }) - fun readNotice(userId: String, ids: Array) = launch({ + fun readNotice(userId: String, ids: Array) = launch({ val response = RetrofitServiceManager.readNotice(userId, ids) val responseCode = response.separateResponseCode() if (responseCode == 200) { diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index f380174..5a52d6b 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,4 @@ - +