diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index 757ef79..b4506a5 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -7,6 +7,7 @@ import com.casic.br.ktd.model.ActionResultModel import com.casic.br.ktd.model.AlarmDetailModel import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.model.AlarmMediaModel import com.casic.br.ktd.model.AlarmRuleListModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.LocaleConstant @@ -29,6 +30,7 @@ val alarmList = MutableLiveData() val alarmDetail = MutableLiveData() val resultModel = MutableLiveData() + val alarmMediaModel = MutableLiveData() fun addAlarmRule(high: String, deviceId: String, ts: String) = launch({ loadState.value = LoadState.Loading @@ -161,4 +163,36 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAlarmMedia( + alarmCode, + beginDate, + alarmStatus, + alarmType, + endDate, + taskName + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmMediaModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index 757ef79..b4506a5 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -7,6 +7,7 @@ import com.casic.br.ktd.model.ActionResultModel import com.casic.br.ktd.model.AlarmDetailModel import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.model.AlarmMediaModel import com.casic.br.ktd.model.AlarmRuleListModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.LocaleConstant @@ -29,6 +30,7 @@ val alarmList = MutableLiveData() val alarmDetail = MutableLiveData() val resultModel = MutableLiveData() + val alarmMediaModel = MutableLiveData() fun addAlarmRule(high: String, deviceId: String, ts: String) = launch({ loadState.value = LoadState.Loading @@ -161,4 +163,36 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAlarmMedia( + alarmCode, + beginDate, + alarmStatus, + alarmType, + endDate, + taskName + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmMediaModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index e24a9b0..d707aca 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -293,8 +293,7 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index 757ef79..b4506a5 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -7,6 +7,7 @@ import com.casic.br.ktd.model.ActionResultModel import com.casic.br.ktd.model.AlarmDetailModel import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.model.AlarmMediaModel import com.casic.br.ktd.model.AlarmRuleListModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.LocaleConstant @@ -29,6 +30,7 @@ val alarmList = MutableLiveData() val alarmDetail = MutableLiveData() val resultModel = MutableLiveData() + val alarmMediaModel = MutableLiveData() fun addAlarmRule(high: String, deviceId: String, ts: String) = launch({ loadState.value = LoadState.Loading @@ -161,4 +163,36 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAlarmMedia( + alarmCode, + beginDate, + alarmStatus, + alarmType, + endDate, + taskName + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmMediaModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index e24a9b0..d707aca 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -293,8 +293,7 @@ diff --git a/app/src/main/res/layout/activity_video_player.xml b/app/src/main/res/layout/activity_video_player.xml index c33aa1c..70f2a39 100644 --- a/app/src/main/res/layout/activity_video_player.xml +++ b/app/src/main/res/layout/activity_video_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index 757ef79..b4506a5 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -7,6 +7,7 @@ import com.casic.br.ktd.model.ActionResultModel import com.casic.br.ktd.model.AlarmDetailModel import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.model.AlarmMediaModel import com.casic.br.ktd.model.AlarmRuleListModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.LocaleConstant @@ -29,6 +30,7 @@ val alarmList = MutableLiveData() val alarmDetail = MutableLiveData() val resultModel = MutableLiveData() + val alarmMediaModel = MutableLiveData() fun addAlarmRule(high: String, deviceId: String, ts: String) = launch({ loadState.value = LoadState.Loading @@ -161,4 +163,36 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAlarmMedia( + alarmCode, + beginDate, + alarmStatus, + alarmType, + endDate, + taskName + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmMediaModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index e24a9b0..d707aca 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -293,8 +293,7 @@ diff --git a/app/src/main/res/layout/activity_video_player.xml b/app/src/main/res/layout/activity_video_player.xml index c33aa1c..70f2a39 100644 --- a/app/src/main/res/layout/activity_video_player.xml +++ b/app/src/main/res/layout/activity_video_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent"> diff --git a/app/src/main/res/layout/item_task_detail_rv_l.xml b/app/src/main/res/layout/item_task_detail_rv_l.xml index 05f93fb..a762bf8 100644 --- a/app/src/main/res/layout/item_task_detail_rv_l.xml +++ b/app/src/main/res/layout/item_task_detail_rv_l.xml @@ -89,7 +89,7 @@ android:layout_weight="1" android:fontFamily="@font/fzzdhjt" android:gravity="center" - android:text="回放" + android:text="查看" android:textColor="@color/blue" android:textSize="@dimen/sp_16" /> \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7df3629..f8a5cfe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ android:screenOrientation="landscape" /> data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataModel { + private String alarmCode; + private String alarmContent; + private String alarmLatitude; + private String alarmLongitude; + private String alarmPicture; + private String alarmStatus; + private Integer alarmThresh; + private String alarmTime; + private String alarmType; + private Integer alarmValue; + private String alarmVideo; + private String cancelReason; + private String cancelResult; + private String cancelTime; + private String cancelUser; + private String deviceId; + private String id; + private String taskId; + private String ts; + + public String getAlarmCode() { + return alarmCode; + } + + public void setAlarmCode(String alarmCode) { + this.alarmCode = alarmCode; + } + + public String getAlarmContent() { + return alarmContent; + } + + public void setAlarmContent(String alarmContent) { + this.alarmContent = alarmContent; + } + + public String getAlarmLatitude() { + return alarmLatitude; + } + + public void setAlarmLatitude(String alarmLatitude) { + this.alarmLatitude = alarmLatitude; + } + + public String getAlarmLongitude() { + return alarmLongitude; + } + + public void setAlarmLongitude(String alarmLongitude) { + this.alarmLongitude = alarmLongitude; + } + + public String getAlarmPicture() { + return alarmPicture; + } + + public void setAlarmPicture(String alarmPicture) { + this.alarmPicture = alarmPicture; + } + + public String getAlarmStatus() { + return alarmStatus; + } + + public void setAlarmStatus(String alarmStatus) { + this.alarmStatus = alarmStatus; + } + + public Integer getAlarmThresh() { + return alarmThresh; + } + + public void setAlarmThresh(Integer alarmThresh) { + this.alarmThresh = alarmThresh; + } + + public String getAlarmTime() { + return alarmTime; + } + + public void setAlarmTime(String alarmTime) { + this.alarmTime = alarmTime; + } + + public String getAlarmType() { + return alarmType; + } + + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + + public Integer getAlarmValue() { + return alarmValue; + } + + public void setAlarmValue(Integer alarmValue) { + this.alarmValue = alarmValue; + } + + public String getAlarmVideo() { + return alarmVideo; + } + + public void setAlarmVideo(String alarmVideo) { + this.alarmVideo = alarmVideo; + } + + public String getCancelReason() { + return cancelReason; + } + + public void setCancelReason(String cancelReason) { + this.cancelReason = cancelReason; + } + + public String getCancelResult() { + return cancelResult; + } + + public void setCancelResult(String cancelResult) { + this.cancelResult = cancelResult; + } + + public String getCancelTime() { + return cancelTime; + } + + public void setCancelTime(String cancelTime) { + this.cancelTime = cancelTime; + } + + public String getCancelUser() { + return cancelUser; + } + + public void setCancelUser(String cancelUser) { + this.cancelUser = cancelUser; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 8a06ac4..d65bbd2 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -203,6 +203,15 @@ ): String /** + * 报警图片或者视频 + */ + @POST("/alarm/getAlarmPath") + suspend fun getAlarmMedia( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** * 根据时间获取巡检任务和公里数 */ @POST("/system/busOverView/taskCount") diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index d186587..c05841c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -393,6 +393,31 @@ } /** + * 报警图片或者视频 + */ + suspend fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("alarmStatus", alarmStatus) + param.addProperty("alarmType", alarmType) + param.addProperty("endDate", endDate) + param.addProperty("taskName", taskName) + param.addProperty("alarmCode", alarmCode) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getAlarmMedia(AuthenticationHelper.token, requestBody) + } + + /** * 根据时间获取巡检任务和公里数 */ suspend fun getTaskCount(beginDate: String, endDate: String): String { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt index 44e2a29..e8719ca 100644 --- a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -132,6 +132,7 @@ taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + getTaskRouteByPage() taskViewModel.detailResult.observe(this) { if (it.code == 200) { val dataRows = it.data?.rows!! @@ -178,7 +179,11 @@ taskDetailAdapter.setOnClickedListener(object : TaskDetailAdapter.OnClickedListener { override fun onShowTextClicked(item: TaskDetailModel.DataModel.RowsModel) { - navigatePageTo(item.taskId) + if (item.alarmCode.isNullOrEmpty()) { + "报警视频或图片已丢失,无法查看".show(this@TaskDetailActivity) + return + } + navigatePageTo(item.alarmCode) } }) } @@ -189,7 +194,6 @@ override fun onResume() { super.onResume() swipeAction.clear() - getTaskRouteByPage() } private fun getTaskRouteByPage() { diff --git a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt index 9b04bb6..bed0221 100644 --- a/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt +++ b/app/src/main/java/com/casic/br/ktd/view/VideoPlayerActivity.kt @@ -2,17 +2,30 @@ import android.content.res.Configuration import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.bumptech.glide.Glide import com.casic.br.ktd.databinding.ActivityVideoPlayerBinding +import com.casic.br.ktd.extensions.combineImagePath +import com.casic.br.ktd.utils.LoadingDialogHub +import com.casic.br.ktd.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.getScreenHeight import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.vm.LoadState import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils class VideoPlayerActivity : KotlinBaseActivity() { + private val kTag = "VideoPlayerActivity" private lateinit var orientationUtils: OrientationUtils + private lateinit var alarmViewModel: AlarmViewModel private var isPlay = false private var isPause = false @@ -30,7 +43,62 @@ //初始化不打开外部的旋转 orientationUtils.isEnable = false - val taskId = intent.getStringExtra(Constant.INTENT_PARAM) + alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] + val alarmCode = intent.getStringExtra(Constant.INTENT_PARAM) as String + alarmViewModel.getAlarmMedia(alarmCode, "", "", "", "", "") + alarmViewModel.alarmMediaModel.observe(this) { + if (it.code == 200) { + if (it.data.isNotEmpty()) { + val model = it.data[0] + if (model.alarmVideo.isNullOrEmpty()) { + binding.imageView.visibility = View.VISIBLE + binding.videoPlayerView.visibility = View.GONE + + val imagePath = model.alarmPicture.combineImagePath() + Log.d(kTag, "initOnCreate => $imagePath") + + Glide.with(this).load(imagePath).into(binding.imageView) + } else { + binding.imageView.visibility = View.GONE + binding.videoPlayerView.visibility = View.VISIBLE + + val videoPath = model.alarmVideo.combineImagePath() + Log.d(kTag, "initOnCreate => $videoPath") + + val videoOption = GSYVideoOptionBuilder() + videoOption.setIsTouchWiget(true) + .setRotateViewAuto(false) + .setLockLand(false) + .setAutoFullWithSize(true) + .setShowFullAnimation(false) + .setNeedLockFull(true) + .setUrl(videoPath) + .setCacheWithPlay(false) + .setVideoTitle(model.alarmContent) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onPrepared(url: String, vararg objects: Any) { + super.onPrepared(url, *objects) + //开始播放了才能旋转和全屏 + orientationUtils.isEnable = true + isPlay = true + } + + override fun onQuitFullscreen(url: String, vararg objects: Any) { + super.onQuitFullscreen(url, *objects) + orientationUtils.backToProtVideo() + } + }).setLockClickListener { _, lock -> + orientationUtils.isEnable = !lock + }.build(binding.videoPlayerView) + binding.videoPlayerView.fullscreenButton.setOnClickListener { + //直接横屏 + orientationUtils.resolveByClick() + binding.videoPlayerView.startWindowFullscreen(this, true, true) + } + } + } + } + } } override fun initViewBinding(): ActivityVideoPlayerBinding { @@ -38,7 +106,16 @@ } override fun observeRequestState() { - + alarmViewModel.loadState.observe(this) { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + LoadState.Success -> LoadingDialogHub.dismiss() + else -> { + LoadingDialogHub.dismiss() + "数据加载失败,请重新操作".show(this) + } + } + } } override fun setupTopBarLayout() { @@ -78,11 +155,7 @@ //如果旋转了就全屏 if (isPlay && !isPause) { binding.videoPlayerView.onConfigurationChanged( - this, - newConfig, - orientationUtils, - true, - true + this, newConfig, orientationUtils, true, true ) } } diff --git a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt index 757ef79..b4506a5 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/AlarmViewModel.kt @@ -7,6 +7,7 @@ import com.casic.br.ktd.model.ActionResultModel import com.casic.br.ktd.model.AlarmDetailModel import com.casic.br.ktd.model.AlarmListModel +import com.casic.br.ktd.model.AlarmMediaModel import com.casic.br.ktd.model.AlarmRuleListModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.LocaleConstant @@ -29,6 +30,7 @@ val alarmList = MutableLiveData() val alarmDetail = MutableLiveData() val resultModel = MutableLiveData() + val alarmMediaModel = MutableLiveData() fun addAlarmRule(high: String, deviceId: String, ts: String) = launch({ loadState.value = LoadState.Loading @@ -161,4 +163,36 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAlarmMedia( + alarmCode: String, + beginDate: String, + alarmStatus: String, + alarmType: String, + endDate: String, + taskName: String + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAlarmMedia( + alarmCode, + beginDate, + alarmStatus, + alarmType, + endDate, + taskName + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmMediaModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.get()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm_detail.xml b/app/src/main/res/layout/activity_alarm_detail.xml index e24a9b0..d707aca 100644 --- a/app/src/main/res/layout/activity_alarm_detail.xml +++ b/app/src/main/res/layout/activity_alarm_detail.xml @@ -293,8 +293,7 @@ diff --git a/app/src/main/res/layout/activity_video_player.xml b/app/src/main/res/layout/activity_video_player.xml index c33aa1c..70f2a39 100644 --- a/app/src/main/res/layout/activity_video_player.xml +++ b/app/src/main/res/layout/activity_video_player.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent"> diff --git a/app/src/main/res/layout/item_task_detail_rv_l.xml b/app/src/main/res/layout/item_task_detail_rv_l.xml index 05f93fb..a762bf8 100644 --- a/app/src/main/res/layout/item_task_detail_rv_l.xml +++ b/app/src/main/res/layout/item_task_detail_rv_l.xml @@ -89,7 +89,7 @@ android:layout_weight="1" android:fontFamily="@font/fzzdhjt" android:gravity="center" - android:text="回放" + android:text="查看" android:textColor="@color/blue" android:textSize="@dimen/sp_16" /> \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 06ee556..2c58d6f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -50,4 +50,23 @@ @color/hintColor @dimen/sp_18 + + \ No newline at end of file