diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index 04dfe66..cc3be43 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class InHandleOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var inHandleAdapter: InHandleOrderAdapter @@ -32,23 +37,25 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_in_handle override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + /*** + * 监听来自待确认和处理中两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +82,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033002) + weakReferenceHandler.sendEmptyMessage(2022033002) } }) @@ -117,55 +124,56 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_IN_HANDLE -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033002 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.inHandleAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.inHandleAdapter = InHandleOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.inHandleView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.inHandleView!!.adapter = fragment.inHandleAdapter - fragment.inHandleAdapter.setOnItemClickListener(object : - InHandleOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - InHandleDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033002) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.inHandleAdapter = InHandleOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.inHandleView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.inHandleView!!.adapter = fragment.inHandleAdapter + fragment.inHandleAdapter.setOnItemClickListener(object : + InHandleOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + InHandleDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index 04dfe66..cc3be43 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class InHandleOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var inHandleAdapter: InHandleOrderAdapter @@ -32,23 +37,25 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_in_handle override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + /*** + * 监听来自待确认和处理中两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +82,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033002) + weakReferenceHandler.sendEmptyMessage(2022033002) } }) @@ -117,55 +124,56 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_IN_HANDLE -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033002 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.inHandleAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.inHandleAdapter = InHandleOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.inHandleView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.inHandleView!!.adapter = fragment.inHandleAdapter - fragment.inHandleAdapter.setOnItemClickListener(object : - InHandleOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - InHandleDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033002) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.inHandleAdapter = InHandleOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.inHandleView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.inHandleView!!.adapter = fragment.inHandleAdapter + fragment.inHandleAdapter.setOnItemClickListener(object : + InHandleOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + InHandleDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt index e893166..271428e 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState @@ -45,6 +49,16 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_ACCEPT_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -84,11 +98,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //接单成功之后刷新数据 - isRefresh = true - pageIndex = 1 - obtainWorkOrderList(pageIndex) - //通知列表刷行数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_ACCEPT_ACTION, Constant.NOT_CONFIRMED_ACTION + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -183,4 +195,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_ACCEPT_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index 04dfe66..cc3be43 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class InHandleOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var inHandleAdapter: InHandleOrderAdapter @@ -32,23 +37,25 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_in_handle override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + /*** + * 监听来自待确认和处理中两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +82,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033002) + weakReferenceHandler.sendEmptyMessage(2022033002) } }) @@ -117,55 +124,56 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_IN_HANDLE -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033002 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.inHandleAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.inHandleAdapter = InHandleOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.inHandleView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.inHandleView!!.adapter = fragment.inHandleAdapter - fragment.inHandleAdapter.setOnItemClickListener(object : - InHandleOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - InHandleDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033002) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.inHandleAdapter = InHandleOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.inHandleView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.inHandleView!!.adapter = fragment.inHandleAdapter + fragment.inHandleAdapter.setOnItemClickListener(object : + InHandleOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + InHandleDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt index e893166..271428e 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState @@ -45,6 +49,16 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_ACCEPT_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -84,11 +98,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //接单成功之后刷新数据 - isRefresh = true - pageIndex = 1 - obtainWorkOrderList(pageIndex) - //通知列表刷行数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_ACCEPT_ACTION, Constant.NOT_CONFIRMED_ACTION + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -183,4 +195,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_ACCEPT_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt index f1b9f7f..46166cc 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.NotConfirmedDetailActivity import com.casic.app.smartwell.vm.WorkOrderListViewModel @@ -22,6 +26,7 @@ class NotConfirmedFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var notConfirmedAdapter: NotConfirmedAdapter private var dataBeans: MutableList = ArrayList() @@ -29,22 +34,24 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) + /*** + * 监听来自待处理和待确认两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -71,7 +78,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033001) + weakReferenceHandler.sendEmptyMessage(2022033001) } }) @@ -100,46 +107,47 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_DETERMINED_OK -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033001 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.notConfirmedAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.notConfirmedAdapter = NotConfirmedAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.notConfirmedView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter - fragment.notConfirmedAdapter.setOnItemClickListener(object : - NotConfirmedAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - NotConfirmedDetailActivity::class.java, jobId - ) - } - }) + if (msg.what == 2022033001) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.notConfirmedAdapter = NotConfirmedAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.notConfirmedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter + fragment.notConfirmedAdapter.setOnItemClickListener(object : + NotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + NotConfirmedDetailActivity::class.java, jobId + ) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index 04dfe66..cc3be43 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class InHandleOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var inHandleAdapter: InHandleOrderAdapter @@ -32,23 +37,25 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_in_handle override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + /*** + * 监听来自待确认和处理中两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +82,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033002) + weakReferenceHandler.sendEmptyMessage(2022033002) } }) @@ -117,55 +124,56 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_IN_HANDLE -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033002 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.inHandleAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.inHandleAdapter = InHandleOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.inHandleView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.inHandleView!!.adapter = fragment.inHandleAdapter - fragment.inHandleAdapter.setOnItemClickListener(object : - InHandleOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - InHandleDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033002) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.inHandleAdapter = InHandleOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.inHandleView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.inHandleView!!.adapter = fragment.inHandleAdapter + fragment.inHandleAdapter.setOnItemClickListener(object : + InHandleOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + InHandleDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt index e893166..271428e 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState @@ -45,6 +49,16 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_ACCEPT_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -84,11 +98,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //接单成功之后刷新数据 - isRefresh = true - pageIndex = 1 - obtainWorkOrderList(pageIndex) - //通知列表刷行数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_ACCEPT_ACTION, Constant.NOT_CONFIRMED_ACTION + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -183,4 +195,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_ACCEPT_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt index f1b9f7f..46166cc 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.NotConfirmedDetailActivity import com.casic.app.smartwell.vm.WorkOrderListViewModel @@ -22,6 +26,7 @@ class NotConfirmedFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var notConfirmedAdapter: NotConfirmedAdapter private var dataBeans: MutableList = ArrayList() @@ -29,22 +34,24 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) + /*** + * 监听来自待处理和待确认两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -71,7 +78,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033001) + weakReferenceHandler.sendEmptyMessage(2022033001) } }) @@ -100,46 +107,47 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_DETERMINED_OK -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033001 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.notConfirmedAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.notConfirmedAdapter = NotConfirmedAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.notConfirmedView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter - fragment.notConfirmedAdapter.setOnItemClickListener(object : - NotConfirmedAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - NotConfirmedDetailActivity::class.java, jobId - ) - } - }) + if (msg.what == 2022033001) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.notConfirmedAdapter = NotConfirmedAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.notConfirmedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter + fragment.notConfirmedAdapter.setOnItemClickListener(object : + NotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + NotConfirmedDetailActivity::class.java, jobId + ) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt index 8666481..52ebd30 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,8 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager +import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment @@ -37,6 +42,16 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_HANDLE_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -127,4 +142,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_HANDLE_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..2c90112 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.app.smartwell.utils + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.util.Log +import com.casic.app.smartwell.base.BaseApplication +import java.util.* + +class BroadcastReceiverManager() { + private val kTag = "ReceiverManager" + private var context: Context = BaseApplication.obtainInstance() + private var receiverMap: MutableMap = HashMap() + + /** + * 双重锁懒汉式单例 + */ + companion object { + val instance: BroadcastReceiverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + BroadcastReceiverManager() + } + } + + /** + * 添加单个Action,广播的初始化 + */ + fun addAction(action: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + filter.addAction(action) + context.registerReceiver(receiver, filter) + receiverMap[action] = receiver + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 添加多个Action,广播的初始化 + */ + fun addAction(vararg actions: String, receiver: BroadcastReceiver) { + try { + val filter = IntentFilter() + for (action in actions) { + filter.addAction(action) + receiverMap[action] = receiver + } + context.registerReceiver(receiver, filter) + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送单个广播 + * + * @param action 唯一码 + * @param msg 参数 + */ + fun sendBroadcast(action: String, msg: String) { + try { + val intent = Intent() + intent.action = action + intent.putExtra("data", msg) + context.sendBroadcast(intent) + Log.d(kTag, "sendBroadcast: $msg") + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 发送多个无参广播 + * + * @param actions 唯一码 + */ + fun sendMultiBroadcast(vararg actions: String) { + try { + for (action in actions) { + sendBroadcast(action, "") + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 销毁广播 + * + * @param actions action集合 + */ + fun destroy(vararg actions: String) { + try { + for (action in actions) { + val receiver = receiverMap[action] + if (receiver != null) { + context.unregisterReceiver(receiver) + } + } + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index da81e2a..a9f0ed1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -31,10 +31,6 @@ const val DISTANCE = 3 const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TODO_OK = 21 - const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 - const val ORDER_IN_HANDLE = 23//工单处理中 - const val ORDER_COMPLETED = 24//工单已完成 const val ACCOUNT = "account" const val PASSWORD = "password" @@ -43,6 +39,16 @@ const val INTENT_PARAM = "intentParam" const val APP_AUTHORITY = "com.casic.app.smartwell.fileprovider" + //普通工单 + const val NOT_PROCESSED_ACTION = "notProcessed" + const val NOT_CONFIRMED_ACTION = "notConfirmed" + const val IN_HANDLE_ACTION = "inHandle" + const val COMPLETED_ACTION = "completed" + + //超时工单 + const val NOT_ACCEPT_ACTION = "inHandle" + const val NOT_HANDLE_ACTION = "completed" + val HOME_ICONS = arrayOf(R.drawable.ic_well, R.drawable.ic_overtime, R.drawable.ic_bfcf) val HOME_ITEMS = arrayOf("闸井管理", "超时工单", "布防撤防") val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成") diff --git a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt index 1166fb3..74647f5 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/InHandleDetailActivity.kt @@ -15,8 +15,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -339,8 +337,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + /** + * 转单需要刷新处理中和超时未处理的列表 + * */ + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { @@ -358,8 +360,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.IN_HANDLE_ACTION, + Constant.COMPLETED_ACTION, + Constant.NOT_HANDLE_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt index 59c4d57..86cd3c8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotConfirmedDetailActivity.kt @@ -14,9 +14,6 @@ import com.casic.app.smartwell.base.BaseActivity import com.casic.app.smartwell.extensions.* import com.casic.app.smartwell.utils.* -import com.casic.app.smartwell.view.fragment.CompletedOrderFragment -import com.casic.app.smartwell.view.fragment.InHandleOrderFragment -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment import com.casic.app.smartwell.vm.* import com.casic.app.smartwell.widgets.SingleChoiceDialog import com.casic.app.smartwell.widgets.TimeLineBottomSheet @@ -306,8 +303,12 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 转单只需要刷新待确认列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) this.finish() } else -> { @@ -324,12 +325,22 @@ } is LoadState.Success -> { DialogHelper.dismissLoadingDialog() - //通知列表刷新数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + /** + * 确认工单首先需要刷新待确认列表 + * 1、如果是提交工单,选择正常,需要刷新已完成列表 + * 2、如果是提交工单,选择异常,需要刷新处理中列表 + * */ + BroadcastReceiverManager.instance.sendBroadcast( + Constant.NOT_CONFIRMED_ACTION, "" + ) if (needHandle == "0") { - CompletedOrderFragment.sendEmptyMessage(Constant.ORDER_COMPLETED) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.COMPLETED_ACTION, "" + ) } else { - InHandleOrderFragment.sendEmptyMessage(Constant.ORDER_IN_HANDLE) + BroadcastReceiverManager.instance.sendBroadcast( + Constant.IN_HANDLE_ACTION, "" + ) } this.finish() } diff --git a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt index 6d24c0c..46653e7 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/NotProcessedDetailActivity.kt @@ -11,11 +11,10 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showRouteOnMap import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState -import com.casic.app.smartwell.view.fragment.NotConfirmedFragment -import com.casic.app.smartwell.view.fragment.NotProcessedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -159,8 +158,11 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //通知列表刷新数据 - NotProcessedFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, + Constant.NOT_CONFIRMED_ACTION, + Constant.NOT_ACCEPT_ACTION + ) this.finish() } else -> { diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index 2ea01e7..a243c00 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.CompletedDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class CompletedOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var completedAdapter: CompletedOrderAdapter @@ -32,23 +37,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_completed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.COMPLETED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +79,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033101) + weakReferenceHandler.sendEmptyMessage(2022033101) } }) @@ -117,55 +121,54 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_COMPLETED -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033101 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.completedAdapter.notifyDataSetChanged() - } else { - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.completedAdapter = CompletedOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.completedOrderView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.completedOrderView!!.adapter = fragment.completedAdapter - fragment.completedAdapter.setOnItemClickListener(object : - CompletedOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - CompletedDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033101) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.completedAdapter.notifyDataSetChanged() + } else { + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("您还没有处理完成过任何工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.completedAdapter = CompletedOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.completedOrderView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.completedOrderView!!.adapter = fragment.completedAdapter + fragment.completedAdapter.setOnItemClickListener(object : + CompletedOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + CompletedDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index 04dfe66..cc3be43 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -24,6 +28,7 @@ class InHandleOrderFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var inHandleAdapter: InHandleOrderAdapter @@ -32,23 +37,25 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_in_handle override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + /*** + * 监听来自待确认和处理中两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -75,7 +82,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033002) + weakReferenceHandler.sendEmptyMessage(2022033002) } }) @@ -117,55 +124,56 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_IN_HANDLE -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033002 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.inHandleAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.inHandleAdapter = InHandleOrderAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.inHandleView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.inHandleView!!.adapter = fragment.inHandleAdapter - fragment.inHandleAdapter.setOnItemClickListener(object : - InHandleOrderAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - InHandleDetailActivity::class.java, jobId - ) - } - - override fun onTransferViewClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) - return - } - fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) - } - }) + if (msg.what == 2022033002) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.inHandleAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("真不错,您已经处理完所有工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.inHandleAdapter = InHandleOrderAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.inHandleView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.inHandleView!!.adapter = fragment.inHandleAdapter + fragment.inHandleAdapter.setOnItemClickListener(object : + InHandleOrderAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + InHandleDetailActivity::class.java, jobId + ) + } + + override fun onTransferViewClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看工单流转记录".show(fragment.requireContext()) + return + } + fragment.workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_CONFIRMED_ACTION, Constant.IN_HANDLE_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt index e893166..271428e 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotAcceptFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState @@ -45,6 +49,16 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_ACCEPT_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -84,11 +98,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //接单成功之后刷新数据 - isRefresh = true - pageIndex = 1 - obtainWorkOrderList(pageIndex) - //通知列表刷行数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_ACCEPT_ACTION, Constant.NOT_CONFIRMED_ACTION + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -183,4 +195,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_ACCEPT_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt index f1b9f7f..46166cc 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotConfirmedFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.NotConfirmedDetailActivity import com.casic.app.smartwell.vm.WorkOrderListViewModel @@ -22,6 +26,7 @@ class NotConfirmedFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var notConfirmedAdapter: NotConfirmedAdapter private var dataBeans: MutableList = ArrayList() @@ -29,22 +34,24 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) + /*** + * 监听来自待处理和待确认两个列表数据变化的Action + * */ + BroadcastReceiverManager.instance.addAction( + actions = arrayOf(Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION), + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -71,7 +78,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022033001) + weakReferenceHandler.sendEmptyMessage(2022033001) } }) @@ -100,46 +107,47 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_DETERMINED_OK -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022033001 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.notConfirmedAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.notConfirmedAdapter = NotConfirmedAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.notConfirmedView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter - fragment.notConfirmedAdapter.setOnItemClickListener(object : - NotConfirmedAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - NotConfirmedDetailActivity::class.java, jobId - ) - } - }) + if (msg.what == 2022033001) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.notConfirmedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("没有需要您确认的工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.notConfirmedAdapter = NotConfirmedAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.notConfirmedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.notConfirmedView!!.adapter = fragment.notConfirmedAdapter + fragment.notConfirmedAdapter.setOnItemClickListener(object : + NotConfirmedAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + NotConfirmedDetailActivity::class.java, jobId + ) + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy( + Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt index 8666481..52ebd30 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotHandleFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,8 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager +import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.view.InHandleDetailActivity import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment @@ -37,6 +42,16 @@ override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_HANDLE_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -127,4 +142,10 @@ } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_HANDLE_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotProcessedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotProcessedFragment.kt index e02f1e9..2b34428 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/NotProcessedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/NotProcessedFragment.kt @@ -1,6 +1,9 @@ package com.casic.app.smartwell.view.fragment import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -12,6 +15,7 @@ import com.casic.app.smartwell.extensions.show import com.casic.app.smartwell.extensions.showEmptyPage import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.BroadcastReceiverManager import com.casic.app.smartwell.utils.Constant import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState @@ -26,6 +30,7 @@ class NotProcessedFragment : BaseFragment() { + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel private lateinit var workOrderListAdapter: NotProcessedListAdapter @@ -34,23 +39,22 @@ private var isRefresh = false private var isLoadMore = false - companion object { - private var weakReferenceHandler: WeakReferenceHandler? = null - - fun sendEmptyMessage(what: Int) { - if (weakReferenceHandler == null) { - return - } - weakReferenceHandler!!.sendEmptyMessage(what) - } - } - override fun initLayoutView(): Int = R.layout.fragment_order_not_processed override fun initData() { weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.NOT_PROCESSED_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + }) } override fun initEvent() { @@ -77,7 +81,7 @@ dataBeans = dataRows!! } } - weakReferenceHandler!!.sendEmptyMessage(2022032901) + weakReferenceHandler.sendEmptyMessage(2022032901) } }) @@ -90,11 +94,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() //接单成功之后刷新数据 - isRefresh = true - pageIndex = 1 - obtainWorkOrderList(pageIndex) - //通知列表刷行数据 - NotConfirmedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) + BroadcastReceiverManager.instance.sendMultiBroadcast( + Constant.NOT_PROCESSED_ACTION, Constant.NOT_CONFIRMED_ACTION + ) } else -> { DialogHelper.dismissLoadingDialog() @@ -127,71 +129,70 @@ override fun handleMessage(msg: Message) { super.handleMessage(msg) val fragment = reference.get()!! - when (msg.what) { - Constant.ORDER_TODO_OK -> { - fragment.isRefresh = true - fragment.pageIndex = 1 - fragment.obtainWorkOrderList(fragment.pageIndex) - } - 2022032901 -> { - if (fragment.isRefresh || fragment.isLoadMore) { - fragment.workOrderListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (fragment.dataBeans.size == 0) { - fragment.emptyView!!.showEmptyPage("没有需要您处理的工单") { - fragment.obtainWorkOrderList(fragment.pageIndex) - } - } else { - fragment.emptyView!!.hide() - fragment.workOrderListAdapter = NotProcessedListAdapter( - fragment.requireContext(), - fragment.dataBeans - ) - fragment.notProcessedView!!.layoutManager = - LinearLayoutManager(fragment.requireContext()) - fragment.notProcessedView!!.adapter = fragment.workOrderListAdapter - fragment.workOrderListAdapter.setOnItemClickListener(object : - NotProcessedListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val jobId = fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单编号异常,无法查看详情".show(fragment.requireContext()) - return - } - fragment.requireContext().navigatePageTo( - NotProcessedDetailActivity::class.java, jobId - ) - } - - override fun onOperationClicked(position: Int) { - AlertControlDialog.Builder() - .setContext(fragment.requireContext()) - .setTitle("操作提示") - .setMessage("确定要接单吗") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - val jobId = - fragment.dataBeans[position].jobId.toString() - if (jobId.isBlank()) { - "工单ID异常,无法接单".show(fragment.requireContext()) - return - } - fragment.acceptOrderViewModel.acceptWorkOrder(id = jobId) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) + if (msg.what == 2022032901) { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.workOrderListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.showEmptyPage("没有需要您处理的工单") { + fragment.obtainWorkOrderList(fragment.pageIndex) } + } else { + fragment.emptyView!!.hide() + fragment.workOrderListAdapter = NotProcessedListAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.notProcessedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.notProcessedView!!.adapter = fragment.workOrderListAdapter + fragment.workOrderListAdapter.setOnItemClickListener(object : + NotProcessedListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext().navigatePageTo( + NotProcessedDetailActivity::class.java, jobId + ) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(fragment.requireContext()) + .setTitle("操作提示") + .setMessage("确定要接单吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val jobId = + fragment.dataBeans[position].jobId.toString() + if (jobId.isBlank()) { + "工单ID异常,无法接单".show(fragment.requireContext()) + return + } + fragment.acceptOrderViewModel.acceptWorkOrder(id = jobId) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) } } } } } + + override fun onDestroyView() { + super.onDestroyView() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.NOT_PROCESSED_ACTION) + } } \ No newline at end of file