diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
+
@@ -100,6 +101,7 @@
+
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
new file mode 100644
index 0000000..bc519cd
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.xz.meterage.view
+
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.VersionResultModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.FileViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_version_history.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class VersionHistoryActivity : ApplicationBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var fileViewModel: FileViewModel
+ private lateinit var versionHistoryAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_version_history
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "功能介绍"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
+ fileViewModel.versionResult.observe(this) {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ versionHistoryLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ versionHistoryLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023042401)
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+ fileViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ versionHistoryLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ versionHistoryLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getApkVersionListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ private fun getApkVersionListByPage() {
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023042401 -> {
+ if (isRefresh || isLoadMore) {
+ versionHistoryAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView.showEmptyPage("无APP版本更新记录") {
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+ } else {
+ emptyView.hide()
+ versionHistoryAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_update_log_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder,
+ position: Int,
+ item: VersionResultModel.DataModel.RowsModel
+ ) {
+ viewHolder.setText(
+ R.id.versionNameView,
+ "${resources.getString(R.string.app_name)} ${item.versionName} 主要更新"
+ )
+ .setText(R.id.descriptionView, item.descn)
+ //2023-04-23T17:06:06
+ .setText(R.id.dateView, item.updateTime.split("T")[0])
+ }
+ }
+ versionHistoryRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ versionHistoryRecyclerView.adapter = versionHistoryAdapter
+ }
+ }
+ }
+ }
+ true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
new file mode 100644
index 0000000..bc519cd
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.xz.meterage.view
+
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.VersionResultModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.FileViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_version_history.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class VersionHistoryActivity : ApplicationBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var fileViewModel: FileViewModel
+ private lateinit var versionHistoryAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_version_history
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "功能介绍"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
+ fileViewModel.versionResult.observe(this) {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ versionHistoryLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ versionHistoryLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023042401)
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+ fileViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ versionHistoryLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ versionHistoryLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getApkVersionListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ private fun getApkVersionListByPage() {
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023042401 -> {
+ if (isRefresh || isLoadMore) {
+ versionHistoryAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView.showEmptyPage("无APP版本更新记录") {
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+ } else {
+ emptyView.hide()
+ versionHistoryAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_update_log_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder,
+ position: Int,
+ item: VersionResultModel.DataModel.RowsModel
+ ) {
+ viewHolder.setText(
+ R.id.versionNameView,
+ "${resources.getString(R.string.app_name)} ${item.versionName} 主要更新"
+ )
+ .setText(R.id.descriptionView, item.descn)
+ //2023-04-23T17:06:06
+ .setText(R.id.dateView, item.updateTime.split("T")[0])
+ }
+ }
+ versionHistoryRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ versionHistoryRecyclerView.adapter = versionHistoryAdapter
+ }
+ }
+ }
+ }
+ true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
index a4d78eb..348183f 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
@@ -41,9 +41,13 @@
it.printStackTrace()
})
- fun updateVersion() = launch({
+ fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.updateVersion()
+ val response = RetrofitServiceManager.getApkVersionList(
+ fileName, downloadNo, moduleName, ids, offset
+ )
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
loadState.value = LoadState.Success
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
new file mode 100644
index 0000000..bc519cd
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.xz.meterage.view
+
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.VersionResultModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.FileViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_version_history.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class VersionHistoryActivity : ApplicationBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var fileViewModel: FileViewModel
+ private lateinit var versionHistoryAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_version_history
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "功能介绍"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
+ fileViewModel.versionResult.observe(this) {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ versionHistoryLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ versionHistoryLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023042401)
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+ fileViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ versionHistoryLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ versionHistoryLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getApkVersionListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ private fun getApkVersionListByPage() {
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023042401 -> {
+ if (isRefresh || isLoadMore) {
+ versionHistoryAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView.showEmptyPage("无APP版本更新记录") {
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+ } else {
+ emptyView.hide()
+ versionHistoryAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_update_log_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder,
+ position: Int,
+ item: VersionResultModel.DataModel.RowsModel
+ ) {
+ viewHolder.setText(
+ R.id.versionNameView,
+ "${resources.getString(R.string.app_name)} ${item.versionName} 主要更新"
+ )
+ .setText(R.id.descriptionView, item.descn)
+ //2023-04-23T17:06:06
+ .setText(R.id.dateView, item.updateTime.split("T")[0])
+ }
+ }
+ versionHistoryRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ versionHistoryRecyclerView.adapter = versionHistoryAdapter
+ }
+ }
+ }
+ }
+ true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
index a4d78eb..348183f 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
@@ -41,9 +41,13 @@
it.printStackTrace()
})
- fun updateVersion() = launch({
+ fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.updateVersion()
+ val response = RetrofitServiceManager.getApkVersionList(
+ fileName, downloadNo, moduleName, ids, offset
+ )
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/download_progress.xml b/app/src/main/res/drawable/download_progress.xml
index c800091..ebb7bc3 100644
--- a/app/src/main/res/drawable/download_progress.xml
+++ b/app/src/main/res/drawable/download_progress.xml
@@ -3,8 +3,8 @@
-
-
-
+
+
@@ -12,8 +12,8 @@
-
-
-
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
new file mode 100644
index 0000000..bc519cd
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.xz.meterage.view
+
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.VersionResultModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.FileViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_version_history.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class VersionHistoryActivity : ApplicationBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var fileViewModel: FileViewModel
+ private lateinit var versionHistoryAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_version_history
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "功能介绍"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
+ fileViewModel.versionResult.observe(this) {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ versionHistoryLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ versionHistoryLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023042401)
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+ fileViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ versionHistoryLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ versionHistoryLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getApkVersionListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ private fun getApkVersionListByPage() {
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023042401 -> {
+ if (isRefresh || isLoadMore) {
+ versionHistoryAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView.showEmptyPage("无APP版本更新记录") {
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+ } else {
+ emptyView.hide()
+ versionHistoryAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_update_log_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder,
+ position: Int,
+ item: VersionResultModel.DataModel.RowsModel
+ ) {
+ viewHolder.setText(
+ R.id.versionNameView,
+ "${resources.getString(R.string.app_name)} ${item.versionName} 主要更新"
+ )
+ .setText(R.id.descriptionView, item.descn)
+ //2023-04-23T17:06:06
+ .setText(R.id.dateView, item.updateTime.split("T")[0])
+ }
+ }
+ versionHistoryRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ versionHistoryRecyclerView.adapter = versionHistoryAdapter
+ }
+ }
+ }
+ }
+ true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
index a4d78eb..348183f 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
@@ -41,9 +41,13 @@
it.printStackTrace()
})
- fun updateVersion() = launch({
+ fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.updateVersion()
+ val response = RetrofitServiceManager.getApkVersionList(
+ fileName, downloadNo, moduleName, ids, offset
+ )
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/download_progress.xml b/app/src/main/res/drawable/download_progress.xml
index c800091..ebb7bc3 100644
--- a/app/src/main/res/drawable/download_progress.xml
+++ b/app/src/main/res/drawable/download_progress.xml
@@ -3,8 +3,8 @@
-
-
-
+
+
@@ -12,8 +12,8 @@
-
-
-
+
+
diff --git a/app/src/main/res/layout/activity_version_history.xml b/app/src/main/res/layout/activity_version_history.xml
new file mode 100644
index 0000000..109340f
--- /dev/null
+++ b/app/src/main/res/layout/activity_version_history.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3e24281..9efc1f6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -100,6 +101,7 @@
+
rows;
+ private int total;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public static class RowsModel {
+ private String businessDownloadType;
+ private String businessDownloadTypeName;
+ private String createTime;
+ private String createUser;
+ private String descn;
+ private String downloadNo;
+ private String fileName;
+ private String fileType;
+ private String fileTypeName;
+ private String id;
+ private String minioFileName;
+ private String moduleName;
+ private String updateTime;
+ private String updateUser;
+ private String versionName;
+
+ public String getBusinessDownloadType() {
+ return businessDownloadType;
+ }
+
+ public void setBusinessDownloadType(String businessDownloadType) {
+ this.businessDownloadType = businessDownloadType;
+ }
+
+ public String getBusinessDownloadTypeName() {
+ return businessDownloadTypeName;
+ }
+
+ public void setBusinessDownloadTypeName(String businessDownloadTypeName) {
+ this.businessDownloadTypeName = businessDownloadTypeName;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getCreateUser() {
+ return createUser;
+ }
+
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+
+ public String getDescn() {
+ return descn;
+ }
+
+ public void setDescn(String descn) {
+ this.descn = descn;
+ }
+
+ public String getDownloadNo() {
+ return downloadNo;
+ }
+
+ public void setDownloadNo(String downloadNo) {
+ this.downloadNo = downloadNo;
+ }
+
+ public String getFileName() {
+ return fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ public String getFileType() {
+ return fileType;
+ }
+
+ public void setFileType(String fileType) {
+ this.fileType = fileType;
+ }
+
+ public String getFileTypeName() {
+ return fileTypeName;
+ }
+
+ public void setFileTypeName(String fileTypeName) {
+ this.fileTypeName = fileTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getMinioFileName() {
+ return minioFileName;
+ }
+
+ public void setMinioFileName(String minioFileName) {
+ this.minioFileName = minioFileName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(String updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public String getVersionName() {
+ return versionName;
+ }
+
+ public void setVersionName(String versionName) {
+ this.versionName = versionName;
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index b31efe0..dbf1293 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -67,6 +67,7 @@
const val USER_ID = "userId"
const val PRIVACY_CHECK_BOX = "privacyCheckBox"
const val PUSH_SETTING = "pushSetting"
+ const val APP_AUTHORITY = "com.casic.xz.meterage.fileprovider"
const val METERAGE_TRAIN_FORM_ID = "jlglpxjhsp"
const val STANDARD_FILE_FORM_ID = "jlglwjsp"
const val CERTIFICATE_REPORT_FORM_ID = "ywglzsbg"
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
index 3bfa998..005966d 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitService.kt
@@ -91,10 +91,15 @@
): String
/**
- * 更新APK版本
+ * 获取APK版本列表
*/
- @POST("/sys/app/checkVersion")
- suspend fun updateVersion(@Header("token") token: String): String
+ @POST("/download/center/listPage")
+ suspend fun getApkVersionList(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody,
+ @QueryMap limit: Map,
+ @QueryMap offset: Map
+ ): String
/**
* 获取通知公告列表
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
index b971370..5e355d6 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/retrofit/RetrofitServiceManager.kt
@@ -215,8 +215,24 @@
/**
* 更新APK版本
*/
- suspend fun updateVersion(): String {
- return api.updateVersion(AuthenticationHelper.token!!)
+ suspend fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ): String {
+ val param = JsonObject()
+ param.addProperty("fileName", fileName)
+ param.addProperty("downloadNo", downloadNo)
+ param.addProperty("moduleName", moduleName)
+ param.add("ids", gson.toJsonTree(ids, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ val limitMap = HashMap()
+ limitMap["limit"] = LocaleConstant.PAGE_LIMIT
+
+ val offsetMap = HashMap()
+ offsetMap["offset"] = offset
+ return api.getApkVersionList(AuthenticationHelper.token!!, requestBody, limitMap, offsetMap)
}
/**
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
index d6ef778..7230b80 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionControlActivity.kt
@@ -1,21 +1,34 @@
package com.casic.xz.meterage.view
import android.app.ProgressDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.util.Log
import android.view.View
+import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.BuildConfig
import com.casic.xz.meterage.R
import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.appendDownloadUrl
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.vm.FileViewModel
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.callback.OnDownloadListener
+import com.pengxh.kt.lite.extensions.createDownloadFileDir
+import com.pengxh.kt.lite.extensions.downloadFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_version_control.*
import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class VersionControlActivity : ApplicationBaseActivity() {
+ private val kTag = "VersionControlActivity"
private lateinit var fileViewModel: FileViewModel
private lateinit var progressDialog: ProgressDialog
@@ -39,26 +52,31 @@
fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
fileViewModel.versionResult.observe(this) {
-// if (BuildConfig.VERSION_NAME == it.version) {
-// "已是最新版本,无需更新".show(this)
-// } else {
-// AlertControlDialog.Builder()
-// .setContext(this)
-// .setTitle("提示")
-// .setMessage("有新版本,是否更新?")
-// .setNegativeButton("稍后再说")
-// .setPositiveButton("立即下载")
-// .setOnDialogButtonClickListener(object :
-// AlertControlDialog.OnDialogButtonClickListener {
-// override fun onConfirmClick() {
-// downloadApk(it.downloadUrl)
-// }
-//
-// override fun onCancelClick() {
-//
-// }
-// }).build().show()
-// }
+ if (it.code == 200) {
+ //后台已经倒序,取第一个即可
+ val first = it.data.rows.first()
+
+ if (BuildConfig.VERSION_NAME == first.versionName) {
+ "已是最新版本,无需更新".show(this)
+ } else {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("有新版本,是否更新?")
+ .setNegativeButton("稍后再说")
+ .setPositiveButton("立即下载")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onConfirmClick() {
+ downloadApk(first.minioFileName)
+ }
+
+ override fun onCancelClick() {
+
+ }
+ }).build().show()
+ }
+ }
}
}
@@ -70,16 +88,72 @@
leftBackView.setOnClickListener { finish() }
introduceLayout.setOnClickListener {
- "未实现".show(this)
+ navigatePageTo()
}
updateLayout.setOnClickListener {
-// fileViewModel.updateVersion()
- "未实现".show(this)
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), 1)
}
privacyView.setOnClickListener {
navigatePageTo()
}
}
+
+ private fun downloadApk(url: String?) {
+ progressDialog.setMessage("下载新版本中...")
+ progressDialog
+ progressDialog.show()
+ if (url.toString().isBlank()) {
+ "抱歉,版本下载失败".show(this)
+ return
+ }
+ /**
+ * http://111.198.10.15:21408/test/202301121601_1682236842001.apk
+ * */
+ val downloadPath = url!!.appendDownloadUrl()
+ Log.d(kTag, "downloadApk => $downloadPath")
+ //开始下载
+ downloadPath.downloadFile(
+ this.createDownloadFileDir().toString(), object : OnDownloadListener {
+ override fun onDownloadStart(totalBytes: Long) {
+ progressDialog.max = totalBytes.toInt()
+ }
+
+ override fun onProgressChanged(currentBytes: Long) {
+ progressDialog.progress = currentBytes.toInt()
+ }
+
+ override fun onDownloadEnd(file: File?) {
+ progressDialog.dismiss()
+ progressDialog.progress = 0
+ //安装APK
+ installApk(file)
+ }
+ }
+ )
+ }
+
+ private fun installApk(apkPackage: File?) {
+ if (apkPackage == null) {
+ "安装文件异常,无法安装".show(this)
+ return
+ }
+ val intent = Intent(Intent.ACTION_VIEW)
+ val data: Uri
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //判断版本大于等于7.0
+ data = FileProvider.getUriForFile(
+ this, LocaleConstant.APP_AUTHORITY, apkPackage
+ )
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // 给目标应用一个临时授权
+ } else {
+ data = Uri.fromFile(apkPackage)
+ }
+ /**
+ * android 10
+ * content://com.casic.app.smartwell.fileprovider/smartWell/Download/1.0.1.apk
+ * */
+ intent.setDataAndType(data, "application/vnd.android.package-archive")
+ startActivity(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
new file mode 100644
index 0000000..bc519cd
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/VersionHistoryActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.xz.meterage.view
+
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.base.ApplicationBaseActivity
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.VersionResultModel
+import com.casic.xz.meterage.utils.LoadingDialogHub
+import com.casic.xz.meterage.vm.FileViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_version_history.*
+import kotlinx.android.synthetic.main.include_empty_view.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class VersionHistoryActivity : ApplicationBaseActivity() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var fileViewModel: FileViewModel
+ private lateinit var versionHistoryAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
+
+ override fun initLayoutView(): Int = R.layout.activity_version_history
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "功能介绍"
+ }
+
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ fileViewModel = ViewModelProvider(this)[FileViewModel::class.java]
+ fileViewModel.versionResult.observe(this) {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ versionHistoryLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ versionHistoryLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023042401)
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+ fileViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+
+ versionHistoryLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ versionHistoryLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getApkVersionListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+
+ private fun getApkVersionListByPage() {
+ fileViewModel.getApkVersionList("", "", "APP", arrayOf(), pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023042401 -> {
+ if (isRefresh || isLoadMore) {
+ versionHistoryAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView.showEmptyPage("无APP版本更新记录") {
+ pageIndex = 1
+ getApkVersionListByPage()
+ }
+ } else {
+ emptyView.hide()
+ versionHistoryAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_update_log_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder,
+ position: Int,
+ item: VersionResultModel.DataModel.RowsModel
+ ) {
+ viewHolder.setText(
+ R.id.versionNameView,
+ "${resources.getString(R.string.app_name)} ${item.versionName} 主要更新"
+ )
+ .setText(R.id.descriptionView, item.descn)
+ //2023-04-23T17:06:06
+ .setText(R.id.dateView, item.updateTime.split("T")[0])
+ }
+ }
+ versionHistoryRecyclerView.addItemDecoration(
+ DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
+ )
+ versionHistoryRecyclerView.adapter = versionHistoryAdapter
+ }
+ }
+ }
+ }
+ true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
index a4d78eb..348183f 100644
--- a/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
+++ b/app/src/main/java/com/casic/xz/meterage/vm/FileViewModel.kt
@@ -41,9 +41,13 @@
it.printStackTrace()
})
- fun updateVersion() = launch({
+ fun getApkVersionList(
+ fileName: String, downloadNo: String, moduleName: String, ids: Array, offset: Int
+ ) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.updateVersion()
+ val response = RetrofitServiceManager.getApkVersionList(
+ fileName, downloadNo, moduleName, ids, offset
+ )
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/download_progress.xml b/app/src/main/res/drawable/download_progress.xml
index c800091..ebb7bc3 100644
--- a/app/src/main/res/drawable/download_progress.xml
+++ b/app/src/main/res/drawable/download_progress.xml
@@ -3,8 +3,8 @@
-
-
-
+
+
@@ -12,8 +12,8 @@
-
-
-
+
+
diff --git a/app/src/main/res/layout/activity_version_history.xml b/app/src/main/res/layout/activity_version_history.xml
new file mode 100644
index 0000000..109340f
--- /dev/null
+++ b/app/src/main/res/layout/activity_version_history.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_update_log_rv_l.xml b/app/src/main/res/layout/item_update_log_rv_l.xml
new file mode 100644
index 0000000..91c6dd8
--- /dev/null
+++ b/app/src/main/res/layout/item_update_log_rv_l.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file