diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_bottom_area.xml b/app/src/main/res/layout/sheet_bottom_area.xml new file mode 100644 index 0000000..7ec90a1 --- /dev/null +++ b/app/src/main/res/layout/sheet_bottom_area.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_bottom_area.xml b/app/src/main/res/layout/sheet_bottom_area.xml new file mode 100644 index 0000000..7ec90a1 --- /dev/null +++ b/app/src/main/res/layout/sheet_bottom_area.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9ba1356..cfdc60f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,7 @@ #626262 #F7F7FA #CCCCCC + #DDDDDD #00A000 #FF0000 #FF6600 diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_bottom_area.xml b/app/src/main/res/layout/sheet_bottom_area.xml new file mode 100644 index 0000000..7ec90a1 --- /dev/null +++ b/app/src/main/res/layout/sheet_bottom_area.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9ba1356..cfdc60f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,7 @@ #626262 #F7F7FA #CCCCCC + #DDDDDD #00A000 #FF0000 #FF6600 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 27c04dc..0287df6 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -17,6 +17,7 @@ 80dp 100dp 200dp + 300dp 1px diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt new file mode 100644 index 0000000..b1ec092 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import com.casic.qd.smartwell.base.BaseApplication +import com.pengxh.app.multilib.utils.SizeUtil + +fun Dialog.initDialogLayoutParams(gravity: Int, resId: Int, scale: Float) { + val window = window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = (SizeUtil.getScreenWidth(BaseApplication.obtainInstance()) * scale).toInt() + params.height = WindowManager.LayoutParams.WRAP_CONTENT + window.attributes = params +} \ 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 e31a353..016b204 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 @@ -73,17 +73,12 @@ /** * 消警 * - * @param id 告警工单ID - * @param jobStatus 告警工单状态 - * @param handleMessage 处理信息 + * @param alarmId 告警ID */ - @FormUrlEncoded - @POST("/alarm/cancelAlarm") + @GET("/alarm/cancelAlarmById") suspend fun obtainOperationResult( @Header("token") token: String, - @Field("id") id: String, - @Field("jobStatus") jobStatus: String, - @Field("handleMessage") handleMessage: String + @Query("alarmId") alarmId: String ): String /** 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 6942990..43e0bf4 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 @@ -74,12 +74,8 @@ /** * 消警 */ - suspend fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ): String { - return api.obtainOperationResult(AuthenticationHelper.token!!, id, jobStatus, handleMessage) + suspend fun obtainOperationResult(alarmId: String): String { + return api.obtainOperationResult(AuthenticationHelper.token!!, alarmId) } /** 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 8fcd142..66f7e3d 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 @@ -177,8 +177,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -188,7 +188,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index aef4154..1924bce 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -10,6 +10,7 @@ import com.casic.qd.smartwell.vm.AlarmContentViewModel import com.casic.qd.smartwell.vm.AlarmTypeViewModel import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder @@ -18,16 +19,12 @@ class SearchAlarmActivity : BaseActivity() { - private val kTag = "SearchAlarmActivity" private lateinit var alarmTypeViewModel: AlarmTypeViewModel private lateinit var alarmContentViewModel: AlarmContentViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" - private var firstLevelArea: MutableList = ArrayList() - private var secondLevelArea: MutableList = ArrayList() - private var thirdLevelArea: MutableList = ArrayList() - private var areaModels: MutableList = ArrayList() + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_alarm_search @@ -46,7 +43,7 @@ } override fun initEvent() { - selectTypeView.setOnClickListener { + alarmTypeView.setOnClickListener { alarmTypeViewModel.obtainAlarmType() } alarmTypeViewModel.typeModel.observe(this, { @@ -57,7 +54,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmTypeView.text = tag alarmType = it.data!![position].value.toString() @@ -68,7 +65,7 @@ } }) - selectContentView.setOnClickListener { + alarmContentView.setOnClickListener { //获取类型对应的报警内容 alarmContentViewModel.obtainAlarmContent(alarmType) } @@ -80,7 +77,7 @@ sheetBuilder.addItem(dataBean.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, itemView, position, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> alarmContentView.text = tag alarmContent = it.data!!.list!![position].value.toString() @@ -90,11 +87,14 @@ }) //地区三级联动 - selectAreaView.setOnClickListener { + areaView.setOnClickListener { areaViewModel.obtainArea() } areaViewModel.areaModel.observe(this, { if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() it.data?.forEach { dataBean -> when (dataBean.level) { 2 -> firstLevelArea.add(dataBean) @@ -102,10 +102,19 @@ 4 -> thirdLevelArea.add(dataBean) } } - //TODO 绑定区域 -// Log.d(kTag, Gson().toJson(firstLevelArea)) -// Log.d(kTag, Gson().toJson(secondLevelArea)) -// Log.d(kTag, Gson().toJson(thirdLevelArea)) + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() } }) @@ -144,12 +153,11 @@ searchButton.setChangeAlphaWhenPress(true) searchButton.setOnClickListener { //页面跳转,将查询参数传过去 - //TODO areaId待定 navigatePageTo( SearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, - "", + areaId, alarmContent, startTimeView.text.toString(), endTimeView.text.toString() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt index 32d0a3a..6e0816e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt @@ -188,8 +188,8 @@ * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf * POST * */ - val id = wellDetail.jobId - if (id.toString().isBlank()) { + val alarmId = wellDetail.id + if (alarmId.toString().isBlank()) { "操作失败,告警ID异常".show() return } @@ -199,7 +199,7 @@ else -> "" } activity.cancelAlarmViewModel.obtainOperationResult( - id!!, jobStatus, inputValue + alarmId!! ) } 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 index d95c207..f27cf32 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -17,15 +17,11 @@ private val kTag = "CancelAlarmViewModel" private val gson = Gson() - val resultModel = MutableLiveData() + private val resultModel = MutableLiveData() - fun obtainOperationResult( - id: String, - jobStatus: String, - handleMessage: String - ) = launch({ + fun obtainOperationResult(alarmId: String) = launch({ loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(id, jobStatus, handleMessage) + val response = RetrofitServiceManager.obtainOperationResult(alarmId) val responseCode = response.separateResponseCode() if (responseCode == 200) { loadState.value = LoadState.Success diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt new file mode 100644 index 0000000..39d6d09 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/BottomAreaSheet.kt @@ -0,0 +1,173 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.* +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.model.AreaModel +import com.pengxh.app.multilib.utils.SizeUtil +import kotlinx.android.synthetic.main.sheet_bottom_area.* + +class BottomAreaSheet private constructor(builder: Builder) : Dialog( + builder.context, R.style.ActionSheetDialogStyle +) { + private val firstLevelArea: List = builder.firstLevelArea + private val secondLevelArea: List = builder.secondLevelArea + private val thirdLevelArea: List = builder.thirdLevelArea + private val listener: OnActionSheetListener = builder.listener + private var areaName: String? = "" + private var areaId: String? = "" + + class Builder { + lateinit var context: Context + lateinit var firstLevelArea: List + lateinit var secondLevelArea: List + lateinit var thirdLevelArea: List + lateinit var listener: OnActionSheetListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFirstAreaData(firstLevelArea: List): Builder { + this.firstLevelArea = firstLevelArea + return this + } + + fun setSecondAreaData(secondLevelArea: List): Builder { + this.secondLevelArea = secondLevelArea + return this + } + + fun setThirdAreaData(thirdLevelArea: List): Builder { + this.thirdLevelArea = thirdLevelArea + return this + } + + fun setOnActionSheetListener(listener: OnActionSheetListener): Builder { + this.listener = listener + return this + } + + fun build(): BottomAreaSheet { + return BottomAreaSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1.0f) + setContentView(R.layout.sheet_bottom_area) + setCancelable(false) + setCanceledOnTouchOutside(false) + + dismissView.setOnClickListener { dismiss() } + + firstAreaListView.adapter = AreaDataAdapter(firstLevelArea) + firstAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, i, _ -> + //只选择到一级区域 + areaName = if (firstLevelArea[i].simplename.toString() + .isBlank() + ) firstLevelArea[i].simplename else firstLevelArea[i].name + areaId = firstLevelArea[i].id + selectedAreaView.text = "$areaName" + + //分离一级区域对应的二级区域 + val secondTempArea: MutableList = ArrayList() + secondLevelArea.forEach { second -> + if (second.pid == firstLevelArea[i].id) { + secondTempArea.add(second) + } + } + secondAreaListView.adapter = AreaDataAdapter(secondTempArea) + secondAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, j, _ -> + //只选择到二级区域 + areaName = if (secondTempArea[j].simplename.toString() + .isBlank() + ) secondTempArea[j].simplename else secondTempArea[j].name + areaId = secondTempArea[j].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-$areaName") + + //分离二级区域对应的三级区域 + val thirdTempArea: MutableList = ArrayList() + thirdLevelArea.forEach { third -> + if (third.pid == secondTempArea[j].id) { + thirdTempArea.add(third) + } + } + thirdAreaListView.adapter = AreaDataAdapter(thirdTempArea) + thirdAreaListView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, k, _ -> + //选择到三级区域 + areaName = if (thirdTempArea[k].simplename.toString() + .isBlank() + ) thirdTempArea[k].simplename else thirdTempArea[k].name + areaId = thirdTempArea[k].id + selectedAreaView.text = + String.format("${firstLevelArea[i].simplename}-${secondTempArea[j].simplename}-$areaName") + } + } + } + + sheetConfirmButton.setChangeAlphaWhenPress(true) + sheetConfirmButton.setOnClickListener { + listener.onAreaSelected(areaName, areaId) + dismiss() + } + } + + interface OnActionSheetListener { + fun onAreaSelected(area: String?, id: String?) + } + + internal inner class AreaDataAdapter(private val dataBeans: List) : + BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = dataBeans.size + + override fun getItem(position: Int): Any = dataBeans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(R.layout.item_area_sheet, null) + holder.areaItemView = view.findViewById(R.id.areaItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + val dataBean = dataBeans[position] + holder.areaItemView.setBackgroundResource(R.drawable.sheet_item_selector) + holder.areaItemView.text = + if (dataBean.simplename.toString().isBlank()) dataBean.simplename else dataBean.name + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, + SizeUtil.dp2px(context, 46f) + ) + view.layoutParams = param + return view + } + + internal inner class ItemViewHolder { + lateinit var areaItemView: TextView + } + } +} \ 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 index be41fbf..7f13125 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/CancelAlarmDialog.kt @@ -2,46 +2,42 @@ 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.initDialogLayoutParams 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 + 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 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 + private val listener: OnDialogButtonClickListener = builder.listener class Builder { - var context: Context? = null - var title: String? = null - var hintMessage: String? = null + lateinit var context: Context + lateinit var title: String + lateinit var hintMessage: String lateinit var negativeBtn: String lateinit var positiveBtn: String - var listener: OnDialogButtonClickListener? = null + lateinit var listener: OnDialogButtonClickListener - fun setContext(context: Context?): Builder { + fun setContext(context: Context): Builder { this.context = context return this } - fun setTitle(title: String?): Builder { + fun setTitle(title: String): Builder { this.title = title return this } - fun setHintMessage(message: String?): Builder { + fun setHintMessage(message: String): Builder { this.hintMessage = message return this } @@ -56,7 +52,7 @@ return this } - fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener?): Builder { + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } @@ -68,59 +64,42 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - configDialogLayout() + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) setContentView(R.layout.dialog_cancel_alarm) setCancelable(false) setCanceledOnTouchOutside(false) - if (title.toString().isNotBlank()) { + if (title.isNotBlank()) { dialogTitleView.text = title } - if (hintMessage.toString().isNotBlank()) { + if (hintMessage.isNotBlank()) { dialogInputView.hint = hintMessage } dialogCancelButton.text = negativeBtn dialogCancelButton.setOnClickListener { - if (listener != null) { - listener.onCancelClick() - this.dismiss() - } + 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() + 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) diff --git a/app/src/main/res/anim/action_sheet_hide.xml b/app/src/main/res/anim/action_sheet_hide.xml new file mode 100644 index 0000000..c9f2f5c --- /dev/null +++ b/app/src/main/res/anim/action_sheet_hide.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/action_sheet_show.xml b/app/src/main/res/anim/action_sheet_show.xml new file mode 100644 index 0000000..fb01411 --- /dev/null +++ b/app/src/main/res/anim/action_sheet_show.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml new file mode 100644 index 0000000..9570167 --- /dev/null +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_10.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index c6d8b0d..2beceb3 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,6 +1,6 @@ + + diff --git a/app/src/main/res/drawable/sheet_item_selector.xml b/app/src/main/res/drawable/sheet_item_selector.xml new file mode 100644 index 0000000..82613d0 --- /dev/null +++ b/app/src/main/res/drawable/sheet_item_selector.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_search.xml b/app/src/main/res/layout/activity_alarm_search.xml index 3c9a5a7..498fd25 100644 --- a/app/src/main/res/layout/activity_alarm_search.xml +++ b/app/src/main/res/layout/activity_alarm_search.xml @@ -60,16 +60,10 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical|end" + android:hint="请选择" + android:paddingHorizontal="@dimen/dp_10" android:textColor="@color/subTextColor" android:textSize="@dimen/textFontSize" /> - - - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_bottom_area.xml b/app/src/main/res/layout/sheet_bottom_area.xml new file mode 100644 index 0000000..7ec90a1 --- /dev/null +++ b/app/src/main/res/layout/sheet_bottom_area.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9ba1356..cfdc60f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,7 @@ #626262 #F7F7FA #CCCCCC + #DDDDDD #00A000 #FF0000 #FF6600 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 27c04dc..0287df6 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -17,6 +17,7 @@ 80dp 100dp 200dp + 300dp 1px diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6c19cc3..f82266a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -83,4 +83,26 @@ @anim/action_dialog_show @anim/action_dialog_hide + + + + +