diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm_tag.xml b/app/src/main/res/drawable/ic_alarm_tag.xml new file mode 100644 index 0000000..8650128 --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm_tag.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm_tag.xml b/app/src/main/res/drawable/ic_alarm_tag.xml new file mode 100644 index 0000000..8650128 --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm_tag.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index d127909..3882e70 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -12,8 +12,6 @@ diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm_tag.xml b/app/src/main/res/drawable/ic_alarm_tag.xml new file mode 100644 index 0000000..8650128 --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm_tag.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index d127909..3882e70 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -12,8 +12,6 @@ diff --git a/app/src/main/res/layout/item_message_rv.xml b/app/src/main/res/layout/item_message_rv.xml deleted file mode 100644 index 56535be..0000000 --- a/app/src/main/res/layout/item_message_rv.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm_tag.xml b/app/src/main/res/drawable/ic_alarm_tag.xml new file mode 100644 index 0000000..8650128 --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm_tag.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index d127909..3882e70 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -12,8 +12,6 @@ diff --git a/app/src/main/res/layout/item_message_rv.xml b/app/src/main/res/layout/item_message_rv.xml deleted file mode 100644 index 56535be..0000000 --- a/app/src/main/res/layout/item_message_rv.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_message_rv_l.xml b/app/src/main/res/layout/item_message_rv_l.xml new file mode 100644 index 0000000..27201df --- /dev/null +++ b/app/src/main/res/layout/item_message_rv_l.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f6ac707..62364a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' -apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 31 @@ -47,12 +46,6 @@ } } - greendao { - schemaVersion 1//数据库版本号 - targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 - daoPackage 'com.casic.br.greendao'//设置DaoMaster、DaoSession、Dao包名 - } - packagingOptions { pickFirst 'lib/*/libc++_shared.so' // 多个 AAR(Android Library)文件中存在此 .so 文件,请选择第一个 } @@ -100,8 +93,6 @@ implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //ZBar(综合Java和C++扫码),生成二维码 implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' - //数据库框架 - implementation 'org.greenrobot:greendao:3.3.0' //桌面角标 implementation "me.leolin:ShortcutBadger:1.1.22@aar" //轮播图 diff --git a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt index 792e695..82b52a1 100644 --- a/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt +++ b/app/src/main/java/com/casic/br/adapter/MessageListAdapter.kt @@ -9,10 +9,10 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.br.R -import com.casic.br.model.LocaleMessageBean +import com.casic.br.model.PushMessageModel class MessageListAdapter( - context: Context, private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -20,21 +20,21 @@ override fun getItemCount(): Int = dataRows.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( - layoutInflater.inflate(R.layout.item_message_rv, parent, false) + layoutInflater.inflate(R.layout.item_message_rv_l, parent, false) ) override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.dateView.text = rowsBean.messageTime - holder.titleView.text = rowsBean.title - holder.contentView.text = rowsBean.content - val state = if (rowsBean.isRead == "0") { - View.VISIBLE - } else { - View.INVISIBLE - } - holder.readStateView.visibility = state + holder.dateView.text = rowsBean.createTime + holder.titleView.text = rowsBean.messageTitle + holder.contentView.text = rowsBean.messageContent +// val state = if (rowsBean.isRead == "0") { +// View.VISIBLE +// } else { +// View.INVISIBLE +// } +// holder.readStateView.visibility = state //绑定事件 holder.deleteView.setOnClickListener { listener?.onDeleteClicked(position) diff --git a/app/src/main/java/com/casic/br/base/BaseApplication.kt b/app/src/main/java/com/casic/br/base/BaseApplication.kt index fab70eb..34587a2 100644 --- a/app/src/main/java/com/casic/br/base/BaseApplication.kt +++ b/app/src/main/java/com/casic/br/base/BaseApplication.kt @@ -2,8 +2,6 @@ import android.app.Application import android.util.Log -import com.casic.br.greendao.DaoMaster -import com.casic.br.greendao.DaoSession import com.igexin.sdk.PushManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.tuya.smart.home.sdk.TuyaHomeSdk @@ -18,8 +16,6 @@ private var instance: BaseApplication by Delegates.notNull() fun obtainInstance() = instance - - private lateinit var daoSession: DaoSession } override fun onCreate() { @@ -33,12 +29,5 @@ } TuyaHomeSdk.init(this) TuyaHomeSdk.setDebugMode(true) - val devOpenHelper = DaoMaster.DevOpenHelper(this, "SmartKitchen.db", null) - val daoMaster = DaoMaster(devOpenHelper.writableDatabase) - daoSession = daoMaster.newSession() - } - - fun obtainDaoSession(): DaoSession { - return daoSession } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt index 8fc6c8c..eb7b995 100644 --- a/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/HomePageFragment.kt @@ -65,7 +65,7 @@ } private fun initBanner() { - bannerViewModel.obtainBanner() + bannerViewModel.obtainBanner("") bannerViewModel.listModel.observe(this, { if (it.code == 200) { val banner = homeBannerView as Banner = ArrayList() - private var pageIndex = 0 // 本地数据库分页从0开始 + private lateinit var messageViewModel: MessageViewModel + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false - private var userId = "" override fun initLayoutView(): Int = R.layout.fragment_message @@ -34,90 +37,85 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) + messageViewModel = ViewModelProvider(this)[MessageViewModel::class.java] + messageViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + messageLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + messageLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022101001) + } + }) + } + + override fun initEvent() { + messageLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainMessageListByPage() + } + + messageLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainMessageListByPage() + } + } + + override fun onResume() { + super.onResume() + obtainMessageListByPage() } override fun observeRequestState() { } - override fun initEvent() { - messageLayout.setOnRefreshListener { - isRefresh = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isRefresh = false - dataBeans.clear() - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - - it.finishRefresh() - weakReferenceHandler.sendEmptyMessage(2022070401) - } - }.start() - } - - messageLayout.setOnLoadMoreListener { - isLoadMore = true - object : CountDownTimer(1000, 500) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - isLoadMore = false - pageIndex++ - dataBeans.addAll( - DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - ) - it.finishLoadMore() - weakReferenceHandler.sendEmptyMessage(2022082301) - } - }.start() - } - } - - override fun onResume() { - //默认加载第一页 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) - super.onResume() + private fun obtainMessageListByPage() { + messageViewModel.obtainMessageListByPage("", "", "", pageIndex) } private val callback = Handler.Callback { - if (it.what == 2022082301) { + if (it.what == 2022101001) { if (isRefresh || isLoadMore) { messageAdapter.notifyDataSetChanged() } else { if (dataBeans.size == 0) { emptyView!!.showEmptyPage("没有任何消息") { - pageIndex = 0 - dataBeans = DataBaseManager.instance.queryMessageByPage(userId, pageIndex) - weakReferenceHandler.sendEmptyMessage(2022082301) + pageIndex = 1 + obtainMessageListByPage() } } else { emptyView!!.hide() messageAdapter = MessageListAdapter(requireContext(), dataBeans) - messageRecyclerView.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) messageRecyclerView.adapter = messageAdapter messageAdapter.setOnItemClickListener(object : MessageListAdapter.OnItemClickListener { override fun onDeleteClicked(position: Int) { -// DataBaseManager.instance.deleteLocaleMessageById( -// userId, dataBeans[position].messageId -// ) -// dataBeans.removeAt(position) -// messageAdapter.notifyItemRemoved(position) -// messageAdapter.notifyItemRangeChanged( -// position, dataBeans.size - position -// ) + messageViewModel.deleteMessageById(dataBeans[position].id) + dataBeans.removeAt(position) + messageAdapter.notifyItemRemoved(position) + messageAdapter.notifyItemRangeChanged( + position, dataBeans.size - position + ) } override fun onShowMoreClicked(position: Int) { diff --git a/app/src/main/java/com/casic/br/greendao/DaoMaster.java b/app/src/main/java/com/casic/br/greendao/DaoMaster.java deleted file mode 100644 index 05390e0..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoMaster.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.greendao; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteDatabase.CursorFactory; -import android.util.Log; - -import org.greenrobot.greendao.AbstractDaoMaster; -import org.greenrobot.greendao.database.StandardDatabase; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseOpenHelper; -import org.greenrobot.greendao.identityscope.IdentityScopeType; - - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * Master of DAO (schema version 1): knows all DAOs. - */ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(Database db, boolean ifNotExists) { - LocaleMessageBeanDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(Database db, boolean ifExists) { - LocaleMessageBeanDao.dropTable(db, ifExists); - } - - /** - * WARNING: Drops all table on Upgrade! Use only during development. - * Convenience method using a {@link DevOpenHelper}. - */ - public static DaoSession newDevSession(Context context, String name) { - Database db = new DevOpenHelper(context, name).getWritableDb(); - DaoMaster daoMaster = new DaoMaster(db); - return daoMaster.newSession(); - } - - public DaoMaster(SQLiteDatabase db) { - this(new StandardDatabase(db)); - } - - public DaoMaster(Database db) { - super(db, SCHEMA_VERSION); - registerDaoClass(LocaleMessageBeanDao.class); - } - - public DaoSession newSession() { - return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); - } - - public DaoSession newSession(IdentityScopeType type) { - return new DaoSession(db, type, daoConfigMap); - } - - /** - * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} - - */ - public static abstract class OpenHelper extends DatabaseOpenHelper { - public OpenHelper(Context context, String name) { - super(context, name, SCHEMA_VERSION); - } - - public OpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory, SCHEMA_VERSION); - } - - @Override - public void onCreate(Database db) { - Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); - createAllTables(db, false); - } - } - - /** WARNING: Drops all table on Upgrade! Use only during development. */ - public static class DevOpenHelper extends OpenHelper { - public DevOpenHelper(Context context, String name) { - super(context, name); - } - - public DevOpenHelper(Context context, String name, CursorFactory factory) { - super(context, name, factory); - } - - @Override - public void onUpgrade(Database db, int oldVersion, int newVersion) { - Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); - dropAllTables(db, true); - onCreate(db); - } - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/DaoSession.java b/app/src/main/java/com/casic/br/greendao/DaoSession.java deleted file mode 100644 index 18d2242..0000000 --- a/app/src/main/java/com/casic/br/greendao/DaoSession.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.casic.br.greendao; - -import java.util.Map; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.AbstractDaoSession; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.identityscope.IdentityScopeType; -import org.greenrobot.greendao.internal.DaoConfig; - -import com.casic.br.model.LocaleMessageBean; - -import com.casic.br.greendao.LocaleMessageBeanDao; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * {@inheritDoc} - * - * @see org.greenrobot.greendao.AbstractDaoSession - */ -public class DaoSession extends AbstractDaoSession { - - private final DaoConfig localeMessageBeanDaoConfig; - - private final LocaleMessageBeanDao localeMessageBeanDao; - - public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - - localeMessageBeanDaoConfig = daoConfigMap.get(LocaleMessageBeanDao.class).clone(); - localeMessageBeanDaoConfig.initIdentityScope(type); - - localeMessageBeanDao = new LocaleMessageBeanDao(localeMessageBeanDaoConfig, this); - - registerDao(LocaleMessageBean.class, localeMessageBeanDao); - } - - public void clear() { - localeMessageBeanDaoConfig.clearIdentityScope(); - } - - public LocaleMessageBeanDao getLocaleMessageBeanDao() { - return localeMessageBeanDao; - } - -} diff --git a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java b/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java deleted file mode 100644 index f41353a..0000000 --- a/app/src/main/java/com/casic/br/greendao/LocaleMessageBeanDao.java +++ /dev/null @@ -1,199 +0,0 @@ -package com.casic.br.greendao; - -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; - -import org.greenrobot.greendao.AbstractDao; -import org.greenrobot.greendao.Property; -import org.greenrobot.greendao.internal.DaoConfig; -import org.greenrobot.greendao.database.Database; -import org.greenrobot.greendao.database.DatabaseStatement; - -import com.casic.br.model.LocaleMessageBean; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. -/** - * DAO for table "LOCALE_MESSAGE_BEAN". -*/ -public class LocaleMessageBeanDao extends AbstractDao { - - public static final String TABLENAME = "LOCALE_MESSAGE_BEAN"; - - /** - * Properties of entity LocaleMessageBean.
- * Can be used for QueryBuilder and for referencing column names. - */ - public static class Properties { - public final static Property Id = new Property(0, Long.class, "id", true, "_id"); - public final static Property MessageId = new Property(1, String.class, "messageId", false, "MESSAGE_ID"); - public final static Property UserId = new Property(2, String.class, "userId", false, "USER_ID"); - public final static Property Title = new Property(3, String.class, "title", false, "TITLE"); - public final static Property Content = new Property(4, String.class, "content", false, "CONTENT"); - public final static Property MessageTime = new Property(5, String.class, "messageTime", false, "MESSAGE_TIME"); - public final static Property IsRead = new Property(6, String.class, "isRead", false, "IS_READ"); - } - - - public LocaleMessageBeanDao(DaoConfig config) { - super(config); - } - - public LocaleMessageBeanDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - } - - /** Creates the underlying database table. */ - public static void createTable(Database db, boolean ifNotExists) { - String constraint = ifNotExists? "IF NOT EXISTS ": ""; - db.execSQL("CREATE TABLE " + constraint + "\"LOCALE_MESSAGE_BEAN\" (" + // - "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id - "\"MESSAGE_ID\" TEXT UNIQUE ," + // 1: messageId - "\"USER_ID\" TEXT," + // 2: userId - "\"TITLE\" TEXT," + // 3: title - "\"CONTENT\" TEXT," + // 4: content - "\"MESSAGE_TIME\" TEXT," + // 5: messageTime - "\"IS_READ\" TEXT);"); // 6: isRead - } - - /** Drops the underlying database table. */ - public static void dropTable(Database db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"LOCALE_MESSAGE_BEAN\""; - db.execSQL(sql); - } - - @Override - protected final void bindValues(DatabaseStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - protected final void bindValues(SQLiteStatement stmt, LocaleMessageBean entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - - String messageId = entity.getMessageId(); - if (messageId != null) { - stmt.bindString(2, messageId); - } - - String userId = entity.getUserId(); - if (userId != null) { - stmt.bindString(3, userId); - } - - String title = entity.getTitle(); - if (title != null) { - stmt.bindString(4, title); - } - - String content = entity.getContent(); - if (content != null) { - stmt.bindString(5, content); - } - - String messageTime = entity.getMessageTime(); - if (messageTime != null) { - stmt.bindString(6, messageTime); - } - - String isRead = entity.getIsRead(); - if (isRead != null) { - stmt.bindString(7, isRead); - } - } - - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - @Override - public LocaleMessageBean readEntity(Cursor cursor, int offset) { - LocaleMessageBean entity = new LocaleMessageBean( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // messageId - cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // userId - cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // title - cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // content - cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // messageTime - cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6) // isRead - ); - return entity; - } - - @Override - public void readEntity(Cursor cursor, LocaleMessageBean entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setMessageId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1)); - entity.setUserId(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); - entity.setTitle(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3)); - entity.setContent(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4)); - entity.setMessageTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); - entity.setIsRead(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); - } - - @Override - protected final Long updateKeyAfterInsert(LocaleMessageBean entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - @Override - public Long getKey(LocaleMessageBean entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - @Override - public boolean hasKey(LocaleMessageBean entity) { - return entity.getId() != null; - } - - @Override - protected final boolean isEntityUpdateable() { - return true; - } - -} diff --git a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java b/app/src/main/java/com/casic/br/model/LocaleMessageBean.java deleted file mode 100644 index 1341da6..0000000 --- a/app/src/main/java/com/casic/br/model/LocaleMessageBean.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.casic.br.model; - -import org.greenrobot.greendao.annotation.Entity; -import org.greenrobot.greendao.annotation.Generated; -import org.greenrobot.greendao.annotation.Id; -import org.greenrobot.greendao.annotation.Unique; - -@Entity -public class LocaleMessageBean { - @Id(autoincrement = true) - private Long id;//主键自增 - - @Unique - private String messageId; - private String userId; - private String title; - private String content; - private String messageTime; - private String isRead;//0-未读,1-已读 - - @Generated(hash = 22572871) - public LocaleMessageBean(Long id, String messageId, String userId, String title, - String content, String messageTime, String isRead) { - this.id = id; - this.messageId = messageId; - this.userId = userId; - this.title = title; - this.content = content; - this.messageTime = messageTime; - this.isRead = isRead; - } - - @Generated(hash = 1114477439) - public LocaleMessageBean() { - } - - public Long getId() { - return this.id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessageId() { - return this.messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getUserId() { - return this.userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return this.content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getMessageTime() { - return this.messageTime; - } - - public void setMessageTime(String messageTime) { - this.messageTime = messageTime; - } - - public String getIsRead() { - return this.isRead; - } - - public void setIsRead(String isRead) { - this.isRead = isRead; - } -} diff --git a/app/src/main/java/com/casic/br/model/PushMessageModel.java b/app/src/main/java/com/casic/br/model/PushMessageModel.java new file mode 100644 index 0000000..f6aed42 --- /dev/null +++ b/app/src/main/java/com/casic/br/model/PushMessageModel.java @@ -0,0 +1,157 @@ +package com.casic.br.model; + +import java.util.List; + +public class PushMessageModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String createTime; + private String id; + private String ids; + private String messageCode; + private String messageContent; + private String messageTitle; + private String provinceList; + private String targetUsers; + private String updateTime; + private String userFlag; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + + public String getMessageCode() { + return messageCode; + } + + public void setMessageCode(String messageCode) { + this.messageCode = messageCode; + } + + public String getMessageContent() { + return messageContent; + } + + public void setMessageContent(String messageContent) { + this.messageContent = messageContent; + } + + public String getMessageTitle() { + return messageTitle; + } + + public void setMessageTitle(String messageTitle) { + this.messageTitle = messageTitle; + } + + public String getProvinceList() { + return provinceList; + } + + public void setProvinceList(String provinceList) { + this.provinceList = provinceList; + } + + public String getTargetUsers() { + return targetUsers; + } + + public void setTargetUsers(String targetUsers) { + this.targetUsers = targetUsers; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUserFlag() { + return userFlag; + } + + public void setUserFlag(String userFlag) { + this.userFlag = userFlag; + } + } + } +} diff --git a/app/src/main/java/com/casic/br/service/PushIntentService.kt b/app/src/main/java/com/casic/br/service/PushIntentService.kt index 051f9b6..5035789 100644 --- a/app/src/main/java/com/casic/br/service/PushIntentService.kt +++ b/app/src/main/java/com/casic/br/service/PushIntentService.kt @@ -2,6 +2,7 @@ import android.content.Context import android.util.Log +import com.casic.br.fragment.MessagePageFragment import com.casic.br.utils.LocaleConstant import com.igexin.sdk.GTIntentService import com.igexin.sdk.message.GTCmdMessage @@ -41,35 +42,11 @@ // 通知到达 override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) { - //报警 -// { -// "content": "设备编号[412022030361]发生井盖开盖报警", -// "messageId": "380abf9a79d34306a2683dc9bf96ee78", -// "taskId": "OSL-0830_4hmfimp3Vu684wo3SjXso9", -// "title": "告警提醒", -// "appid": "HKv8K9qARd6WckZ1o2Vbu4", -// "clientId": "e78beacc42e9a02ae6fb9087eb2b1171", -// "pkgName": "com.casic.app.smartwell" -// } if (msg == null) { return } Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}") -// val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String -// var userId = "" -// if (userDetailJson.isNotBlank()) { -// val userDataModel = Gson().fromJson( -// userDetailJson, object : TypeToken() {}.type -// ) -// userId = userDataModel.id.toString() -// } -// //解析编号 -// val splitArray = msg.content.split("\\[|\\]".toRegex()) -// DataBaseManager.instance.insertNotice( -// msg.messageId, msg.appid, msg.clientId, msg.taskId, -// userId, msg.title, msg.content, splitArray[1], "0", -// System.currentTimeMillis().timestampToCompleteDate() -// ) + MessagePageFragment.weakReferenceHandler.sendEmptyMessage(2022101001) } // 通知点击 diff --git a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt b/app/src/main/java/com/casic/br/utils/DataBaseManager.kt deleted file mode 100644 index 3918b77..0000000 --- a/app/src/main/java/com/casic/br/utils/DataBaseManager.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.casic.br.utils - -import com.casic.br.base.BaseApplication -import com.casic.br.greendao.LocaleMessageBeanDao -import com.casic.br.model.LocaleMessageBean - -class DataBaseManager private constructor() { - - companion object { - //Kotlin委托模式双重锁单例 - val instance: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - DataBaseManager() - } - } - - private val beanDao = BaseApplication.obtainInstance().obtainDaoSession().localeMessageBeanDao - - fun insertLocaleMessage( - messageId: String, userId: String, title: String, - content: String, isRead: String, messageTime: String - ) { - val messageBean = LocaleMessageBean() - messageBean.messageId = messageId - messageBean.userId = userId - messageBean.title = title - messageBean.content = content - messageBean.isRead = isRead - messageBean.messageTime = messageTime - beanDao.insert(messageBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun deleteLocaleMessageById(userId: String, messageId: String) { - val result = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).list() - beanDao.deleteInTx(result) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - fun updateLocaleMessageById(userId: String, messageId: String) { - val noticeLocaleBean = beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.MessageId.eq(messageId) - ).unique() ?: return - noticeLocaleBean.isRead = "1" - beanDao.update(noticeLocaleBean) - //角标设置 - BadeHelper.setBadgeNum(BaseApplication.obtainInstance(), queryUnReadMessage()) - } - - - fun queryMessageByPage(userId: String, offset: Int): MutableList { - return BaseApplication.obtainInstance().obtainDaoSession() - .queryBuilder(LocaleMessageBean::class.java) - .where(LocaleMessageBeanDao.Properties.UserId.eq(userId)) - .offset(offset * LocaleConstant.PAGE_LIMIT) - .orderDesc(LocaleMessageBeanDao.Properties.MessageTime) - .limit(LocaleConstant.PAGE_LIMIT) - .list() - } - - private fun queryUnReadMessage(): Int { - return beanDao.queryBuilder().where( - LocaleMessageBeanDao.Properties.IsRead.eq("0") - ).list().size - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt index 510bca0..19e036a 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt @@ -63,7 +63,9 @@ @POST("/appAddressInfo/listPage") suspend fun obtainAddressListByPage( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -90,7 +92,9 @@ @POST("/appBannerInfo/listPage") suspend fun obtainBanner( @Header("token") token: String, - @Body requestBody: RequestBody + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map ): String /** @@ -110,4 +114,24 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 推送消息列表 + */ + @POST("/appPushInfo/listPage") + suspend fun obtainMessageListByPage( + @Header("token") token: String, + @Body requestBody: RequestBody, + @QueryMap limit: Map, + @QueryMap offset: Map + ): String + + /** + * Banner + */ + @POST("/appPushInfo/delete") + suspend fun deleteMessageById( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt index 7dff2a3..acb5464 100644 --- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt @@ -145,12 +145,17 @@ paramObject.put("province", province) paramObject.put("city", city) paramObject.put("area", area) - paramObject.put("limit", LocaleConstant.PAGE_LIMIT) - paramObject.put("offset", offset) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainAddressListByPage(AuthenticationHelper.token!!, requestBody) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainAddressListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) } /** @@ -191,14 +196,19 @@ /** * Banner */ - suspend fun obtainBanner(): String { + suspend fun obtainBanner(bannerName: String): String { val paramObject = JSONObject() - paramObject.put("limit", 5) - paramObject.put("offset", 1) + paramObject.put("bannerName", bannerName) val requestBody = paramObject.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.obtainBanner(AuthenticationHelper.token!!, requestBody) + + val limitMap = HashMap() + limitMap["limit"] = 5 + + val offsetMap = HashMap() + offsetMap["offset"] = 1 + return api.obtainBanner(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap) } /** @@ -249,4 +259,39 @@ ) return api.addDevice(AuthenticationHelper.token!!, requestBody) } + + /** + * 推送消息列表 + */ + suspend fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ): String { + val paramObject = JSONObject() + paramObject.put("messageCode", messageCode) + paramObject.put("messageTitle", messageTitle) + paramObject.put("messageContent", messageContent) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + val limitMap = HashMap() + limitMap["limit"] = LocaleConstant.PAGE_LIMIT + + val offsetMap = HashMap() + offsetMap["offset"] = offset + return api.obtainMessageListByPage( + AuthenticationHelper.token!!, requestBody, limitMap, offsetMap + ) + } + + /** + * 删除消息 + */ + suspend fun deleteMessageById(id: String): String { + val paramObject = JSONObject() + paramObject.put("id", id) + val requestBody = paramObject.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.deleteMessageById(AuthenticationHelper.token!!, requestBody) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt index 9424e54..6b38073 100644 --- a/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt +++ b/app/src/main/java/com/casic/br/view/AddressManagerActivity.kt @@ -31,7 +31,6 @@ class AddressManagerActivity : KotlinBaseActivity() { private val kTag = "AddressManagerActivity" - private val context: Context = this@AddressManagerActivity private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var addressViewModel: AddressViewModel private lateinit var addressAdapter: AddressListAdapter @@ -54,6 +53,31 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(callback) addressViewModel = ViewModelProvider(this)[AddressViewModel::class.java] + addressViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + addressLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + addressLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022100901) + } + }) } override fun initEvent() { @@ -95,31 +119,6 @@ private fun obtainAddressListByPage() { addressViewModel.obtainAddressListByPage("", "", "", "", pageIndex) - addressViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - addressLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show(this) - } - dataBeans.addAll(dataRows!!) - addressLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022100901) - } - }) } private val callback = Handler.Callback { diff --git a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt index 908ed91..1d3f0ca 100644 --- a/app/src/main/java/com/casic/br/vm/BannerViewModel.kt +++ b/app/src/main/java/com/casic/br/vm/BannerViewModel.kt @@ -17,8 +17,8 @@ private val gson by lazy { Gson() } val listModel = MutableLiveData() - fun obtainBanner() = launch({ - val response = RetrofitServiceManager.obtainBanner() + fun obtainBanner(bannerName: String) = launch({ + val response = RetrofitServiceManager.obtainBanner(bannerName) val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson( diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt new file mode 100644 index 0000000..95cdc00 --- /dev/null +++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt @@ -0,0 +1,47 @@ +package com.casic.br.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.br.base.BaseApplication +import com.casic.br.extensions.separateResponseCode +import com.casic.br.extensions.toErrorMessage +import com.casic.br.model.PushMessageModel +import com.casic.br.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class MessageViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val listModel = MutableLiveData() + + fun obtainMessageListByPage( + messageCode: String, messageTitle: String, messageContent: String, offset: Int + ) = launch({ + val response = RetrofitServiceManager.obtainMessageListByPage( + messageCode, messageTitle, messageContent, offset + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + + fun deleteMessageById(id: String) = launch({ + val response = RetrofitServiceManager.deleteMessageById(id) + val responseCode = response.separateResponseCode() + if (responseCode != 200) { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alarm_tag.xml b/app/src/main/res/drawable/ic_alarm_tag.xml new file mode 100644 index 0000000..8650128 --- /dev/null +++ b/app/src/main/res/drawable/ic_alarm_tag.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index d127909..3882e70 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -12,8 +12,6 @@ diff --git a/app/src/main/res/layout/item_message_rv.xml b/app/src/main/res/layout/item_message_rv.xml deleted file mode 100644 index 56535be..0000000 --- a/app/src/main/res/layout/item_message_rv.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_message_rv_l.xml b/app/src/main/res/layout/item_message_rv_l.xml new file mode 100644 index 0000000..27201df --- /dev/null +++ b/app/src/main/res/layout/item_message_rv_l.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index d050df1..6e56ec5 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,6 @@ dependencies { classpath 'com.android.tools.build:gradle:3.6.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files