diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt new file mode 100644 index 0000000..be41fbf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -0,0 +1,129 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.show +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.dialog_cancel_alarm.* + +class CancelAlarmDialog private constructor(builder: Builder) : Dialog( + builder.context!!, R.style.UserDefinedDialogStyle +) { + + private val ctx: Context? = builder.context + private val title: String? = builder.title + private val hintMessage: String? = builder.hintMessage + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener? = builder.listener + + class Builder { + var context: Context? = null + var title: String? = null + var hintMessage: String? = null + lateinit var negativeBtn: String + lateinit var positiveBtn: String + var listener: OnDialogButtonClickListener? = null + + fun setContext(context: Context?): Builder { + this.context = context + return this + } + + fun setTitle(title: String?): Builder { + this.title = title + return this + } + + fun setHintMessage(message: String?): Builder { + this.hintMessage = message + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + this.listener = listener + return this + } + + fun build(): CancelAlarmDialog { + return CancelAlarmDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configDialogLayout() + setContentView(R.layout.dialog_cancel_alarm) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.toString().isNotBlank()) { + dialogTitleView.text = title + } + + if (hintMessage.toString().isNotBlank()) { + dialogInputView.hint = hintMessage + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + if (listener != null) { + listener.onCancelClick() + this.dismiss() + } + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + if (listener != null) { + val spinnerValue = operationSpinner.selectedItem.toString() + if (spinnerValue == "请选择") { + "消警原因必选".show() + return@setOnClickListener + } + val inputValue = dialogInputView.text.toString().trim() + if (inputValue.isBlank()) { + "备注不得为空".show() + return@setOnClickListener + } + listener.onConfirmClick(spinnerValue, inputValue) + this.dismiss() + } + } + } + + private fun configDialogLayout() { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(Gravity.CENTER) + //设置Dialog出现的动画 + window.setWindowAnimations(R.style.UserDefinedAnimation) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(ctx) * 0.75).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(spinnerValue: String, inputValue: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt new file mode 100644 index 0000000..be41fbf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -0,0 +1,129 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.show +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.dialog_cancel_alarm.* + +class CancelAlarmDialog private constructor(builder: Builder) : Dialog( + builder.context!!, R.style.UserDefinedDialogStyle +) { + + private val ctx: Context? = builder.context + private val title: String? = builder.title + private val hintMessage: String? = builder.hintMessage + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener? = builder.listener + + class Builder { + var context: Context? = null + var title: String? = null + var hintMessage: String? = null + lateinit var negativeBtn: String + lateinit var positiveBtn: String + var listener: OnDialogButtonClickListener? = null + + fun setContext(context: Context?): Builder { + this.context = context + return this + } + + fun setTitle(title: String?): Builder { + this.title = title + return this + } + + fun setHintMessage(message: String?): Builder { + this.hintMessage = message + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + this.listener = listener + return this + } + + fun build(): CancelAlarmDialog { + return CancelAlarmDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configDialogLayout() + setContentView(R.layout.dialog_cancel_alarm) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.toString().isNotBlank()) { + dialogTitleView.text = title + } + + if (hintMessage.toString().isNotBlank()) { + dialogInputView.hint = hintMessage + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + if (listener != null) { + listener.onCancelClick() + this.dismiss() + } + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + if (listener != null) { + val spinnerValue = operationSpinner.selectedItem.toString() + if (spinnerValue == "请选择") { + "消警原因必选".show() + return@setOnClickListener + } + val inputValue = dialogInputView.text.toString().trim() + if (inputValue.isBlank()) { + "备注不得为空".show() + return@setOnClickListener + } + listener.onConfirmClick(spinnerValue, inputValue) + this.dismiss() + } + } + } + + private fun configDialogLayout() { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(Gravity.CENTER) + //设置Dialog出现的动画 + window.setWindowAnimations(R.style.UserDefinedAnimation) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(ctx) * 0.75).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(spinnerValue: String, inputValue: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_hide.xml b/app/src/main/res/anim/action_dialog_hide.xml new file mode 100644 index 0000000..119726b --- /dev/null +++ b/app/src/main/res/anim/action_dialog_hide.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt new file mode 100644 index 0000000..be41fbf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -0,0 +1,129 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.show +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.dialog_cancel_alarm.* + +class CancelAlarmDialog private constructor(builder: Builder) : Dialog( + builder.context!!, R.style.UserDefinedDialogStyle +) { + + private val ctx: Context? = builder.context + private val title: String? = builder.title + private val hintMessage: String? = builder.hintMessage + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener? = builder.listener + + class Builder { + var context: Context? = null + var title: String? = null + var hintMessage: String? = null + lateinit var negativeBtn: String + lateinit var positiveBtn: String + var listener: OnDialogButtonClickListener? = null + + fun setContext(context: Context?): Builder { + this.context = context + return this + } + + fun setTitle(title: String?): Builder { + this.title = title + return this + } + + fun setHintMessage(message: String?): Builder { + this.hintMessage = message + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + this.listener = listener + return this + } + + fun build(): CancelAlarmDialog { + return CancelAlarmDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configDialogLayout() + setContentView(R.layout.dialog_cancel_alarm) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.toString().isNotBlank()) { + dialogTitleView.text = title + } + + if (hintMessage.toString().isNotBlank()) { + dialogInputView.hint = hintMessage + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + if (listener != null) { + listener.onCancelClick() + this.dismiss() + } + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + if (listener != null) { + val spinnerValue = operationSpinner.selectedItem.toString() + if (spinnerValue == "请选择") { + "消警原因必选".show() + return@setOnClickListener + } + val inputValue = dialogInputView.text.toString().trim() + if (inputValue.isBlank()) { + "备注不得为空".show() + return@setOnClickListener + } + listener.onConfirmClick(spinnerValue, inputValue) + this.dismiss() + } + } + } + + private fun configDialogLayout() { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(Gravity.CENTER) + //设置Dialog出现的动画 + window.setWindowAnimations(R.style.UserDefinedAnimation) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(ctx) * 0.75).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(spinnerValue: String, inputValue: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_hide.xml b/app/src/main/res/anim/action_dialog_hide.xml new file mode 100644 index 0000000..119726b --- /dev/null +++ b/app/src/main/res/anim/action_dialog_hide.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_show.xml b/app/src/main/res/anim/action_dialog_show.xml new file mode 100644 index 0000000..1d281ef --- /dev/null +++ b/app/src/main/res/anim/action_dialog_show.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt new file mode 100644 index 0000000..be41fbf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -0,0 +1,129 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.show +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.dialog_cancel_alarm.* + +class CancelAlarmDialog private constructor(builder: Builder) : Dialog( + builder.context!!, R.style.UserDefinedDialogStyle +) { + + private val ctx: Context? = builder.context + private val title: String? = builder.title + private val hintMessage: String? = builder.hintMessage + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener? = builder.listener + + class Builder { + var context: Context? = null + var title: String? = null + var hintMessage: String? = null + lateinit var negativeBtn: String + lateinit var positiveBtn: String + var listener: OnDialogButtonClickListener? = null + + fun setContext(context: Context?): Builder { + this.context = context + return this + } + + fun setTitle(title: String?): Builder { + this.title = title + return this + } + + fun setHintMessage(message: String?): Builder { + this.hintMessage = message + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + this.listener = listener + return this + } + + fun build(): CancelAlarmDialog { + return CancelAlarmDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configDialogLayout() + setContentView(R.layout.dialog_cancel_alarm) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.toString().isNotBlank()) { + dialogTitleView.text = title + } + + if (hintMessage.toString().isNotBlank()) { + dialogInputView.hint = hintMessage + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + if (listener != null) { + listener.onCancelClick() + this.dismiss() + } + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + if (listener != null) { + val spinnerValue = operationSpinner.selectedItem.toString() + if (spinnerValue == "请选择") { + "消警原因必选".show() + return@setOnClickListener + } + val inputValue = dialogInputView.text.toString().trim() + if (inputValue.isBlank()) { + "备注不得为空".show() + return@setOnClickListener + } + listener.onConfirmClick(spinnerValue, inputValue) + this.dismiss() + } + } + } + + private fun configDialogLayout() { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(Gravity.CENTER) + //设置Dialog出现的动画 + window.setWindowAnimations(R.style.UserDefinedAnimation) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(ctx) * 0.75).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(spinnerValue: String, inputValue: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_hide.xml b/app/src/main/res/anim/action_dialog_hide.xml new file mode 100644 index 0000000..119726b --- /dev/null +++ b/app/src/main/res/anim/action_dialog_hide.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_show.xml b/app/src/main/res/anim/action_dialog_show.xml new file mode 100644 index 0000000..1d281ef --- /dev/null +++ b/app/src/main/res/anim/action_dialog_show.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml new file mode 100644 index 0000000..9389063 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt new file mode 100644 index 0000000..d8cf8d3 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/CommonResultModel.kt @@ -0,0 +1,11 @@ +package com.casic.qd.smartwell.model + +/** + * 普通实体类,失败/成功数据结构一致 + */ +class CommonResultModel { + var code = 0 + var data: String? = null + var message: String? = null + var isSuccess = false +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt new file mode 100644 index 0000000..dd88708 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/utils/BroadcastReceiverManager.kt @@ -0,0 +1,105 @@ +package com.casic.qd.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.qd.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/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index e1c1838..d73ecc1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -37,4 +37,5 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val CANCEL_ALARM_ACTION = "cancelAlarm" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 4a4d513..15c30fc 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -69,4 +69,20 @@ @Header("token") token: String, @Query("id") id: String ): String + + /** + * 消警 + * + * @param id 告警工单ID + * @param jobStatus 告警工单状态 + * @param handleMessage 处理信息 + */ + @FormUrlEncoded + @POST("/alarm/cancelAlarm") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("id") id: String, + @Field("jobStatus") jobStatus: String, + @Field("handleMessage") handleMessage: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 8679e7b..a6f4726 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -70,4 +70,15 @@ suspend fun obtainWellDetail(id: String): String { return api.obtainWellDetail(AuthenticationHelper.token!!, id) } + + /** + * 消警 + */ + suspend fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 834c00f..b0debb7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -1,6 +1,9 @@ package com.casic.qd.smartwell.view 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 @@ -13,8 +16,13 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.showEmptyPage import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.pengxh.app.multilib.widget.dialog.InputDialog +import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.widgets.CancelAlarmDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* import java.lang.ref.WeakReference @@ -23,6 +31,7 @@ class AlarmManagementActivity : BaseActivity() { private lateinit var alarmListViewModel: AlarmListViewModel + private lateinit var cancelAlarmViewModel: CancelAlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -38,7 +47,18 @@ override fun initData() { alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainAlarmList(pageIndex) + } + }) } override fun initEvent() { @@ -80,6 +100,24 @@ pageIndex++ obtainAlarmList(pageIndex) } + + cancelAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) } private fun obtainAlarmList(pageIndex: Int) { @@ -120,20 +158,38 @@ override fun onOperationClicked(position: Int) { val wellDetail = activity.dataBeans[position] - InputDialog.Builder() + CancelAlarmDialog.Builder() .setContext(activity) .setTitle("取消告警") .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("无需处理") - .setPositiveButton("已处理") + .setNegativeButton("取消") + .setPositiveButton("确定") .setOnDialogButtonClickListener(object : - InputDialog.OnDialogButtonClickListener { - override fun onConfirmClick(value: String) { - //已处理 + CancelAlarmDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + spinnerValue: String, inputValue: String + ) { + /** + * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf + * POST + * */ + val id = wellDetail.jobId + if (id.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + val jobStatus = when (spinnerValue) { + "已处理" -> "3" + "无需处理" -> "4" + else -> "" + } + activity.cancelAlarmViewModel.obtainOperationResult( + id!!, jobStatus, inputValue + ) } override fun onCancelClick() { - //无需处理 + } }).build().show() } @@ -143,4 +199,10 @@ } } } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt new file mode 100644 index 0000000..419447e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -0,0 +1,42 @@ +package com.casic.qd.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.CommonResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class CancelAlarmViewModel : BaseViewModel() { + + private val gson = Gson() + val resultModel = MutableLiveData() + + fun obtainOperationResult( + id: String, + jobStatus: String, + handleMessage: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt new file mode 100644 index 0000000..be41fbf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -0,0 +1,129 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.WindowManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.show +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.dialog_cancel_alarm.* + +class CancelAlarmDialog private constructor(builder: Builder) : Dialog( + builder.context!!, R.style.UserDefinedDialogStyle +) { + + private val ctx: Context? = builder.context + private val title: String? = builder.title + private val hintMessage: String? = builder.hintMessage + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener? = builder.listener + + class Builder { + var context: Context? = null + var title: String? = null + var hintMessage: String? = null + lateinit var negativeBtn: String + lateinit var positiveBtn: String + var listener: OnDialogButtonClickListener? = null + + fun setContext(context: Context?): Builder { + this.context = context + return this + } + + fun setTitle(title: String?): Builder { + this.title = title + return this + } + + fun setHintMessage(message: String?): Builder { + this.hintMessage = message + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + this.listener = listener + return this + } + + fun build(): CancelAlarmDialog { + return CancelAlarmDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configDialogLayout() + setContentView(R.layout.dialog_cancel_alarm) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.toString().isNotBlank()) { + dialogTitleView.text = title + } + + if (hintMessage.toString().isNotBlank()) { + dialogInputView.hint = hintMessage + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + if (listener != null) { + listener.onCancelClick() + this.dismiss() + } + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + if (listener != null) { + val spinnerValue = operationSpinner.selectedItem.toString() + if (spinnerValue == "请选择") { + "消警原因必选".show() + return@setOnClickListener + } + val inputValue = dialogInputView.text.toString().trim() + if (inputValue.isBlank()) { + "备注不得为空".show() + return@setOnClickListener + } + listener.onConfirmClick(spinnerValue, inputValue) + this.dismiss() + } + } + } + + private fun configDialogLayout() { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(Gravity.CENTER) + //设置Dialog出现的动画 + window.setWindowAnimations(R.style.UserDefinedAnimation) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(ctx) * 0.75).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(spinnerValue: String, inputValue: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_hide.xml b/app/src/main/res/anim/action_dialog_hide.xml new file mode 100644 index 0000000..119726b --- /dev/null +++ b/app/src/main/res/anim/action_dialog_hide.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_dialog_show.xml b/app/src/main/res/anim/action_dialog_show.xml new file mode 100644 index 0000000..1d281ef --- /dev/null +++ b/app/src/main/res/anim/action_dialog_show.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml new file mode 100644 index 0000000..9389063 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_cancel_alarm.xml b/app/src/main/res/layout/dialog_cancel_alarm.xml new file mode 100644 index 0000000..8308e1a --- /dev/null +++ b/app/src/main/res/layout/dialog_cancel_alarm.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + +